我目前正在开发一个应用程序,该应用程序需要传输编码为特定音频格式的语音。
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 接受该音频格式并成功识别了我合成的波形文件中的语音......
更新:最近发现这种音频格式对于某些已安装的声音成功,但对于其他声音则失败。它专门针对 LH Michael 和 LH Michelle 失败,并且失败因 PromptBuilder 中定义的某些语音设置而异。