Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/delphi/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在使用Delphi XE2或更高版本的Windows 10中使用SpeechAPI5.*?_Delphi_Windows 10_Text To Speech_Sapi_Microsoft Speech Api - Fatal编程技术网

如何在使用Delphi XE2或更高版本的Windows 10中使用SpeechAPI5.*?

如何在使用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

我在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); // 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)