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()

是不是很有趣,點個贊再走吧~

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章