C#将文本保存为语音到MP3文件

时间:2013-04-15 17:33:53

标签: c# text-to-speech

我想知道是否有办法将文本语音数据保存为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);

我试图将其保存在外部,以便我以后再播放。做这个的最好方式是什么?

3 个答案:

答案 0 :(得分:9)

multiple options,例如保存到现有流。如果要创建新的WAV文件,可以使用SetOutputToWaveFile方法。

reader.SetOutputToWaveFile(@"C:\MyWavFile.wav");

答案 1 :(得分:7)

不是我的回答,请从How do can I use LAME to encode an wav to an mp3 c#

复制粘贴

.Net 4.0中的最简单方法:

使用visual studio Nuget Package Manager控制台:

Install-Package NAudio.Lame

Code Snip:将语音发送到内存流,然后另存为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);
    }
}

答案 2 :(得分:1)

通常情况下,如果某些内容在开发工作站上运行但在生产服务器上运行,则会出现权限问题。两个想法: Lame是否在某处创建临时文件?如果是这样,IIS进程需要在那里写入权限。 在编写输出文件时,IIS进程再次需要写入该权限的权限。 ConvertWavStreamToMp3File(ref ms, "mytest.mp3");" mytest.mp3"可能需要使用Server.MapPath()

作为完整路径