我目前正在开发一个应用程序,它需要传输编码为特定音频格式的语音。
System.Speech.AudioFormat.SpeechAudioFormatInfo synthFormat =
new System.Speech.AudioFormat.SpeechAudioFormatInfo(System.Speech.AudioFormat.EncodingFormat.Pcm,
8000, 16, 1, 16000, 2, null); 这说明音频是PCM格式,每秒8000个样本,每个样本16比特,单声道,每秒16000个平均字节,块对齐2。
当我尝试执行以下代码时,没有向MemoryStream实例写入任何内容;但是,当我从每秒8000个样本更改为每秒11025个样本时,音频数据被成功写入。
SpeechSynthesizer synthesizer = new SpeechSynthesizer();
waveStream = new MemoryStream();
PromptBuilder pbuilder = new PromptBuilder();
PromptStyle pStyle = new PromptStyle();
pStyle.Emphasis = PromptEmphasis.None;
pStyle.Rate = PromptRate.Fast;
pStyle.Volume = PromptVolume.ExtraLoud;
pbuilder.StartStyle(pStyle);
pbuilder.StartParagraph();
pbuilder.StartVoice(VoiceGender.Male, VoiceAge.Teen, 2);
pbuilder.StartSentence();
pbuilder.AppendText("This is some text.");
pbuilder.EndSentence();
pbuilder.EndVoice();
pbuilder.EndParagraph();
pbuilder.EndStyle();
synthesizer.SetOutputToAudioStream(waveStream, synthFormat);
synthesizer.Speak(pbuilder);
synthesizer.SetOutputToNull(); 当使用8000的采样率时,没有记录任何异常或错误,我在文档中找不到任何关于SetOutputToAudioStream的有用信息,以及为什么它在每秒11025个样本而不是8000个样本的情况下成功。我有一个变通办法,涉及我生成的wav文件,并使用一些声音编辑工具将其转换为正确的采样率,但如果可以,我希望从应用程序中生成音频。
一个特别有趣的是,SpeechRecognitionEngine接受这种音频格式,并成功地识别出我合成的wave文件中的语音……
更新:最近发现,此音频格式对某些已安装的语音成功,但对其他语音则失败。它特别针对LH Michael和LH Michelle失败,并且失败因PromptBuilder中定义的某些语音设置而异。
发布于 2009-10-08 22:36:10
LH、Michael和LH米歇尔的声音完全有可能不支持8000 Hz的采样率(因为它们本身就会产生大于8000 Hz的采样)。SAPI允许引擎拒绝不支持的速率。
发布于 2008-12-03 12:16:58
我在我的NAudio库中创建了一些类,允许您将音频数据转换为不同的采样率,如果您坚持使用合成器中的11025采样率。看看WaveFormatConversionStream (使用ACM)或ResamplerDMO (使用DirectX媒体对象)
发布于 2012-12-24 12:09:47
我也有类似的问题,我想发表一个回复,以防对任何人有帮助。这个帖子让我找到了答案。我的问题是,我将SpeechSynthesizer输出到WAV文件,然后用NAudio播放该WAV文件。当输出到文件时,它无需修改即可工作。然而,当尝试使用MemoryStream时,它会回放,但速度如此之快,你听到的只是一声尖叫。
这个输出SpeechSynthesizer的代码修复了这个问题,不需要在NAudio端进行任何修改:
SpeechAudioFormatInfo synthFormat = new SpeechAudioFormatInfo(EncodingFormat.Pcm, 88200, 16, 1, 16000, 2, null);
synth.SetOutputToAudioStream(streamAudio, synthFormat);88200是关键。默认情况下,该值为11025。只需创建SpeechAudioFormatInfo并将其设置为88200即可。
https://stackoverflow.com/questions/254930
复制相似问题