Python詳解文字轉(zhuǎn)語音的實現(xiàn)
前言:
這是一篇簡單的Python文字(漢字)轉(zhuǎn)語音教程,當然對于其他語言工具在實現(xiàn)的方法上也是一樣的 。
漢字轉(zhuǎn)語音實現(xiàn)就分為兩步,第一步將漢字轉(zhuǎn)為拼音,第二步通過拼音調(diào)用相匹配的音頻文件。下面是具體的開發(fā)實例教程。
開發(fā)環(huán)境:Windows
Python版本:3.x
外置模塊準備:pygame(可直接在cmd命令行中pip install pygame安裝)
漢字轉(zhuǎn)拼音
我使用的是將漢字轉(zhuǎn)為Unicode碼,然后通過查詢一個匹配文件(我使用的是unicode_py.txt)獲取該漢字的拼音,該文件中列有從4E00-9FA5標準漢字的Unicode編碼所對應的拼音,外加一個落單的3007編碼的“〇”。
文件如下:
在大寫拼音英文后的1,2,3,4,5分別表示一,二,三,四和輕聲(注意到存在有多音字)
我們將其封裝成一個函數(shù),參數(shù)為一個全是漢字的字符串,返回是一個拼音字符串。(即chinese_to_pinyin("秋水共長天一色") 返回的是"QIU1 SHUI3 GONG4 CHANG2 TIAN1 YI1 SE4 ")
源碼如下:
def chinese_to_pinyin(x): y = '' dic = {} with open("unicode_py.txt") as f: for i in f.readlines(): dic[i.split()[0]] = i.split()[1] for i in x: i = str(i.encode('unicode_escape'))[-5:-1].upper() try: y += dic[i] + ' ' except: y += 'XXXX ' #非法字符我們用XXXX代替 return y
說明:將該文件與"unicode_py.txt"文件放在同一目錄下,代碼比較簡陋,因為主要給大家講實現(xiàn)教學,所以沒有對多音字進行處理(所以默認使用第一個使用頻率最高的音)
拼音轉(zhuǎn)語音
這一步也比較簡單,我們根據(jù)拼音調(diào)用相對應的單個音的音頻文件即可。單個音的音頻文件可以自己錄或找人錄,渠道有很多哦。注意文件格式,最好是mp3或wav文件。
部分文件展示如下:
我們將其置入一個voice文件夾下。準備工作就做好了。
我們同樣將漢字轉(zhuǎn)語音封裝成一個make_voice函數(shù),參數(shù)為一個漢字字符串,然后調(diào)用chinese_to_pinyin函數(shù),返回值不重要,可為空,功能實現(xiàn)是調(diào)用音頻文件發(fā)音。
源碼如下:
import pygame def make_voice(x): pygame.mixer.init() voi = chinese_to_pinyin(x).split() for i in voi: if i == 'XXXX': #處理'XXXX'的音,可將其忽略 continue pygame.mixer.music.load("voice/" + i + ".mp3") pygame.mixer.music.play() while pygame.mixer.music.get_busy() == True: pass return None
我們展示一下這個教學版的最后完整的代碼圖(該文件名為"test.py"):
import pygame def chinese_to_pinyin(x): y = '' dic = {} with open("unicode_py.txt") as f: for i in f.readlines(): dic[i.split()[0]] = i.split()[1] for i in x: i = str(i.encode('unicode_escape'))[-5:-1].upper() try: y += dic[i] + ' ' except: y += 'XXXX ' return y def make_voice(x): pygame.mixer.init() voi = chinese_to_pinyin(x).split() for i in voi: if i == 'XXXX': continue pygame.mixer.music.load("voice/" + i + ".mp3") pygame.mixer.music.play() while pygame.mixer.music.get_busy() == True: pass return None while True: p = input("請輸入文字:") make_voice(p)
教程文件的目錄結(jié)構(gòu):
test.py unicode_py.txt voice----A1.mp3 A2.mp3 A3.mp3 ...
實現(xiàn)原理就是這樣,同時也可以視一些具體情況做一些拓展,例如將阿拉伯數(shù)字轉(zhuǎn)漢字讀法(即1234006.15讀作“一百二十三萬四千零六點一五”,這個實現(xiàn)不難),還有將多音字問題攻破也是很棒的。
當然只要想法夠豐富用pygame的音頻功能也能實現(xiàn)很多有趣的功能(如播放器制作或電子音樂簡單創(chuàng)作等)。
結(jié)尾:
以上就是本文的全部內(nèi)容了,大家喜歡的記得點點贊!
到此這篇關(guān)于Python詳解文字轉(zhuǎn)語音的實現(xiàn)的文章就介紹到這了,更多相關(guān)Python 文字轉(zhuǎn)語音內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
關(guān)于python的縮進規(guī)則的知識點詳解
在本篇文章里小編給大家整理了關(guān)于python的縮進規(guī)則的知識點詳解,有興趣的朋友們可以學習下。2020-06-06Python continue繼續(xù)循環(huán)用法總結(jié)
本篇文章給大家總結(jié)了關(guān)于Python continue繼續(xù)循環(huán)的相關(guān)知識點以及用法,有需要的朋友跟著學習下吧。2018-06-06最新python 字符串數(shù)組互轉(zhuǎn)問題
這篇文章主要介紹了最新python 字符串數(shù)組互轉(zhuǎn)問題,主要介紹了字符串轉(zhuǎn)list數(shù)組問題和list數(shù)組轉(zhuǎn)字符串問題,本文結(jié)合示例代碼給大家介紹的非常詳細,需要的朋友可以參考下2023-02-02