如何将“Hello World!Speech”文本写为本地磁盘.wav文件? hellospeech.wav
仍为0Ko。哪里我错了?
SpeechSynthesizer synthesizer = new SpeechSynthesizer();
MemoryStream waveStream = new MemoryStream();
SpeechAudioFormatInfo synthFormat =
new SpeechAudioFormatInfo(44100, AudioBitsPerSample.Sixteen, AudioChannel.Stereo);
string text = "Hello World! Speech";
synthesizer.Speak(text);
synthesizer.SetOutputToAudioStream(waveStream, synthFormat);
synthesizer.SetOutputToNull();
synthesizer.Dispose();
string path = @"E:\hellospeech.wav";
FileStream writeStream = new FileStream(path, FileMode.Create, FileAccess.Write);
int Length = 256;
Byte[] buffer = new Byte[Length];
int bytesRead = waveStream.Read(buffer, 0, Length);
while (bytesRead > 0)
{
writeStream.Write(buffer, 0, bytesRead);
bytesRead = waveStream.Read(buffer, 0, Length);
}
waveStream.Close();
writeStream.Close();
答案 0 :(得分:3)
两个问题:
MemoryStream
倒回Speak
您还没有使用using
语句 - 但这并未导致此问题。
我自己没有使用过这个SDK,但我希望这段代码更有可能发挥作用:
var waveStream = new MemoryStream();
using (var synthesizer = new SpeechSynthesizer())
{
var synthFormat =
new SpeechAudioFormatInfo(44100, AudioBitsPerSample.Sixteen, AudioChannel.Stereo);
string text = "Hello World! Speech";
// Or SetOutputToWaveStream...
synthesizer.SetOutputToAudioStream(waveStream, synthFormat);
synthesizer.Speak("Hello World! Speech");
}
using (var file = File.Create(path))
{
// With WriteTo, you don't need to rewind first...
waveStream.WriteTo(file);
}
你有没有理由先写入内存流?为什么不直接写入文件,例如使用synthesizer.SetOutputToWaveFile(path)
?