Ответ 1
Есть несколько параметров, например сохранение в существующий поток. Если вы хотите создать новый WAV файл, вы можете использовать метод
Мне интересно, есть ли способ сохранить данные из текста в речь в формате mp3 или Wav, который будет воспроизведен в более позднее время?
SpeechSynthesizer reader = new SpeechSynthesizer();
reader.Rate = (int)-2;
reader.Speak("Hello this is an example expression from the computers TTS engine in C-Sharp);
Я пытаюсь получить это, сохраненное извне, чтобы воспроизвести его позже. Каков наилучший способ сделать это?
Есть несколько параметров, например сохранение в существующий поток. Если вы хотите создать новый WAV файл, вы можете использовать метод
Не мой ответ, скопируйте пасту из Как я могу использовать LAME для кодирования wav в mp3 С#
Самый простой способ в .Net 4.0:
Используйте консоль менеджера пакетов Visual Studio Nuget:
Install-Package NAudio.Lame
Код Снайп: отправьте речь в поток памяти, затем сохраните как mp3:
//reference System.Speech
using System.Speech.Synthesis;
using System.Speech.AudioFormat;
//reference Nuget Package NAudio.Lame
using NAudio.Wave;
using NAudio.Lame;
using (SpeechSynthesizer reader = new SpeechSynthesizer()) {
//set some settings
reader.Volume = 100;
reader.Rate = 0; //medium
//save to memory stream
MemoryStream ms = new MemoryStream();
reader.SetOutputToWaveStream(ms);
//do speaking
reader.Speak("This is a test mp3");
//now convert to mp3 using LameEncoder or shell out to audiograbber
ConvertWavStreamToMp3File(ref ms, "mytest.mp3");
}
public static void ConvertWavStreamToMp3File(ref MemoryStream ms, string savetofilename) {
//rewind to beginning of stream
ms.Seek(0, SeekOrigin.Begin);
using (var retMs = new MemoryStream())
using (var rdr = new WaveFileReader(ms))
using (var wtr = new LameMP3FileWriter(savetofilename, rdr.WaveFormat, LAMEPreset.VBR_90)) {
rdr.CopyTo(wtr);
}
}
Часто, если что-то работает на рабочей станции dev, но не на производственном сервере, это проблема с разрешениями. две мысли:
Создает ли Lame временные файлы где-нибудь? Если это так, для процесса IIS требуются права на запись.
При записи выходного файла снова необходимо, чтобы для IIS-процесса было разрешено его писать. ConvertWavStreamToMp3File(ref ms, "mytest.mp3");
"mytest.mp3", вероятно, должен быть полным путем, используя Server.MapPath()