edge-tts微軟文本轉語音庫,來聽聽這些語音是否很熟悉?

人工智能研究所 發佈 2023-04-06T04:58:10.265561+00:00

上期圖文教程,我們分享了Azure機器學習的文本轉語音的帳號申請與API申請的詳細步驟,也介紹了基於python3實現Azure機器學習文本轉語音功能的代碼實現過程,雖然我們可以使用Azure帳號免費提供一年的試用期,但是畢竟是要付費的,我們的API也無法長期使用,好在微軟發布了edge-tts庫,此庫繼承了Azure的文本轉語音功能,且是免費使用的,本期我們就介紹一下edge-tts的使用。

上期圖文教程,我們分享了Azure機器學習的文本轉語音的帳號申請與API申請的詳細步驟,也介紹了基於python3實現Azure機器學習文本轉語音功能的代碼實現過程,雖然我們可以使用Azure帳號免費提供一年的試用期,但是畢竟是要付費的,我們的API也無法長期使用,好在微軟發布了edge-tts庫,此庫繼承了Azure的文本轉語音功能,且是免費使用的,本期我們就介紹一下edge-TTS的使用。也許你聽到如下生成的聲音,你會發現很是熟悉。

Edge-TTS是一個Python庫,它使用微軟的Azure Cognitive Services來實現文本到語音轉換(TTS)。該庫提供了一個簡單的API,可以將文本轉換為語音,並且支持多種語言和聲音。要使用Edge-TTS庫,首先需要安裝上Edge-TTS庫,安裝直接使用pip 進行安裝即可。

pip install edge-tts

這裡本期的代碼基於python3.9,在自己的cmd窗口中,輸入以上安裝命令,便會自動安裝Edge-TTS

Collecting edge-tts Downloading edge_tts-6.1.3-py3-none-any.whl (26 kB)
Collecting aiohttp>=3.8.0 Downloading aiohttp-3.8.4-cp39-cp39-win_amd64.whl (323 kB)
     |████████████████████████████████| 323 kB 17 kB/s
Collecting aiosignal>=1.1.2 Downloading aiosignal-1.3.1-py3-none-any.whl (7.6 kB)
Collecting charset-normalizer<4.0,>=2.0 Downloading charset_normalizer-3.1.0-cp39-cp39-win_amd64.whl (97 kB)
     |████████████████████████████████| 97 kB 20 kB/s
Collecting yarl<2.0,>=1.0 Downloading yarl-1.8.2-cp39-cp39-win_amd64.whl (56 kB)
     |████████████████████████████████| 56 kB 20 kB/s
Collecting frozenlist>=1.1.1  Downloading frozenlist-1.3.3-cp39-cp39-win_amd64.whl (34 kB)
Collecting multidict<7.0,>=4.5 Downloading multidict-6.0.4-cp39-cp39-win_amd64.whl (28 kB)
Collecting attrs>=17.3.0 Downloading attrs-22.2.0-py3-none-any.whl (60 kB)
     |████████████████████████████████| 60 kB 20 kB/s
Collecting async-timeout<5.0,>=4.0.0a3  Using cached async_timeout-4.0.2-py3-none-any.whl (5.8 kB)
Collecting idna>=2.0  Using cached idna-3.4-py3-none-any.whl (61 kB)
Installing collected packages: frozenlist, aiosignal, charset-normalizer, multidict, idna, yarl, attrs, async-timeout, aiohttp, edge-tts
Successfully installed aiohttp-3.8.4 aiosignal-1.3.1 async-timeout-4.0.2 attrs-22.2.0 charset-normalizer-3.1.0 edge-tts-6.1.3 frozenlist-1.3.3 idna-3.4 multidict-6.0.4 yarl-1.8.2

安裝完成後,我們可以輸入edge-tts,若cmd窗口中輸出提示信息,說明已經安裝完成。

usage: edge-tts [-h] [-t TEXT] [-f FILE] [-v VOICE] [-l] [--rate RATE] [--volume VOLUME] [-O OVERLAPPING]
                [--write-media WRITE_MEDIA] [--write-subtitles WRITE_SUBTITLES] [--proxy PROXY]
edge-tts: error: one of the arguments -t/--text -f/--file -l/--list-voices is required

如果要直接在cmd命令行中使用Edge-TTS,我們只需要使用如下命令來運行即可

edge-tts --text "Hello, world!" --write-media hello.mp3

以上運行完成後,便會在本地生成一個hello.mp3的音頻文件,但是這裡是默認的語音,我們需要改變語音,來實現符合自己要求的語音,且默認的語音只支持英文。

我們可以直接在cmd窗口中輸入如下命令行來查看edge-tts支持的語音

edge-tts --list-voices
Name: af-ZA-AdriNeural Gender: Female
........
........
........
Name: zh-CN-XiaoxiaoNeural Gender: Female
Name: zh-CN-XiaoyiNeural Gender: Female
Name: zh-CN-YunjianNeural Gender: Male
Name: zh-CN-YunxiNeural Gender: Male
Name: zh-CN-YunxiaNeural Gender: Male
Name: zh-CN-YunyangNeural Gender: Male
Name: zh-CN-liaoning-XiaobeiNeural Gender: Female
Name: zh-CN-shaanxi-XiaoniNeural Gender: Female
Name: zh-HK-HiuGaaiNeural Gender: Female
Name: zh-HK-HiuMaanNeural Gender: Female
Name: zh-HK-WanLungNeural Gender: Male
Name: zh-TW-HsiaoChenNeural Gender: Female
Name: zh-TW-HsiaoYuNeural Gender: Female
Name: zh-TW-YunJheNeural Gender: Male
Name: zu-ZA-ThandoNeural Gender: Female
Name: zu-ZA-ThembaNeural Gender: Male

這裡會列印出來所有支持的語音,字母zh開頭的便是支持中文的語音,我們使用zh-CN-YunxiNeural,來聽聽zh-CN-YunxiNeural生成的語音,你不是聽過。這裡我們只需要添加--voice命令,來指定輸出的語音。

edge-tts --voice zh-CN-YunxiNeural --text "hello 大家好,這裡是人工智慧研究所" --write-media hello.mp3

命令行執行完成後,我們可以從cmd命令行中看到,不僅edge-tts可以生成語音,還特意生成了字母文件,我們可以把這些字幕輸入到視頻剪輯文件中,就可以自動添加字幕了。

WEBVTT
00:00:00.100 --> 00:00:00.700
hello
00:00:00.800 --> 00:00:01.075
大家
00:00:01.075 --> 00:00:01.387
好
00:00:01.712 --> 00:00:02.000
這裡
00:00:02.000 --> 00:00:02.237
是
00:00:02.263 --> 00:00:02.850
人工智慧
00:00:02.862 --> 00:00:03.350
研究所

當然edge-tts還支持調整語速與音量,我們只需要添加rate與volume指令

edge-tts --voice zh-CN-YunxiNeural --rate=-4% --text "hello 大家好,這裡是人工智慧研究所" --write-media hello1.mp3
edge-tts --voice zh-CN-YunxiNeural --volume=-4% --text "hello 大家好,這裡是人工智慧研究所" --write-media hello1.mp3

rate=-4% 意思是語速降低4%,volume=-4%意思是音量降低4%,當然若是加號,便是增加多少。

當然,以上是在CMD命令行中執行的指令,我們也可以使用python進行批量文本轉語音

import edge_tts
import asyncio
TEXT = ""
with open ('1.txt','rb') as f:
    data = f.read()
    TEXT = data.decode('utf-8')
print(TEXT)
voice = 'zh-CN-YunxiNeural'
output = '4.mp3'
rate = '-4%'
volume = '+0%'
async def my_function():
    tts = edge_tts.Communicate(text = TEXT,voice = voice,rate = rate,volume=volume)
    await tts.save(output)
if __name__ == '__main__':
    asyncio.run(my_function())

首先我們導入edge_tts與asyncio庫,並使用with open函數打開一個txt文件。txt便是我們要生成語音的文本文件。這裡我們一般是輸入的中文,因此,這裡我們使用rb讀取文件,然後通過decode函數轉換一下,避免類似如下的問題

'gbk' codec can't decode byte 0xae in position 4: illegal multibyte sequence

然後我們定義好我們輸入的5個參數

  • text = TEXT 需要轉換的文本
  • voice = voice 選擇的語音
  • rate = rate 語速
  • volume=volume 音量
  • output 輸出文件,一般是MP3文件

然後我們使用async進行異步請求,若是直接運行,會提示如下錯誤,因此,我們需要使用異步處理的方式。

RuntimeWarning: coroutine 'Communicate.save' was never awaited
  tts.save(output)
RuntimeWarning: Enable tracemalloc to get the object allocation traceback
https://github.com/rany2/edge-tts 項目文件地址

NLP領域最近越來越火,特別是ChatGPT的流行開始,NLP領域一舉打破了CV領域,讓更多的人看到了人工智慧的魅力,這裡介紹一下transformer模型,其NLP領域必然繞不開的一個模型。

關鍵字: