gpt4 book ai didi

c# - 将 NAudio 与 SpeechSynthesizer 结合使用

转载 作者:太空狗 更新时间:2023-10-29 23:38:07 24 4
gpt4 key购买 nike

我想将 NAudio 与 SpeechSynthesizer 一起使用,但如果不先将 .wav 文件写入磁盘,我无法使其工作。

我不明白为什么,我尝试了 RAW 波形数据和带标题的波形,请参见以下示例...

示例 1 - 这有效,但保存了一个 .wav 文件

  using (var synth = new SpeechSynthesizer())
{
synth.SetOutputToWaveFile(@".\Test.wav");
synth.Speak("This is sample text-to-speech output.");
synth.SetOutputToNull();

var reader = new WaveFileReader(@".\Test.wav");
var waveOut = new WaveOut();
waveOut.Init(reader);
waveOut.Play();
}

示例 2 - 这也有效,但仍使用文件

  using (var synth = new SpeechSynthesizer())
using (var stream = new MemoryStream())
{
synth.SetOutputToWaveStream(stream);
synth.Speak("This is sample text-to-speech output.");

using (var fileStream = File.Create(@".\Test.wav"))
{
stream.Seek(0, SeekOrigin.Begin);
stream.CopyTo(fileStream);
}

var reader = new WaveFileReader(@".\Test.wav");
var waveOut = new WaveOut();
waveOut.Init(reader);
waveOut.Play();
}

示例 3 - 这不起作用,它只播放了几分之一秒然后停止

我故意使用 SetOutputToWaveStream 来保留 RIFF header ,以避免设置 wave 格式。

    using (var synth = new SpeechSynthesizer())
using (var stream = new MemoryStream())
{
synth.SetOutputToWaveStream(stream);
synth.Speak("This is sample text-to-speech output.");

stream.Seek(0, SeekOrigin.Begin);
var reader = new WaveFileReader(stream);
var waveOut = new WaveOut();
waveOut.Init(reader);
waveOut.Play();
}

示例 4 - 与示例 3 相同的结果

这使用原始数据并且有点庞大。

  using (var synth = new SpeechSynthesizer())
using (var stream = new MemoryStream())
{
synth.SetOutputToAudioStream(stream, new SpeechAudioFormatInfo(44100, AudioBitsPerSample.Sixteen, AudioChannel.Mono));
synth.Speak("This is sample text-to-speech output.");

stream.Seek(0, SeekOrigin.Begin);
IWaveProvider provider = new RawSourceWaveStream(stream, new WaveFormat(44100, 16, 1));
var waveOut = new WaveOut();
waveOut.Init(provider);
waveOut.Play();
}

我也尝试过使用 WasapiOut,但情况更糟。

最佳答案

示例 3 就差不多了。在重新定位到开始位置之前,对内存流调用 Flush。此外,Play 仅开始播放,因此您需要等待播放完成或将您的 WaveOut 实例移动到 using block 之外。否则,它只会在播放很远之前收集垃圾。

关于c# - 将 NAudio 与 SpeechSynthesizer 结合使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31155374/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com