我想知道是否有办法将文本到语音数据保存为 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);
我正在尝试将其保存在外部,以便稍后播放。做这个的最好方式是什么?
我想知道是否有办法将文本到语音数据保存为 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 文件,可以使用SetOutputToWaveFile方法。
reader.SetOutputToWaveFile(@"C:\MyWavFile.wav");
不是我的答案,复制粘贴如何使用 LAME 将 wav 编码为 mp3 c#
.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);
}
}
通常,如果某些东西在开发工作站上工作但在生产服务器上不工作,则它是权限问题。两个想法: Lame 会在某处创建临时文件吗?如果是这样,IIS 进程需要那里的写入权限。写入输出文件时,IIS 进程再次需要写入权限。ConvertWavStreamToMp3File(ref ms, "mytest.mp3");
“mytest.mp3”可能需要是完整路径,使用Server.MapPath()