- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用 System.Speech.Synthesis.SpeechSynthesizer将文本转换为语音。而且由于 Microsoft 的文档贫乏(请参阅我的链接,没有备注或代码示例),我无法确定两种方法之间的区别:
SetOutputToAudioStream 和 SetOutputToWaveStream。
以下是我的推断:
SetOutputToAudioStream 接受一个流和一个 SpeechAudioFormatInfo 实例,该实例定义了波形文件的格式(每秒样本数、每秒比特数、音频 channel 等)并将文本写入流。
SetOutputToWaveStream 只接受一个流并将一个 16 位、单声道、22kHz、PCM 波形文件写入流。没有办法传入 SpeechAudioFormatInfo。
我的问题是 SetOutputToAudioStream 没有将有效的波形文件写入流。例如,当将流传递给 System.Media.SoundPlayer 时,我得到一个 InvalidOperationException(“波头已损坏”)。如果我将流写入磁盘并尝试使用 WMP 播放它,我会收到“Windows Media Player 无法播放文件...”错误,但 SetOutputToWaveStream 写入的流在两者中都能正常播放。我的理论是 SetOutputToAudioStream 没有写一个(有效的)标题。
奇怪的是,SetOutputTo*Blah* 的命名约定不一致。 SetOutputToWaveFile 采用 SpeechAudioFormatInfo 而 SetOutputToWaveStream 没有。
我需要能够将 8kHz、16 位、单声道文件写入流,而 SetOutputToAudioStream 或 SetOutputToWaveStream 都不允许我这样做。有人了解 SpeechSynthesizer 和这两种方法吗?
作为引用,这里有一些代码:
Stream ret = new MemoryStream();
using (SpeechSynthesizer synth = new SpeechSynthesizer())
{
synth.SelectVoice(voiceName);
synth.SetOutputToWaveStream(ret);
//synth.SetOutputToAudioStream(ret, new SpeechAudioFormatInfo(8000, AudioBitsPerSample.Sixteen, AudioChannel.Mono));
synth.Speak(textToSpeak);
}
Stream ret = new MemoryStream();
using (SpeechSynthesizer synth = new SpeechSynthesizer())
{
var mi = synth.GetType().GetMethod("SetOutputStream", BindingFlags.Instance | BindingFlags.NonPublic);
var fmt = new SpeechAudioFormatInfo(8000, AudioBitsPerSample.Sixteen, AudioChannel.Mono);
mi.Invoke(synth, new object[] { ret, fmt, true, true });
synth.SelectVoice(voiceName);
synth.Speak(textToSpeak);
}
return ret;
最佳答案
您的代码片段很无聊,您在处理后使用了合成器。但这不是我确定的真正问题。 SetOutputToAudioStream 生成原始 PCM 音频,即“数字”。没有像 .wav 文件中使用的容器文件格式(标题)。是的,不能用常规媒体程序播放。
采用 SpeechAudioFormatInfo 的 SetOutputToWaveStream 缺少重载很奇怪。尽管这在 .NET 框架中极为罕见,但对我来说确实看起来像是一个疏忽。它不应该工作没有令人信服的理由,底层 SAPI 接口(interface)确实支持它。它可以通过反射来调用私有(private) SetOutputStream 方法。当我测试它时效果很好,但我不能保证它:
using System.Reflection;
...
using (Stream ret = new MemoryStream())
using (SpeechSynthesizer synth = new SpeechSynthesizer()) {
var mi = synth.GetType().GetMethod("SetOutputStream", BindingFlags.Instance | BindingFlags.NonPublic);
var fmt = new SpeechAudioFormatInfo(8000, AudioBitsPerSample.Eight, AudioChannel.Mono);
mi.Invoke(synth, new object[] { ret, fmt, true, true });
synth.Speak("Greetings from stack overflow");
// Testing code:
using (var fs = new FileStream(@"c:\temp\test.wav", FileMode.Create, FileAccess.Write, FileShare.None)) {
ret.Position = 0;
byte[] buffer = new byte[4096];
for (;;) {
int len = ret.Read(buffer, 0, buffer.Length);
if (len == 0) break;
fs.Write(buffer, 0, len);
}
}
}
关于.net - 使用 SpeechSynthesizer 使用 SpeechAudioFormatInfo 流式传输 TTS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3875778/
Chrome TTS:https://developer.chrome.com/apps/tts 谷歌语音合成:https://play.google.com/store/apps/details?i
我正在尝试使用发声器语音实现一个 tts 应用程序。我已经下载了很多语音,它们在 get Voices 调用中正确列出。 for(Voice v : engine.getVoices()){ }
有没有办法通过 tts 类(以正确的音调)输出 TTS 拼音? 我试过 SVOX 和 Pico... 我有一个数据库,其中不同的单词以如下形式存储Ni3好3 我试过:- Ni3Hao3 -> 结果:N
我目前有一个 tts,它是使用festival 和 festvox 构建的。我需要转换这些声音并在 flite 中构建一个 TTS。显然,您可以使用 festvox 进行转换(festvox 和 fl
我发现对于某些语言,google translate sound 中的声音文件是最真实的(与适用于 Android 的其他 TTS 引擎相比)。 谷歌翻译应用程序是否使用 TTS 引擎? 有没有办法从
使用 iOS 语音转文本时,我在 iOS 日志中收到以下错误消息。它仍然可以说话,所以我不确定它是否重要,但听起来并不好。有什么线索吗?在 Internet 上找不到任何内容。 TTSSpeechB
我在 Android 中开发了自己的 TTS 应用程序。有什么方法可以将我的 TTS 引擎部署到操作系统中而不是运行 TTS 应用程序,以便其他应用程序可以调用我的 TTS?类似于 MS Window
解决方案 看来你必须在onActivityResult中调用super方法 super.onActivityResult(requestCode, resultCode, data); 当我按下 Ac
我已经使用 pip 和 python 安装了 GTTS,第一对迭代似乎很好。但是现在我不断收到此错误: gtts.tts.gTTSError:来自 TTS API 的 429(请求过多)。可能的原因:
我有一台配备 Quadro P5000 显卡的机器,运行 Windows 10。我想在这个系统上训练 TTS 语音。我需要安装什么才能使它正常工作? 最佳答案 这是要安装/执行的操作: Downloa
我正在开发一个也有 TTS 功能的安卓翻译应用。我的问题是希腊语语音无法正常工作。它只会说字符也不会说印地语。我用眼镜发现谷歌 TTS 不支持希腊语。是不是下载了希腊语语言包就可以正常使用了。请建议我
我正在开发一个需要在屏幕关闭后继续大声朗读文本的应用程序。为了实现这个目标,我将文本转语音 (TTS) 代码放在前台服务中,这样 TTS 可以在屏幕关闭时继续运行。 它以前在我的手机上运行良好。但是我
在我的应用程序中,我使用 Intent checkIntent = new Intent(); checkIntent.setAction(TextToSpeech.Engine.ACTION_CHE
我获得了 Azure 认知服务的 API key ,但我找不到任何有关如何通过 postman 调用此服务的文档。有人有这方面的经验吗? 最佳答案 您似乎正在尝试使用 key 调用文本到语音服务。有两
向 TTS 引擎发送请求时,有什么方法可以控制 TTS 引擎的音量?我可以在这里使用 AudioManager 吗? 谢谢你。 最佳答案 你可以在 TTS speak() 方法中得到这个,但只能从 A
您现在必须付费才能使用 google translate api。我很乐意为这项服务付费,但我找不到使用 tts 的方法。这就是我正在做的 var GoogleTranslate = function
我已经从在线教程中实现了一个 android TTS 代码。所有的教程都有一个文本框和一个提交按钮来捕获它想要说的文本。我的目标是从文件中获取文本然后说话,不需要用户输入(因为这个模块将作为一个类实现
我正在尝试开发一个程序,我想在其中添加法语文本转语音!我查找了 FreeTTS,但它在法语中不起作用。 此外,我无法使用 Google 翻译等网络服务,因为我的应用程序无法访问互联网。 谢谢 最佳答案
我正在使用 Android 的 TTS(使用 Google 的引擎),我对设置和语言支持感到很困惑。这是我检测语言是否可用的方式: if (tts.isLanguageAvailable(curren
如何在我的应用中实现文本转语音以支持 minSdk 15?当前 API 是 24。我在此方法中遇到错误。 public void TextToSpeech(string Text) {
我是一名优秀的程序员,十分优秀!