E. *_*ist 5 c# text-to-speech naudio
我想将NAudio和SpeechSynthesizer一起使用,但是如果不首先将.wav文件写入磁盘,我就无法工作.
我无法弄清楚为什么,我尝试了RAW wav数据和带标题的wav,请参阅以下示例.
我有以下示例:
示例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();
}
Run Code Online (Sandbox Code Playgroud)
示例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();
}
Run Code Online (Sandbox Code Playgroud)
示例3 - 这不起作用,它只播放一小段时间并停止
我故意使用SetOutputToWaveStream来保留RIFF标题,以避免设置波形格式.
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();
}
Run Code Online (Sandbox Code Playgroud)
实施例4-与实施例4相同的结果
这使用原始数据并且有点笨重.
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();
}
Run Code Online (Sandbox Code Playgroud)
我也尝试过使用WasapiOut,但情况更糟.
您即将完成示例 3。Flush在重新定位到开头之前调用您的内存流。此外,Play仅开始播放,因此您需要等待播放完成或将WaveOut实例移至块之外using。否则,它只会在播放之前就被垃圾收集。
| 归档时间: |
|
| 查看次数: |
1536 次 |
| 最近记录: |