使用语音API或SAPI在C#中这两种方法有什么区别?
using SpeechLib; SpVoice speech = new SpVoice(); speech.Speak(text, SpeechVoiceSpeakFlags.SVSFlagsAsync);
返回Apacela的声音,和
SpeechSynthesizer ss = new SpeechSynthesizer(); ss.SpeakAsync ("Hello, world");
不适用于Apacela的声音.
第一个声音返回所有声音,但第二个声音只返回少量声音.这是与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可能会说你支持所需要的一切,但也有可能他们不支持.您最好的选择是直接询问Acapela集团.
声音在HKLM\SOFTWARE\Microsoft\Speech\Tokens中注册,您应该看到Windows内置声音,以及您在其中列出的Acapela声音.如果你发现他们的注册方式有任何明显的差异,你可以通过使他们的注册与MS-Anna的注册相匹配来使Acapela的声音有效.
但我要说的最可能的是,Acapela语音尚未更新,无法支持System.Speech所需的所有接口.