2010-07-24 62 views
1

我正在從XP遷移到Windows 7 64位。我在XP機器上編譯的應用程序在XP上正常工作。然而,當我在我的W7的機器上運行的exe,通過GetVoices返回聲音的名單如下:
微軟安娜
微軟瑪麗
微軟邁克
樣品TTS語音。Microsoft語音API 5.1 GetVoices返回Windows 7上不存在的語音

檢查W7語音屬性對話框顯示只有微軟安娜在機器上加載。在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是導入類型庫列表中顯示的內容)。

我在我的W7機器上安裝了SpeechSDK51.exe。這來自:

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; 

對如何處理這個問題的任何建議?

感謝,
shawnh

+0

我有同樣的問題,你有沒有找到解決辦法? – 2011-04-11 21:20:35

回答

0

未經證實,但我認爲微軟山姆,微軟邁克和瑪麗微軟不會在Windows Vista和更高版本。

我想你可以用5.1 SDK安裝它們,當你查詢聲音時會報告它們,但可能與5.4引擎不兼容,它們不能被使用。

您可能需要使用EngineProperties屬性過濾GetVoices以限制返回的內容。

免責聲明:這一切都是未經檢驗/猜測/文檔閱讀....

+0

謝謝弗朗索瓦。我想我沒有足夠清楚地解釋這個問題。問題不在於Mike和Marry不能在W7上工作(我不知道 - 我沒有嘗試過)。問題是GetVoices顯示它們安裝在機器上,但它們不是。如果用戶從GetVoices返回的聲音列表中選擇Mary,則會出現錯誤,因爲該聲音未實際安裝在機器上。 – user327359 2010-07-26 15:08:52

2

微軟安娜是你 唯一的64位語音其他的都是32位的引擎。 您的系統只能使用64位引擎(Anna),因此只能在面板中選擇該引擎。但其他的安裝也是如此。如果你打開這個文件:/%Windows%/SystemWOW64/Speech/SpeechUX/sapi.cpl,你會看到一個類似於控制面板的對話框,但現在你可以選擇任何一個聲音作爲標準聲音。