在 C# 中使用语音 API 或的这两种方法有什么区别SAPI?
using SpeechLib;
SpVoice speech = new SpVoice();
speech.Speak(text, SpeechVoiceSpeakFlags.SVSFlagsAsync);
返回阿帕塞拉声音, and
SpeechSynthesizer ss = new SpeechSynthesizer();
ss.SpeakAsync ("Hello, world");
不适用于阿帕塞拉声音.
第一个返回所有声音,但第二个仅返回少数声音。这与 SAPI 5.1 和 SAPI 5.3 有关吗?
Vista 和 XP 上的行为相同,SpVoice 都能够检测到 Apacela 语音,但使用 SpeechSynthesizer,在 XP 和 Vista 上都检测不到语音。
我猜 XP 使用 SAPI 5.1,而 Vista 使用 SAPI 5.3,那么为什么在所有操作系统上都有相同的行为,但 API 的行为却不同呢?
还有哪个API更强大,两种方式/API有什么区别?
SpeechLib 是一个 Interop DLL,它在幕后利用了经典的基于 COM 的 SAPI。 System.Speech 由 Microsoft 开发,用于直接从托管代码中与文本转语音(和语音识别)进行交互。
一般来说,在编写托管应用程序时,坚持使用托管库 (System.Speech) 会更干净。
这绝对与 SAPI 版本无关——这里最可能的问题是语音供应商(在本例中为 Acapela)必须显式实现对某些 System.Speech 功能的支持。您所拥有的阿卡佩拉声音可能支持所需的一切,但也有可能不支持。你最好的选择是直接询问 Acapela 集团.
语音在 HKLM\SOFTWARE\Microsoft\Speech\Tokens 中注册,您应该会看到 Windows 内置语音以及您已添加的 Acapela 语音列在那里。如果您发现它们的注册方式有任何明显差异,您might能够通过使 Acapela 声音的配准与 MS-Anna 等的配准相匹配来使 Acapela 声音发挥作用。
但我想说最有可能的可能性是 Acapela 语音尚未更新以支持 System.Speech 所需的所有接口。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)