今天,我想跟大家分享如何利用 Python 編程語言,來實現文字轉換為語音的功能,也就是我們常說的 Text-to-Speech (TTS) 技術。
你可能會好奇,為什么學習這個?想象一下,如果你想把書本、文章、雜志的內容轉換為語音來“聽”,而不是單純地“看”,這個技術就能派上用場。或者,如果你正在開發一個跨平臺的系統,需要整合定制化的語音服務,TTS 也能提供強大的支持。甚至,如果你手頭已經有寫好的腳本,想快速轉換為視頻的旁白聲音,TTS 也能大幅加快你的工作速度。
現在市面上其實已經有很多成熟的 TTS 服務了。比如說,Google 就提供相當高質量的 TTS 服務,發音自然,速度也快。不過,一旦超出了免費使用額度,就需要付費。臺灣也有本地化的選擇,像是“雅婷文字轉語音”,它更貼近臺灣口音,對于服務本地用戶非常有幫助。這些商用服務質量通常比較好,處理速度也快。
但是,如果你的需求是比較輕量級的,例如只是想為自己打造一個小工具,或者開發一個不需要大規模部署的小型服務,那么使用 Python 的?pyttsx3?套件就會是一個非常方便且免費的選擇。這個套件提供了相當完整的 API 文檔,我個人覺得用起來非常直觀。你可以去查詢它的官方文檔,我在文末也會提供相關鏈接或搜索提示。
好了,話不多說,我們來看看如何實際使用?pyttsx3?吧。
要使用這個套件,第一步當然是先安裝它。安裝很簡單,通常就是通過 pip 指令。確認安裝好之后,我們就可以在 Python 環境中開始寫代碼了。為了方便演示,我選擇在 Jupyter Notebook 的環境下來進行。
首先,我們需要把?pyttsx3?套件導入到代碼中:
import pyttsx3
接著,我會定義一個變量?txt,把我們想要轉換為語音的文字放在里面。這里先用一個簡單的例子:
txt = "Hello Ryan"
再來,我們需要一個“引擎”來幫我們做轉換的工作。我定義一個變量?engine?來代表這個對象:
engine = pyttsx3.init()
初始化好引擎之后,之后的所有操作,幾乎都是通過這個?engine?變量來進行。
下一步,我們告訴引擎要“說出”什么文字。套件提供了一個很直白的函數叫做?say():
engine.say(txt)
最后,也是關鍵的一步,調用?runAndWait()?函數。這個函數會執行語音轉換的過程,并且會等待聲音播放完畢:
engine.runAndWait()
好,到這里基本的操作就完成了。執行這段代碼,你應該就能聽到你的電腦將 "Hello Ryan" 這幾個字說出來了。
不過,你可能會發現,默認的語音聽起來速度好像有點快,而且語調不一定是最理想的。別擔心,pyttsx3?允許我們進行調整。
前面提到,pyttsx3?的 API 文檔很有用。通過查閱文檔,我們可以找到像?getProperty()?這樣的函數,用來獲取引擎目前的屬性設置。常用的屬性有四種:語速 (rate)、語音 (voice)、可用的語音列表 (voices) 和音量 (volume)。
其中,rate?代表說話的速度。如果沒有特別設置,默認值通常是每分鐘 200 個字。
而?voices?會列出所有我們系統上可用的語音選項。這個列表是會根據你的操作系統而有所不同的。比如說,我目前用的是 Apple 的 macOS 系統,所以在列表中看到的語音 ID 會是?apple?開頭的。
列表里面列出了很多語音選項,它們代表不同的語言和發音人。你可以通過?getProperty('voices')?來查看你系統上提供了哪些語音。每一個語音都有一個獨特的 ID。
假設我在列表中看到一個名字叫做?samantha?的語音,它的語言是英文。我想使用這個語音來發音,并且希望速度慢一點,讓聲音更清晰。我可以這樣設置:
首先,使用?setProperty()?函數來設置屬性值:
voice_id = "你的英文語音ID,例如 apple speect:Samantha" # 替換成你系統上實際的英文語音ID
engine.setProperty('voice', voice_id)
然后,設置語速。因為 "Hello Ryan" 只有兩個單詞,說太快一下就過去了,我把語速調低一點,例如設置為 50:
engine.setProperty('rate', 50) # 設置語速為每分鐘 50 字
設置完成后,再執行?say?和?runAndWait:
engine.say("Hello mike")
engine.runAndWait()
聽起來是不是比剛才好多了?
你也可以嘗試其他的語音設置。像我試過一個 ID 叫做?Fred?的語音設置,據說這是 1984 年喬布斯介紹第一臺 Macintosh 電腦時,第一次使用電腦將文字轉換為語音時的發音。雖然聽起來年代感十足,但還挺清晰的。這就展現了選擇不同語音的多樣性。
除了直接在代碼中寫死文字,很多時候我們需要讀取外部文件中的文字。pyttsx3?也完全支持這一點。
我可以在設置好屬性的代碼下方,加入讀取文件的部分。我使用 Python 常用的?with open()?關鍵字來打開一個已經準備好的文字文件(假設我把文字內容儲存在?my_article.txt?這個文件里)。我給這個打開的文件對象取名為?file。
接著,我使用一個?for?循環,一行一行地讀取文件中的文字。在讓引擎讀出文字之前,我習慣先把它打印出來看看,確保讀取的是正確的內容。
with open('my_article.txt', 'r', encoding='utf-8') as file: # 請注意編碼設置for line in file:print(line.strip()) # 打印出該行文字engine.say(line) # 將該行文字加入待朗讀隊列
讀取完成后,別忘了最后調用?engine.runAndWait()?讓引擎開始讀:
engine.runAndWait()
我前面大部分演示都用了英文,現在來試試看中文的轉換效果如何。要讀中文,最好是將?voice?設置為中文的語音。語速方面,中文的速度感和英文不太一樣,我設置為每分鐘 120 個字試試看。
文字文件的內容,我找了一段中文文章的片段作為范例。這段文字可能來自一篇關于媒體轉型、如何應對社交媒體挑戰的討論。將這段中文貼入文字檔后,運行代碼:
chinese_voice_id = "你的中文語音ID,例如 com.apple.ttsbundle.zh-CN_Yu-Mai" # 替換成你系統上的中文語音ID,注意可能需要找zh-CN開頭的ID
engine.setProperty('voice', chinese_voice_id)
engine.setProperty('rate', 120) # 設置中文語速with open('chinese_article.txt', 'r', encoding='utf-8') as file:for line in file:print(line.strip())engine.say(line)engine.runAndWait()
聽聽看效果如何。你會發現這組語音設置是我們經常聽到的中文發音。除了我系統上的腔調,通常還會有其他中文發音選項(例如香港的粵語發音等),你可以根據需求自由選擇。
pyttsx3?支持的語音語言非常多樣,像是韓語、德語、日語等等。最好的實踐就是根據你要轉換的文字的語言,設置對應語言的語音,這樣說出來的效果才是最自然的。你可以通過?getProperty('voices')?來探索所有你系統上支持的語言和語音。
我在日本福岡生活和工作了一段時間,我想測試一下日語的 TTS 效果如何,順便分享一個我覺得很漂亮的景點——海中道海浜公園。特別是秋天,那里的花季非常美。這個公園很大,很適合親子或朋友一起去散步。
我在福岡市政府的官網找到一段介紹這個公園的日文文字,將它復制貼到一個文字文件中。然后將語音設置改為日語發音,語速可以適當調整。
japanese_voice_id = "你的日語語音ID,例如 com.apple.ttsbundle.ja_JP_Kyoko" # 替換成你系統上的日語語音ID
engine.setProperty('voice', japanese_voice_id)
engine.setProperty('rate', 150) # 設置日語語速with open('japanese_info.txt', 'r', encoding='utf-8') as file:for line in file:print(line.strip())engine.say(line)engine.runAndWait()
執行后,你就能聽到這段日文被用日語發音朗讀出來了。
除了直接播放語音,pyttsx3?還能將語音直接制作成文件。官方文檔中有介紹,這也很簡單,只要調用?save_to_file()?函數就行了。你可以指定輸出文件名和文字內容,它會自動幫你保存成像是 mp3 或 wav 格式的音頻文件。
output_file = "hello_ryan.mp3"
text_to_save = "Hello Ryan, this is a test."
engine.save_to_file(text_to_save, output_file)
engine.runAndWait() # 需要調用runAndWait來實際執行保存操作
print(f"語音已保存至 {output_file}")
這樣就能方便地將文字轉換成可重復使用的音頻文件了。
總結來說,pyttsx3?這個套件可以幫助我們快速地實現文字轉語音服務。它的應用場景很廣泛。例如,我們可以結合 Google API,讀取你的日程安排、Email 內容,讓電腦用讀的方式提醒你今天的行程或重要郵件。又或者,如果你有爬取體育數據、股市信息的自動化系統,可以整合?pyttsx3,讓系統具備語音提醒的功能,變成一個帶有語音服務的自動化工具。
如果你對這種整合多種功能、提升效率的自動化系統感興趣,其實有很多資源可以學習 Python 的自動化技巧。例如,學習如何自動化文件管理、Excel、Word 等文檔軟件操作。將重復性的工作自動化,真的可以大幅提高你的工作效率,節省很多寶貴的時間。你可以去搜索相關的 Python 自動化課程或教學資源。
希望這篇文章對你有所幫助和啟發!如果覺得有用,歡迎分享給需要的朋友。有任何問題或想法,也歡迎在評論區留言討論。