C# 中的 SpeechSynthesizer 创建具有 22kHz 的 wav ...需要为 16kHz

Posted

技术标签:

【中文标题】C# 中的 SpeechSynthesizer 创建具有 22kHz 的 wav ...需要为 16kHz【英文标题】:SpeechSynthesizer in C# creates wav that has 22kHz... needs to be 16kHz 【发布时间】:2011-02-07 05:03:44 【问题描述】:

我的 C# 应用程序需要将文本转换为 wav 文件并将其注入到 Skype 通话中。创建 wav 文件的代码如下。问题是该文件有 22kHz 的采样率,而 Skype 只接受 16kHz。

有没有办法调整这个设置?

using (System.IO.FileStream stream = System.IO.File.Create("message.wav"))


System.Speech.Synthesis.SpeechSynthesizer speechEngine = new System.Speech.Synthesis.SpeechSynthesizer();

 speechEngine.SetOutputToWaveStream(stream);
 speechEngine.Speak(number);
 stream.Flush();

【问题讨论】:

【参考方案1】:

SetOutputToWaveFile() 有一个接受SpeechAudioFormatInfo 参数的重载,该参数可用于设置采样率。 奇怪的是,没有看到 SetOutputToWaveStream() 的文件,但是既然你正在写入一个文件,那应该可以工作。

编辑:

正如@Hans 指出的那样,正确的重载是SetOutputToAudiostream() 写入流。

【讨论】:

SetOutputToAudioStream() 是替代方法。 @Hans,啊,我明白了。奇怪的是它们的命名不一致...SetOutputToAudioFile() 用于非波形格式,或重载的SetOutputToWaveStream()。更新了答案。 :) 完美解决方案。我的 wav 文件格式正确!

以上是关于C# 中的 SpeechSynthesizer 创建具有 22kHz 的 wav ...需要为 16kHz的主要内容,如果未能解决你的问题,请参考以下文章

C# 语音合成

如何在 SpeechSynthesizer 播放时播放 IMFMediaEngine 背景音频

在 Azure Web App(.NET Framework 4.7)上发布后,“SpeechSynthesizer”不起作用

asp.net使用SpeechSynthesizer类生成语音文件部署到iis遇到的几个坑

SpeakProgress 事件中的音频位置对于“Microsoft Anna”语音不正确

如何在运行时使用 C# 创建强类型数据集?