首頁 > 軟體

Python詳解文字轉語音的實現

2022-02-14 19:00:28

前言:

這是一篇簡單的Python文字(漢字)轉語音教學,當然對於其他語言工具在實現的方法上也是一樣的 。

漢字轉語音實現就分為兩步,第一步將漢字轉為拼音,第二步通過拼音呼叫相匹配的音訊檔。下面是具體的開發範例教學。

開發環境:Windows

Python版本:3.x

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

漢字轉拼音

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

檔案如下:

在大寫拼音英文後的1,2,3,4,5分別表示一,二,三,四和輕聲(注意到存在有多音字)

我們將其封裝成一個函數,引數為一個全是漢字的字串,返回是一個拼音字串。(即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"檔案放在同一目錄下,程式碼比較簡陋,因為主要給大家講實現教學,所以沒有對多音字進行處理(所以預設使用第一個使用頻率最高的音)

拼音轉語音

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

部分檔案展示如下:

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

我們同樣將漢字轉語音封裝成一個make_voice函數,引數為一個漢字字串,然後呼叫chinese_to_pinyin函數,返回值不重要,可為空,功能實現是呼叫音訊檔發音。

原始碼如下:

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
         ...

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

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

結尾:

以上就是本文的全部內容了,大家喜歡的記得點點贊!

到此這篇關於Python詳解文字轉語音的實現的文章就介紹到這了,更多相關Python 文字轉語音內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!


IT145.com E-mail:sddin#qq.com