2015-07-01 137 views
1

我試圖使用此代碼來將文本轉換爲語音與Python 3.4,但由於我的電腦的主要語言不是英語(我使用Win7x64),語音和口音都是錯誤的(因爲我想讓它「說」英語)。Python 3.4 - 文本到語音與SAPI

import win32com.client 
speaker = win32com.client.Dispatch("SAPI.SpVoice") 
speaker.Speak("Hello, it works!") 

那麼,有沒有辦法改變語音/語言(程序,而不是系統)? 另外,你認爲有更好的方法來做到這一點?也許一個模塊可以在每個系統上工作?

+0

你看過[SpVoice :: SetVoice](https://msdn.microsoft.com/en-us/library/ms719807(v = vs.85).aspx)嗎? –

+0

是的,但我不知道如何使用它。我嘗試過,但據說它是C++ ...也許我不理解。 – Livio

回答

2

有可能您的操作系統只能以一個聲音出現。有幾種方法可以使用IPA(國際語音語言)和SVSFIsXML作爲您的通話中的標誌來獲得英語探測輸出......但是我猜你想要的東西不那麼複雜。

我要做的第一件事就是抓住一個英語聲音,如果你還沒有的話。 (首先檢查您的控制面板 - >語音識別 - > 文本轉換語音並查看您的語音選擇。如果它顯示「Microsoft Anna - English(United States)」,那麼您的語音已經是英文了。

如果沒有,你將不得不再抓住另一個聲音Microsoft Speech Platform - Runtime Languages (Version 11)。我強烈建議Microsoft Server Speech Text to Speech Voice(en-US,ZiraPro)作爲英語語音。您還需要Microsoft Speech Platform - Software Development Kit (SDK) (Version 11)

老實說,我只是把它們全部安裝好,因爲我覺得它很酷。

一旦你已經安裝了所有的東西,我發現的聲音工作是一個整潔的註冊表黑客,我發現在Voice Attack - Getting free alternate TTS voices working with Win7/8 64bit

基本上,這需要的是你做一些字符串替換在MS語音平臺的聲音在你的註冊表,使你在你的

HKEY_LOCAL_MACHINE \ SOFTWARE \微軟\語音服務器看到\ 11.0 \聲音 HKEY_LOCAL_MACHINE \ SOFTWARE \ Wow6432Node \微軟\語音服務器\ 11.0 \聲音

登記處將在風:

HKEY_LOCAL_MACHINE \ SOFTWARE \微軟\語音\聲音 HKEY_LOCAL_MACHINE \ SOFTWARE \ Wow6432Node \微軟\語音\聲音

完成後,返回控制面板並查看您安裝的所有聲音。你應該能夠測試所有,甚至用不同的語言。如果聲音沒有播放,那麼你安裝的聲音不是正確的位(x86 vs 64)。

現在在python中,您將不得不進行SetVoice調用。我從來沒有在我的生活中用python編程,但我想象你想要的電話看起來像是speaker.SetVoice(「微軟服務器語音文本到語音語音(en-US,ZiraPro)」)。在您設置語音之後,您發出Speak呼叫時應始終使用該語音。

現在,如果你已經掌握了這一點,並在控制面板中播放的聲音,而不是在你的代碼,可能是你的程序是32位/ 64位或什麼的,然後你必須回跑,重新安裝相反的32位/ 64位語音,再次運行您的reg編輯,然後再次運行您的應用程序。

一點工作,但它會得到回報。如果你確實分發你的代碼,你必須確保你的聲音是客戶端註冊表的一部分,而搞砸這件事本身就是一件令人頭痛的事情。

+1

omg通過您的響應閱讀剛剛解決了我在C#中的問題http://stackoverflow.com/questions/34776593/speechsynthesizer-selectvoice-fails-with-no-matching-voice-is-installed-or-th!需要切換到x64!非常感謝!!! :) – kat

+1

x86/64位的東西讓我失望了很多次。 –