Python pyttsx3|文本朗读(各种语言)
Python文字轉語音
程序員,在其他人眼中往往都是高冷的存在,在他們的眼中能用代碼解決的問題絕對不考慮其他的方法,本文讓我們用Python來提升一下高冷的檔次,讓我們用代碼來“說話”。
安裝pyttsx3
安裝
下面就讓我們來看一下Python是怎樣開口“說話“的。
我們先安裝需要的庫pyttsx3:
pip install pyttsx3語音引擎工廠
類似于設計模式中的“工廠模式”,pyttsx3通過初始化來獲取語音引擎。當我們第一次調用init操作的時候,會返回一個pyttsx3的engine對象,再次調用的時候,如果存在engine對象實例,就會使用現有的,否則再重新創建一個。
pyttsx.init([driverName : string, debug : bool]) → pyttsx.Engine從方法聲明上來看,第一個參數指定的是語音驅動的名稱,這個在底層適合操作系統密切相關的。如下:
??????1.drivename:由pyttsx3.driver模塊根據操作系統類型來調用,默認使用當前操作系統可以使用的最好的驅動。
??????????? sapi5 - SAPI5 on Windows
??????????? nsss - NSSpeechSynthesizer on Mac OS X
??????????? espeak - eSpeak on every other platform
??????2.debug:?這第二個參數是指定要不要以調試狀態輸出,建議開發階段設置為True。
函數說明
本節我們再來了解一下pyttsx3.engine.Engine中所對應的函數說明。
- connect
參數:
??topic(string):要描述的事件名稱;
? cb(callable):回調函數。
返回值:
? dict
函數說明:
? 在給定的topic上添加回調通知
-?disconnect
參數:
? token(dict):回調失聯的返回標記?
返回值:
? Void
函數說明:
??結束連接
-?endLoop
函數說明:
? 簡單來說就是結束事件循環
-?getProperty
參數:
? name(string):rate: 每分鐘字數的語音速率,默認為每分鐘200個。
???name(string):voice: 語音的字符串標識符。
? ?name(string):voices: pyttsx3.voice.Voice描述符對象列表。
? ?name(string):volume:音量的大小。
返回值:
? Object
函數說明:
? 獲取當前引擎實例的屬性值。
- setProperty
參數:
? name(string):rate: 每分鐘字數的語音速率,默認為每分鐘200個。
???name(string):voice: 語音的字符串標識符。
? ?name(string):volume:音量的大小。
? value(int):rate: 設置每分鐘讀的字數。
? value:voice:設置發音,后文中會再講到。
? valu(float):volume:設置音量大小,0.0-1.0之間;默認1.0。
返回值:
? Object
函數說明:
? 獲取當前引擎實例的屬性值。
- say
參數:
??text(unicode):要進行朗讀的文本數據。
? name(strin):關聯發音人(一般用不到)
函數說明:
? 預設要朗讀的文本數據
- runAndWait
函數說明:
? ?當事件隊列中事件全部清空的時候返回。
- startLoop
參數:
? ?[useDriverLoop(bool)]:是否啟用驅動循環。
函數說明:
? ?開啟事件隊列
- stop
函數說明:
? ?停止當前講話并清除命令隊列。
簡單的中文發音
先來讓我們學習一下最簡單的“說話”方法,我們不需要進行任何的設置,只要傳入想要朗讀的文本就可以了。
# 語音播報模塊 import pyttsx3 # 模塊初始化 engine = pyttsx3.init() print('準備開始語音播報...') engine.say('我高冷,我并不想說話~') # 等待語音播報完畢 engine.runAndWait()設置參數的發音方式
在進行設置參數的發音方式的時候,我們需要注意一點,在該模塊的內置聲音選擇函數執行的時候將并不能匹配中文發音,所以我們用英文來進行一下默認參數的嘗試。
# 語音播報模塊 import pyttsx3 ? # 模塊初始化 engine = pyttsx3.init() print('準備開始語音播報...') ? # 設置發音速率,默認值為200 rate = engine.getProperty('rate') engine.setProperty('rate', rate - 50) # 設置發音大小,范圍為0.0-1.0 volume = engine.getProperty('volume') engine.setProperty('volume', 0.6) # 設置默認的聲音:voices[0].id代表男生,voices[1].id代表女生 voices = engine.getProperty('voices') engine.setProperty('voice', voices[1].id) # 添加朗讀文本 engine.say('Not everyone can become a great artist.') ? # 等待語音播報完畢 engine.runAndWait()有趣的中文方言發音
雖然在內置的發音方式中我們不能更換音色,但是經過一番查找后我發現,我們還可以去調用其他的語音播報API,這樣就完美的解決了更改發音的問題,并且還能支持很多方言,來用我們最開始聽到的語音播報來舉個例子,代碼如下:
# 語音播報模塊 import pyttsx3 ? msg = '''今天我,寒夜里看雪飄過 ? 懷著冷卻了的心窩漂遠方 ? 風雨里追趕,霧里分不清影蹤 ? 天空海闊你與我 ? 可會變(誰沒在變) ? 多少次,迎著冷眼與嘲笑 ? 從沒有放棄過心中的理想 ? 一剎那恍惚, 若有所失的感覺 ? 不知不覺已變淡 ? 心里愛(誰明白我) ? 原諒我這一生不羈放縱愛自由 ? 也會怕有一天會跌倒 ? 背棄了理想 ,誰人都可以 ? 哪會怕有一天只你共我 ''' # 模塊初始化 engine = pyttsx3.init() volume = engine.getProperty('volume') ? # 標準的粵語發音 voices = engine.setProperty('voice', "com.apple.speech.synthesis.voice.sin-ji") ? # 普通話發音 # voices = engine.setProperty( # 'voice', "com.apple.speech.synthesis.voice.ting-ting.premium") ? # 臺灣甜美女生普通話發音 # voices = engine.setProperty( # 'voice', "com.apple.speech.synthesis.voice.mei-jia") print('準備開始語音播報...') # 輸入語音播報詞語 engine.setProperty('volume', 0.7) engine.say(msg) ? engine.runAndWait() engine.stop()是不是很有趣,點個贊再走吧~
總結
以上是生活随笔為你收集整理的Python pyttsx3|文本朗读(各种语言)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 向SVN提交项目时显示提交成功却没有上传
- 下一篇: 多WAN口宽带路由器到底几个口才算合理(