簡體   English   中英

Python 3.4 - 使用 SAPI 的文本到語音

[英]Python 3.4 - Text to Speech with SAPI

我試圖使用此代碼使用 Python 3.4 將文本轉換為語音,但是由於我計算機的主要語言不是英語(我使用的是 Win7x64),因此語音和口音是錯誤的(因為我希望它“說”英語) .

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

那么,有沒有辦法改變聲音/語言(程序的,而不是系統的)? 另外,您認為有更好的方法嗎? 也許一個可以在每個系統上工作的模塊?

很有可能你的操作系統只有一種聲音。 有幾種方法可以使用 IPA(國際語音語言)和 SVSFIsXML 作為語音通話中的標志來獲得英語發音輸出......但我猜你想要的東西比這更簡單。

如果您還沒有英語語音,我會做的第一件事就是獲取英語語音。 首先通過進入您的控制面板-> 語音識別-> 文本到語音並查看您的語音選擇進行檢查。如果它顯示“Microsoft Anna - 英語(美國)”那么,是的,您已經有了英語語音。

如果沒有,您將不得不獲取另一個語音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 alter TTS voices working with Win7/8 64bit 中發現的一個整潔的注冊表黑客。

基本上,這需要您在注冊表中的 MS Speech Platform 語音中進行一些字符串替換,以便您在注冊表中看到的內容

HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Speech Server\\v11.0\\Voices HKEY_LOCAL_MACHINE\\SOFTWARE\\Wow6432Node\\Microsoft\\Speech Server\\v11.0\\Voices

注冊管理機構將在:

HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Speech\\Voices HKEY_LOCAL_MACHINE\\SOFTWARE\\Wow6432Node\\Microsoft\\Speech\\Voices

完成后,返回控制面板並查看您安裝的所有聲音。 即使使用不同的語言,您也應該能夠對它們進行全部測試。 如果聲音沒有播放,那么您安裝的聲音就不是正確的位(x86 與 64)。

現在在 python 中,您必須進行 SetVoice 調用。 我這輩子從來沒有用 Python 編程過,但我想你想要的電話看起來像 Speaker.SetVoice("Microsoft Server Speech Text to Speech Voice (en-US, ZiraPro)")。 設置語音后,當您撥打 Speak 電話時,該語音應該是一直在說話的語音。

現在,如果您已經到了這一點並且聲音在控制面板中播放但在您的代碼中沒有播放,則可能是您的程序是 32 位/64 位或其他什么,然后您必須返回,重新安裝相反的 32 位/64 位聲音,再次運行您的 reg 編輯,並嘗試再次運行您的應用程序。

有點工作,但它會得到回報。 如果您確實分發了代碼,則必須確保您的聲音是客戶端注冊表的一部分,而弄亂它本身就是一件令人頭疼的事情。

這適用於python。

隨意讓它更優雅。

import win32com.client as wincl

speaker_number = 1
spk = wincl.Dispatch("SAPI.SpVoice")
vcs = spk.GetVoices()
SVSFlag = 11
print(vcs.Item (speaker_number) .GetAttribute ("Name")) # speaker name
spk.Voice
spk.SetVoice(vcs.Item(speaker_number)) # set voice (see Windows Text-to-Speech settings)
spk.Speak("Hello, it works!")

這也應該提供如何從 SDK 示例進行轉換的一般概念。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM