Python文字轉(zhuǎn)語(yǔ)音(調(diào)研&成品函數(shù))
由于項(xiàng)目需要, 我需要將文字轉(zhuǎn)換為語(yǔ)音, 那么第一步就要進(jìn)行調(diào)研
什么是語(yǔ)音合成技術(shù)?
語(yǔ)音合成(text to speech),簡(jiǎn)稱(chēng)TTS。是將文字轉(zhuǎn)化為語(yǔ)音的一種技術(shù),是讓計(jì)算機(jī)模擬人類(lèi)的嘴巴,通過(guò)不同的音色說(shuō)出想表達(dá)的內(nèi)容, 是人機(jī)對(duì)話的一部分。
TTS可以通過(guò)神經(jīng)網(wǎng)絡(luò)的設(shè)計(jì),把文字智能地轉(zhuǎn)化為自然語(yǔ)音流。極大的方便了視障患者的使用, 也提升了文本的可讀性。TTS應(yīng)用包括語(yǔ)音驅(qū)動(dòng)的硬件以及聲音敏感系統(tǒng),并常與聲音識(shí)別程序一起使用。
現(xiàn)在許多廠家都推出了自己的語(yǔ)音合成服務(wù)或API, 大家也可以去自行查看, 本文僅做了python環(huán)境下語(yǔ)音合成第三方庫(kù)的調(diào)研
如何用代碼實(shí)現(xiàn)?
如前文所述, 雖然市面上產(chǎn)品繁多, 但是作為一個(gè)開(kāi)發(fā)者, 我想要一款免費(fèi)的, 可代碼調(diào)試的工具, 經(jīng)過(guò)查找材料, 我找到了gTTs庫(kù)、pyttsx3庫(kù)、speech庫(kù)都能滿(mǎn)足我的需求, 來(lái)做個(gè)橫向?qū)Ρ? 可以讓大家少走彎路。
第三方庫(kù)名稱(chēng) | 需要聯(lián)網(wǎng) | 支持中英文 | 支持日語(yǔ) | 可調(diào)節(jié)語(yǔ)速 | 像人聲程度 |
---|---|---|---|---|---|
ggts | √ | √ | √ | X | 很像導(dǎo)航 |
pyttsx3 | X | √ | X | √ | 適合讀小說(shuō) |
speech | X | √ | X | X | 很像快一點(diǎn)的導(dǎo)航 |
gTTS庫(kù)
- gTTS庫(kù) (Google Text-to-Speech) : 用于與 Google Translate 的文本轉(zhuǎn)語(yǔ)音 API 進(jìn)行交互。將語(yǔ)音mp3數(shù)據(jù)寫(xiě)入文件
優(yōu)點(diǎn) : 支持包括中英日文在內(nèi)的多種語(yǔ)言, 有谷歌翻譯API的加持, 人聲蠻好聽(tīng)
缺點(diǎn) : 不支持語(yǔ)速調(diào)節(jié), 每次使用必須科學(xué)上網(wǎng), 不能單機(jī)使用
在語(yǔ)音播放功能, 我們選用了兩種方法,
第一種是playsound庫(kù)自動(dòng)播放音頻(不可調(diào)播放進(jìn)度)
第二種是os庫(kù)調(diào)用系統(tǒng)自帶播放器(可調(diào)節(jié)進(jìn)度)
- 請(qǐng)看playsound庫(kù)播放 & GTTS庫(kù)轉(zhuǎn)文字函數(shù)
# 函數(shù)功能: 用gtts庫(kù)閱讀文本,保存為.mp3文件后, 用系統(tǒng)內(nèi)置的瀏覽器閱讀出來(lái), 打開(kāi)mp3文件, 函數(shù)執(zhí)行結(jié)束(播放方式為os庫(kù))
def gtts_os_debug(text,mp3_filepath,language):#參數(shù)說(shuō)明:參數(shù)1是朗讀的文字,參數(shù)2是保存路徑,參數(shù)3是數(shù)字{0英文,1中文,2日語(yǔ)}
#大成功,可惜的是os調(diào)用自帶播放器, 實(shí)際上只執(zhí)行了"打開(kāi)mp3"的操作, 它并不會(huì)在音頻播報(bào)完后再進(jìn)行下一條語(yǔ)句
from gtts import gTTS
import os
# 已知zh-tw版本違和感較高,所以我們用zh-CN來(lái)進(jìn)行后續(xù)工作
if int(language) ==0 :
s = gTTS(text=text, lang='en', tld='com')
# s = gTTS(text=text, lang='en', tld='co.uk')#我比較喜歡美音,但是如果你喜歡英國(guó)口音可以嘗試這個(gè)
elif int(language) ==1 :
s = gTTS(text=text, lang='zh-CN')
elif int(language) ==2 :
s = gTTS(text=text, lang='ja')
try:
s.save(mp3_filepath)
except:
os.remove(mp3_filepath)
print(mp3_filepath,"文件已經(jīng)存在,但是沒(méi)有關(guān)系!已經(jīng)刪掉了")
s.save(mp3_filepath)
print(mp3_filepath,"保存成功")
os.system(mp3_filepath)#調(diào)用系統(tǒng)自帶的播放器播放MP3
gtts_os_debug(text="I'm gtts library,from google Artificial Intelligence & Google Translate.",mp3_filepath="gtts英文測(cè)試.mp3",language=0)
gtts_os_debug(text="我是gtts庫(kù), 你想聽(tīng)聽(tīng)我的聲音嗎",mp3_filepath="gtts中文測(cè)試.mp3",language=1)
gtts_os_debug(text="真実はいつもひとつ" ,mp3_filepath="gtts日語(yǔ)測(cè)試.mp3",language=2)
- 請(qǐng)看os庫(kù)播放 & GTTS庫(kù)轉(zhuǎn)文字函數(shù)
# 函數(shù)功能: 用gtts庫(kù)閱讀文本,保存為.mp3文件后, 用playsound庫(kù)閱讀出來(lái), 閱讀完畢, 函數(shù)執(zhí)行結(jié)束
def gtts_debug(text,mp3_filepath,language):#參數(shù)說(shuō)明:參數(shù)1是朗讀的文字,參數(shù)2是保存路徑,參數(shù)3是數(shù)字{0英文,1中文,2日語(yǔ)}
#大成功,已經(jīng)實(shí)現(xiàn)了定制化文字轉(zhuǎn)語(yǔ)音,但是播放的playsound需要改進(jìn)(playsound庫(kù)本身可能會(huì)出現(xiàn)bug...)
from gtts import gTTS
from playsound import playsound
import os
if int(language) ==0 :
s = gTTS(text=text, lang='en', tld='com')
# s = gTTS(text=text, lang='en', tld='co.uk')#我比較喜歡美音,但是如果你喜歡英國(guó)口音可以嘗試這個(gè)
elif int(language) ==1 :
s = gTTS(text=text, lang='zh-CN')
elif int(language) ==2 :
s = gTTS(text=text, lang='ja')
try:
s.save(mp3_filepath)
except:
os.remove(mp3_filepath)
print(mp3_filepath,"文件已經(jīng)存在,但是沒(méi)有關(guān)系!已經(jīng)刪掉了")
s.save(mp3_filepath)
print(mp3_filepath,"保存成功")
playsound(mp3_filepath)
gtts_debug(text="I'm gtts library,from google Artificial Intelligence & Google Translate.",mp3_filepath="gtts英文測(cè)試.mp3",language=0)
gtts_debug(text="我是gtts庫(kù), 你想聽(tīng)聽(tīng)我的聲音嗎",mp3_filepath="gtts中文測(cè)試.mp3",language=1)
gtts_debug(text="真実はいつもひとつ" ,mp3_filepath="gtts日語(yǔ)測(cè)試.mp3",language=2)
pyttsx3庫(kù)
- pyttsx3庫(kù) : 是Python中的文本到語(yǔ)音轉(zhuǎn)換庫(kù), 它可以脫機(jī)工作
優(yōu)點(diǎn) : 可以脫機(jī)工作, 支持將語(yǔ)音直接朗讀, 可調(diào)節(jié)音量和速度
缺點(diǎn) : 初始只有英語(yǔ)(女)和中文(女)的語(yǔ)音包, 其他語(yǔ)言的語(yǔ)音包需要另外下載
- 請(qǐng)看pyttsx3庫(kù)轉(zhuǎn)文字&自朗讀函數(shù)
def pyttsx3_debug(text,language,rate,volume,filename,sayit=0):
#參數(shù)說(shuō)明: 六個(gè)重要參數(shù),閱讀的文字,語(yǔ)言(0-英文/1-中文),語(yǔ)速,音量(0-1),保存的文件名(以.mp3收尾),是否發(fā)言(0否1是)
import pyttsx3
engine = pyttsx3.init() # 初始化語(yǔ)音引擎
engine.setProperty('rate', rate) # 設(shè)置語(yǔ)速
#速度調(diào)試結(jié)果:50戲劇化的慢,200正常,350用心聽(tīng)小說(shuō),500敷衍了事
engine.setProperty('volume', volume) # 設(shè)置音量
voices = engine.getProperty('voices') # 獲取當(dāng)前語(yǔ)音的詳細(xì)信息
if int(language)==0:
engine.setProperty('voice', voices[0].id) # 設(shè)置第一個(gè)語(yǔ)音合成器 #改變索引,改變聲音。0中文,1英文(只有這兩個(gè)選擇)
elif int(language)==1:
engine.setProperty('voice', voices[1].id)
if int(sayit)==1:
engine.say(text) # pyttsx3->將結(jié)果念出來(lái)
elif int(sayit)==0:
print("那我就不念了哈")
engine.save_to_file(text, filename) # 保存音頻文件
print(filename,"保存成功")
engine.runAndWait() # pyttsx3結(jié)束語(yǔ)句(必須加)
engine.stop() # pyttsx3結(jié)束語(yǔ)句(必須加)
pyttsx3_debug(text="我是pyttsx3, 初次見(jiàn)面, 給您拜個(gè)早年",language=0,rate=200,volume=0.9,filename="ptttsx3中文測(cè)試.mp3",sayit=1)
pyttsx3_debug(text="I'm fake Siri, your smart voice Manager",language=1,rate=200,volume=0.9,filename="ptttsx3英文測(cè)試.mp3",sayit=1)
speech庫(kù)
- speech : 基于Windows的語(yǔ)音合成模塊, 一行代碼即可實(shí)現(xiàn)朗讀
優(yōu)點(diǎn) : 依靠windows系統(tǒng), 安裝使用究極簡(jiǎn)單 , 超級(jí)方便。
適合在代碼調(diào)試過(guò)程中, 讓冰冷的AI語(yǔ)言來(lái)罵醒寫(xiě)bug的我QAQ
缺點(diǎn) : 只有系統(tǒng)語(yǔ)言(中文&英文), 不支持語(yǔ)速調(diào)節(jié)和音頻導(dǎo)出
- 請(qǐng)看speech轉(zhuǎn)文字函數(shù)
import speech
speech.say("甘霖娘,又出bug了")
speech.say("Don't ask me .I have no idea why bug exist again")
# 如你所見(jiàn), 代碼編譯究極簡(jiǎn)單, 而且單機(jī), 但是!每次使用都會(huì)呼出微軟語(yǔ)音助手...
恭喜你, 你已經(jīng)學(xué)會(huì)了Python文字轉(zhuǎn)語(yǔ)音的全部?jī)?nèi)容了文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-442839.html
可惜的是, 本博文沒(méi)有收錄諸如百度API/訊飛API等...商務(wù)的文字轉(zhuǎn)語(yǔ)音方式, 如果大家想看, 在評(píng)論區(qū)留言, 我會(huì)看到的文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-442839.html
到了這里,關(guān)于Python語(yǔ)音合成-第三方庫(kù)(gTTs/pyttsx3/speech)橫評(píng)(內(nèi)附使用代碼)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!