Python詳解文字轉(zhuǎn)語(yǔ)音的實(shí)現(xiàn)
前言:
這是一篇簡(jiǎn)單的Python文字(漢字)轉(zhuǎn)語(yǔ)音教程,當(dāng)然對(duì)于其他語(yǔ)言工具在實(shí)現(xiàn)的方法上也是一樣的 。
漢字轉(zhuǎn)語(yǔ)音實(shí)現(xiàn)就分為兩步,第一步將漢字轉(zhuǎn)為拼音,第二步通過(guò)拼音調(diào)用相匹配的音頻文件。下面是具體的開(kāi)發(fā)實(shí)例教程。
開(kāi)發(fā)環(huán)境:Windows
Python版本:3.x
外置模塊準(zhǔn)備:pygame(可直接在cmd命令行中pip install pygame安裝)
漢字轉(zhuǎn)拼音
我使用的是將漢字轉(zhuǎn)為Unicode碼,然后通過(guò)查詢一個(gè)匹配文件(我使用的是unicode_py.txt)獲取該漢字的拼音,該文件中列有從4E00-9FA5標(biāo)準(zhǔn)漢字的Unicode編碼所對(duì)應(yīng)的拼音,外加一個(gè)落單的3007編碼的“〇”。
文件如下:

在大寫(xiě)拼音英文后的1,2,3,4,5分別表示一,二,三,四和輕聲(注意到存在有多音字)
我們將其封裝成一個(gè)函數(shù),參數(shù)為一個(gè)全是漢字的字符串,返回是一個(gè)拼音字符串。(即chinese_to_pinyin("秋水共長(zhǎng)天一色") 返回的是"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
說(shuō)明:將該文件與"unicode_py.txt"文件放在同一目錄下,代碼比較簡(jiǎn)陋,因?yàn)橹饕o大家講實(shí)現(xiàn)教學(xué),所以沒(méi)有對(duì)多音字進(jìn)行處理(所以默認(rèn)使用第一個(gè)使用頻率最高的音)
拼音轉(zhuǎn)語(yǔ)音
這一步也比較簡(jiǎn)單,我們根據(jù)拼音調(diào)用相對(duì)應(yīng)的單個(gè)音的音頻文件即可。單個(gè)音的音頻文件可以自己錄或找人錄,渠道有很多哦。注意文件格式,最好是mp3或wav文件。
部分文件展示如下:

我們將其置入一個(gè)voice文件夾下。準(zhǔn)備工作就做好了。
我們同樣將漢字轉(zhuǎn)語(yǔ)音封裝成一個(gè)make_voice函數(shù),參數(shù)為一個(gè)漢字字符串,然后調(diào)用chinese_to_pinyin函數(shù),返回值不重要,可為空,功能實(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
我們展示一下這個(gè)教學(xué)版的最后完整的代碼圖(該文件名為"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("請(qǐng)輸入文字:")
make_voice(p)
教程文件的目錄結(jié)構(gòu):
test.py
unicode_py.txt
voice----A1.mp3
A2.mp3
A3.mp3
...
實(shí)現(xiàn)原理就是這樣,同時(shí)也可以視一些具體情況做一些拓展,例如將阿拉伯?dāng)?shù)字轉(zhuǎn)漢字讀法(即1234006.15讀作“一百二十三萬(wàn)四千零六點(diǎn)一五”,這個(gè)實(shí)現(xiàn)不難),還有將多音字問(wèn)題攻破也是很棒的。
當(dāng)然只要想法夠豐富用pygame的音頻功能也能實(shí)現(xiàn)很多有趣的功能(如播放器制作或電子音樂(lè)簡(jiǎn)單創(chuàng)作等)。
結(jié)尾:
以上就是本文的全部?jī)?nèi)容了,大家喜歡的記得點(diǎn)點(diǎn)贊!

到此這篇關(guān)于Python詳解文字轉(zhuǎn)語(yǔ)音的實(shí)現(xiàn)的文章就介紹到這了,更多相關(guān)Python 文字轉(zhuǎn)語(yǔ)音內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- 基于Python PaddleSpeech實(shí)現(xiàn)語(yǔ)音文字處理
- python教程十行代碼教你語(yǔ)音轉(zhuǎn)文字QQ微信聊天
- python3實(shí)現(xiàn)語(yǔ)音轉(zhuǎn)文字(語(yǔ)音識(shí)別)和文字轉(zhuǎn)語(yǔ)音(語(yǔ)音合成)
- python文字轉(zhuǎn)語(yǔ)音實(shí)現(xiàn)過(guò)程解析
- python 利用pyttsx3文字轉(zhuǎn)語(yǔ)音過(guò)程詳解
- 使用Python實(shí)現(xiàn)文字轉(zhuǎn)語(yǔ)音并生成wav文件的例子
- Python調(diào)用edge-tts實(shí)現(xiàn)在線文字轉(zhuǎn)語(yǔ)音效果
相關(guān)文章
關(guān)于python的縮進(jìn)規(guī)則的知識(shí)點(diǎn)詳解
在本篇文章里小編給大家整理了關(guān)于python的縮進(jìn)規(guī)則的知識(shí)點(diǎn)詳解,有興趣的朋友們可以學(xué)習(xí)下。2020-06-06
Python continue繼續(xù)循環(huán)用法總結(jié)
本篇文章給大家總結(jié)了關(guān)于Python continue繼續(xù)循環(huán)的相關(guān)知識(shí)點(diǎn)以及用法,有需要的朋友跟著學(xué)習(xí)下吧。2018-06-06
最新python 字符串?dāng)?shù)組互轉(zhuǎn)問(wèn)題
這篇文章主要介紹了最新python 字符串?dāng)?shù)組互轉(zhuǎn)問(wèn)題,主要介紹了字符串轉(zhuǎn)list數(shù)組問(wèn)題和list數(shù)組轉(zhuǎn)字符串問(wèn)題,本文結(jié)合示例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下2023-02-02
Python實(shí)現(xiàn)字符串中某個(gè)字母的替代功能
小編想實(shí)現(xiàn)這樣一個(gè)功能:將輸入字符串中的字母 “i” 變成字母 “p”。想著很簡(jiǎn)單,怎么實(shí)現(xiàn)呢?下面小編給大家?guī)?lái)了Python實(shí)現(xiàn)字符串中某個(gè)字母的替代功能,感興趣的朋友一起看看吧2019-10-10

