我在 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。不幸的是,Windows 10 引发了异常。在日志文件中,我可以阅读:
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
。
我如何才能毫无例外地处理所有声音?