1

我正在从 XP 迁移到 Windows 7 64 位。我在 XP 机器上编译的应用程序可以在 XP 上正常运行。但是,当我在 W7 机器上运行 exe 时,GetVoices 返回的声音列表如下:
Microsoft Anna
Microsoft Mary
Microsoft Mike
Sample TTS Voice。

检查 W7 语音属性对话框显示机器上仅加载了 Microsoft Anna。检查 HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Speech/Voices 的注册表可以确认这一点。

在我的新 Windows 7 开发机器上重新编译我的应用程序会创建一个重复上述行为的 exe。(XP编译代码和W7编译代码在W7下执行时重现同样的错误)

我在 Windows 7 64 位上使用 Delphi 7 进行开发,我正在使用 Microsoft Speech Object Library(版本 5.4)(注意:5.4 是导入类型库列表中显示的内容)。

我将 SpeechSDK51.exe 安装到我的 W7 机器上。这来自:

http://www.microsoft.com/downloads/details.aspx?FamilyID=5e86ec97-40a7-453f-b0ee-6583171b4530&DisplayLang=en

以下代码在 Windows 7 上生成 4 种声音的列表,即使应该只有一种声音:

procedure TForm1.FormCreate(Sender: TObject);  
var  
    i: integer;  
    SOToken: ISpeechObjectToken;  
    SOTokens: ISpeechObjectTokens;  
begin  
    cbbVoices.Clear;  
    SOTokens := SpVoice1.GetVoices('', '');  

    for i := 0 to SOTokens.Count - 1 do begin  
        SOToken := SOTokens.Item(i);  
        cbbVoices.AddItem( SOToken.GetDescription(0), TObject(SOToken) );  
        SOToken._AddRef;  
    end;  
end;  

关于如何处理这个问题的任何建议?

谢谢,
肖恩

4

2 回答 2

2

Microsoft Anna 是您拥有的唯一 64 位语音,其他的是 32 位引擎。您的系统只能使用 64 位引擎(Anna),因此只能在面板中选择此引擎。但其他的也已安装。如果您打开此文件:/%Windows%/SystemWOW64/Speech/SpeechUX/sapi.cpl,您将看到一个类似于控制面板的对话框,但现在您可以选择其中任何一种声音作为标准声音.

于 2010-09-18T13:10:08.913 回答
0

尚未确认,但我认为 Microsoft Sam、Microsoft Mike 和 Microsoft Mary 不适用于 Windows Vista 及更高版本。

我猜你可以用 5.1 SDK 安装它们,所以当你查询声音时会报告它们,但可能与 5.4 引擎不兼容,它们不能使用。

您可能希望使用 EngineProperties 属性过滤 GetVoices 以限制返回的内容。

免责声明:所有这些都是未经测试/猜测/阅读文档的......

于 2010-07-25T18:35:48.997 回答