如何在使用Delphi XE2或更高版本的Windows 10中使用SpeechAPI5.*?
我在Delphi XE2中有SpeechAPI 5.4的示例。这是其中的一部分:如何在使用Delphi XE2或更高版本的Windows 10中使用SpeechAPI5.*?,delphi,windows-10,text-to-speech,sapi,microsoft-speech-api,Delphi,Windows 10,Text To Speech,Sapi,Microsoft Speech Api,我在Delphi XE2中有SpeechAPI 5.4的示例。这是其中的一部分: try SpVoice:= TSpVoice.Create(nil); SOTokens := SpVoice1.GetVoices('', ''); for i := 0 to SOTokens.Count - 1 do begin SOToken := SOTokens.Item(I); SOToken._AddRef; s:=SOToken.GetDescription(0
try
SpVoice:= TSpVoice.Create(nil);
SOTokens := SpVoice1.GetVoices('', '');
for i := 0 to SOTokens.Count - 1 do begin
SOToken := SOTokens.Item(I);
SOToken._AddRef;
s:=SOToken.GetDescription(0); // raise exception
Log(IntToStr(i)+': '+s);
end;
except
on E : Exception do begin
Log(E.ClassName+' error raised, with message : '+E.Message);
end;
end;
从XP到8.1,此代码在所有Windows上都正常工作。不幸的是,Windows10引发了异常。在日志文件中我可以读取:
0: Microsoft David Desktop - English (United States)
EOleException error raised, with message : OLE error 8004503A
标准Windows文本到语音工具向我显示2种可用语音:
Microsoft David Desktop - English (United States)
Microsoft Zira Desktop - English (United States)
动态创建TSpVoice
非常重要
如何处理所有语音而不出现异常?我在Windows 7中使用过SAPI。没有在Windows10中使用过它
0x8004503a
表示SPERR\u未找到
:未找到请求的数据项(数据键、值等)。
能否尝试此操作:-此操作在Windows 10上有效吗?您在Delphi上安装了哪些更新?你能用更新包3解决这个问题吗?这是不一样的,但在Delphi XE2 Update 4中,他们破坏了一些COM部件,并破坏了MS Office交互,直到应用了补丁。也许(只是也许)那也会影响你。更新,行中SOToken.GetDescription(0)
called@Arioch'我使用带有更新4修补程序1 x32的Embarcadero RAD Studio XE2编译器。不幸的是,我不能使用Update 3,因为我们有一个庞大的开发团队,而且要完全改变编译器并不容易。对于链接,我将尝试使用它。SOToken的接口是什么?它是否有类似于.Count
或.Length
或.IsEmpty
的内容?如果在某些容器中真的没有一个元素,甚至没有第0个元素,该怎么办?你能在GetDescription
之前放置一个保护吗?类似于的东西,如果SOToken不是空的,那么SOToken.GetDescription(0)
?