- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我想将 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/
我目前正在做一个项目,我想让 SpeechSynthesizer 说出一段文字。我还想要一个文本块来显示说话时的单词。如果您不了解语音合成器,您可以阅读本文。 所以基本上问题是,当语音合成器说出文本框
我在 Windows 7 64 位操作系统中安装了新的 32 位 Scansoft 语音 (Jennifer),以便能够在我正在开发的一个 .NET 应用程序中使用。 问题是当我调用该方法时:
我有以下代码 [WebMethod] public byte[] stringToWav(string text) { SpeechSynthesizer ss = new SpeechSyn
我开发了一个项目,我想发布它使用 c#、WPF 和 System.Speech.Synthesizer 对象。阻止该项目发布的问题是,每当调用 SpeakAsync 时,它都会留下内存泄漏,该泄漏会增
除了默认的 Anna 语音外,我还需要在 SpeechSynthesizer 中使用男声。我从 Microsoft 安装了一些文件,GetInstalledVoices() 方法说现在我有 Micro
我在我的 Windows 7 32 位操作系统中安装了一个新语音,以便能够在我正在开发的一个 .NET 应用程序中使用。 但是当我使用 GetInstalledVoices() 方法查看所有语音列表时
我试图更换扬声器,但我没有在 SpeechSynthesizer 类中征集所有已安装的扬声器(George、Susan、Jakub),另一方面我有一个根本没有安装(齐拉)。 这里发生了什么?我能否以某
我正在尝试使用 SpeakAsync() 方法来朗读一些文本。但是,在我调用 Speak() 之前它不会开始说话。我不想调用 Speak()。如果我从此代码中删除 Speak() 方法,则根本不会调用
我创建了一个 Storyboard,其中包含一些移动元素/对象,我想将 SpeechSynthesizer 添加到 Storyboard中。 这可能吗?我正在使用 C#。 Storyboard myS
在 C# 的文本到语音应用程序中,我使用 SpeechSynthesizer 类,它有一个名为 SpeakProgress 的事件,每个说出的词都会被触发。但对于某些声音,参数 e.AudioPosi
我正在尝试通过 SSML 和 .NET SpeechSynthesizer (System.Speech.Synthesis) 更改语音文本的音调 SpeechSynthesizer synthesi
我正在执行一些文本到语音转换,我想在词典文件中指定一些特殊的发音。我跑了MSDN's AddLexicon example逐字逐句,它说出句子,但它不使用给定的词典,似乎有些东西被破坏了。 这是提供的
我正在编写一个应用程序来向学生朗读随机学习问题。 基本流程是: 生成随机问题 将文本分配给 SpeechUtterrance 使用 SpeechSynthesizer 播放 SpeechUtteran
所以我正在尝试向 SpeechSynthesizer 添加一种新语言,特别是挪威语,但它似乎没有安装。 发现这个: Add another voice into .NET Speech(但这里的问题是
我正在使用 Microsoft 的 SpeechSynthesizer 为我的 Windows Phone 应用创建音频输出。我用这个代码 private async void TextToSpeec
我想做的是按下朗读按钮,这将突出显示第一段,然后朗读该段落,然后将下一段滚动到 textView 的中心并突出显示该段落并朗读它等等。我必须添加什么代码才能做到这一点? import UIKit im
在 C# 中使用语音 API 或 SAPI 的这两种方法有什么区别? ? using SpeechLib; SpVoice speech = new SpVoice(); speech.Speak(t
我正在处理文字转语音任务。我面临的问题是,如果我得到例如文本:大家好。还剩 2 分钟。 然后将下面的代码用于语音合成器,它将整个文本视为一个句子,并且在 Hello everyone. 之后不会自然停
我目前正在开发一个需要传输编码为特定音频格式的语音的应用程序。 System.Speech.AudioFormat.SpeechAudioFormatInfo synthFormat =
使用 .Net 3.5 中的 System.Speech.Synthesis.SpeechSynthesizer 类,SpeakProgressEventArgs 的 AudioPosition 属性
我是一名优秀的程序员,十分优秀!