溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

怎么用Python代碼實現(xiàn)文字轉語音

發(fā)布時間:2022-02-15 09:12:37 來源:億速云 閱讀:437 作者:iii 欄目:開發(fā)技術

這篇文章主要講解了“怎么用Python代碼實現(xiàn)文字轉語音”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“怎么用Python代碼實現(xiàn)文字轉語音”吧!

前言:

開發(fā)環(huán)境:Windows

Python版本:3.x

外置模塊準備:pygame(可直接在cmd命令行中pip install pygame安裝)

漢字轉拼音

我使用的是將漢字轉為Unicode碼,然后通過查詢一個匹配文件(我使用的是unicode_py.txt)獲取該漢字的拼音,該文件中列有從4E00-9FA5標準漢字的Unicode編碼所對應的拼音,外加一個落單的3007編碼的“〇”。

文件如下:

怎么用Python代碼實現(xiàn)文字轉語音

在大寫拼音英文后的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)教學,所以沒有對多音字進行處理(所以默認使用第一個使用頻率最高的音)

拼音轉語音

這一步也比較簡單,我們根據拼音調用相對應的單個音的音頻文件即可。單個音的音頻文件可以自己錄或找人錄,渠道有很多哦。注意文件格式,最好是mp3或wav文件。

部分文件展示如下:

怎么用Python代碼實現(xiàn)文字轉語音

我們將其置入一個voice文件夾下。準備工作就做好了。

我們同樣將漢字轉語音封裝成一個make_voice函數(shù),參數(shù)為一個漢字字符串,然后調用chinese_to_pinyin函數(shù),返回值不重要,可為空,功能實現(xiàn)是調用音頻文件發(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)

教程文件的目錄結構:

test.py
unicode_py.txt
voice----A1.mp3
         A2.mp3
         A3.mp3
         ...

實現(xiàn)原理就是這樣,同時也可以視一些具體情況做一些拓展,例如將阿拉伯數(shù)字轉漢字讀法(即1234006.15讀作“一百二十三萬四千零六點一五”,這個實現(xiàn)不難),還有將多音字問題攻破也是很棒的。

當然只要想法夠豐富用pygame的音頻功能也能實現(xiàn)很多有趣的功能(如播放器制作或電子音樂簡單創(chuàng)作等)。

感謝各位的閱讀,以上就是“怎么用Python代碼實現(xiàn)文字轉語音”的內容了,經過本文的學習后,相信大家對怎么用Python代碼實現(xiàn)文字轉語音這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI