Python中edge-tts實(shí)現(xiàn)便捷語音合成
edge-tts
是一個(gè)功能強(qiáng)大的 Python 庫,利用 Microsoft Azure 的云端文本到語音(TTS)服務(wù),支持多種語言和聲音選項(xiàng),能夠生成高質(zhì)量、自然聽感的語音輸出。它支持多種音頻格式,包括 MP3、WAV 和 OGG,適用于在本地或服務(wù)器上進(jìn)行文本轉(zhuǎn)換為語音的應(yīng)用程序,可以通過簡(jiǎn)單的 API 調(diào)用進(jìn)行部署和運(yùn)行,非常適合語音助手、教育應(yīng)用和音頻內(nèi)容制作等多種場(chǎng)景。
安裝與環(huán)境設(shè)置
首先,確保您已經(jīng)安裝了 edge-tts
庫:
pip install edge-tts
安裝完成后,您可以開始進(jìn)行語音合成相關(guān)的功能開發(fā)。
文本轉(zhuǎn)語音
在這個(gè)章節(jié),我們將展示如何實(shí)現(xiàn)一個(gè)基礎(chǔ)功能:傳入文本并生成語音,保存為音頻文件。該功能使用固定的語音并將語音保存為 .mp3
文件。執(zhí)行后會(huì)生成 weather.mp3
音頻文件,包含了合成的中文語音。
import asyncio import edge_tts def generate_audio(text: str, voice: str, output_file: str) -> None: """ 傳入文本、語音及輸出文件名,生成語音并保存為音頻文件 :param text: 需要合成的中文文本 :param voice: 使用的語音類型,如 'zh-CN-XiaoyiNeural' :param output_file: 輸出的音頻文件名 """ async def generate_audio_async() -> None: """異步生成語音""" communicate = edge_tts.Communicate(text, voice) await communicate.save(output_file) # 異步執(zhí)行生成音頻 asyncio.run(generate_audio_async()) # 示例調(diào)用 generate_audio("今天天氣不錯(cuò),適合出門玩耍。", "zh-CN-XiaoyiNeural", "weather.mp3")
generate_audio()
:這是主函數(shù),接收文本、語音和輸出文件名作為參數(shù)。- 異步函數(shù)
generate_audio_async()
實(shí)現(xiàn)語音合成。 asyncio.run()
用于運(yùn)行異步代碼。
查找音色
在此章節(jié)中,我們將展示如何查找符合特定條件的語音,并將符合條件的語音列表打印給用戶,而不進(jìn)行進(jìn)一步的操作。此方法僅列出符合條件的語音,并打印出每個(gè)語音的名稱、性別和語言。
import asyncio import edge_tts from edge_tts import VoicesManager async def print_available_voices(language: str = "zh", gender: str = None) -> None: """ 異步查找并打印符合特定條件的語音列表。 :param language: 語音的語言,如 "zh-CN" 表示中文 :param gender: 可選參數(shù),選擇語音的性別("Male" 或 "Female"),默認(rèn)不指定 """ # 異步獲取所有可用語音 voices = await VoicesManager.create() # 根據(jù)語言過濾語音 filtered_voices = voices.find(Language=language) if gender: filtered_voices = [voice for voice in filtered_voices if voice["Gender"] == gender] # 打印符合條件的語音 if filtered_voices: print(f"符合條件的語音:") for voice in filtered_voices: print(f"語音名稱: {voice['Name']}, 性別: {voice['Gender']}, 語言: {voice['Language']}") else: print(f"沒有找到符合條件的語音:語言={language}, 性別={gender}") # 示例調(diào)用 async def main(): await print_available_voices(language="zh", gender="Female") # 運(yùn)行異步示例 if __name__ == "__main__": asyncio.run(main())
print_available_voices()
:此函數(shù)是異步的,通過await
來調(diào)用VoicesManager.create()
,并獲取語音列表。然后通過voices.find()
根據(jù)語言和性別篩選語音。
更改語音參數(shù)
除了選擇不同的音色外,edge-tts
還允許用戶在合成時(shí)對(duì)語音的音量、語速、音調(diào)等參數(shù)進(jìn)行調(diào)整。通過 Communicate
類中的 rate
、pitch
和 volume
參數(shù),可以動(dòng)態(tài)控制生成的語音效果。
import edge_tts def generate_audio_with_custom_params(text: str, output_file: str, rate: str = "+0%", pitch: str = "+0Hz", volume: str = "+0%") -> None: """ 生成帶有自定義語音參數(shù)的音頻 :param text: 需要合成的中文文本 :param output_file: 輸出的音頻文件名 :param rate: 語速調(diào)整(默認(rèn)為 "+0%",表示標(biāo)準(zhǔn)語速) :param pitch: 音調(diào)調(diào)整(默認(rèn)為 "+0Hz",表示標(biāo)準(zhǔn)音調(diào)) :param volume: 音量調(diào)整(默認(rèn)為 "+0%",表示標(biāo)準(zhǔn)音量) """ # 選擇中文語音,這里使用的是小藝的 Neural 語音 voice = "zh-CN-XiaoyiNeural" # 使用 edge_tts.Communicate 創(chuàng)建語音對(duì)象,并傳入自定義參數(shù) communicate = edge_tts.Communicate(text, voice, rate=rate, pitch=pitch, volume=volume) # 保存生成的音頻文件 communicate.save_sync(output_file) print(f"音頻已生成,語速: {rate},音調(diào): {pitch},音量: {volume}。") # 示例調(diào)用 generate_audio_with_custom_params( "歡迎體驗(yàn)自定義語音合成!", "custom_param_audio.wav", rate="+50%", pitch="+10Hz", volume="-20%" )
rate
(語速):控制語速的調(diào)整。默認(rèn)值為"+0%"
,表示標(biāo)準(zhǔn)語速。pitch
(音調(diào)):控制音調(diào)的調(diào)整,單位是 Hz。默認(rèn)值為"+0Hz"
,表示標(biāo)準(zhǔn)音調(diào)。volume
(音量):控制音量的調(diào)整,單位是百分比。默認(rèn)值為"+0%"
,表示標(biāo)準(zhǔn)音量。
生成音頻與字幕
在某些應(yīng)用場(chǎng)景中,您可能需要同時(shí)生成音頻和字幕,并根據(jù)需要選擇同步或異步方式進(jìn)行處理。這個(gè)章節(jié)展示了如何通過 edge-tts
實(shí)現(xiàn)同步和異步生成音頻和字幕文件。執(zhí)行后,會(huì)生成音頻文件和對(duì)應(yīng)的字幕文件。
import asyncio import edge_tts def process_audio_and_subtitles_sync(text: str, voice: str, output_file: str, srt_file: str) -> None: """ 同步生成音頻并實(shí)時(shí)生成字幕 :param text: 需要合成的中文文本 :param voice: 使用的語音類型 :param output_file: 輸出的音頻文件名 :param srt_file: 輸出的字幕文件名 """ communicate = edge_tts.Communicate(text, voice) submaker = edge_tts.SubMaker() # 同步生成音頻并實(shí)時(shí)生成字幕 with open(output_file, "wb") as audio_file: for chunk in communicate.stream_sync(): if chunk["type"] == "audio": audio_file.write(chunk["data"]) # 寫入音頻數(shù)據(jù) elif chunk["type"] == "WordBoundary": submaker.feed(chunk) # 處理字幕 # 保存字幕文件 with open(srt_file, "w", encoding="utf-8") as subtitle_file: subtitle_file.write(submaker.get_srt()) async def process_audio_and_subtitles_async(text: str, voice: str, output_file: str, srt_file: str) -> None: """ 異步生成音頻并實(shí)時(shí)生成字幕 :param text: 需要合成的中文文本 :param voice: 使用的語音類型 :param output_file: 輸出的音頻文件名 :param srt_file: 輸出的字幕文件名 """ # 異步調(diào)用同步版本的邏輯 loop = asyncio.get_event_loop() await loop.run_in_executor(None, process_audio_and_subtitles_sync, text, voice, output_file, srt_file) # 示例調(diào)用 process_audio_and_subtitles_sync("歡迎使用 Python 進(jìn)行語音合成!", "zh-CN-XiaoyiNeural", "audio_sync.mp3", "audio_sync.srt") # 異步調(diào)用 asyncio.run(process_audio_and_subtitles_async("這是一段測(cè)試語音和字幕生成的示例。", "zh-CN-XiaoyiNeural", "audio_async.mp3", "audio_async.srt"))
process_audio_and_subtitles_sync
:同步生成音頻數(shù)據(jù)并實(shí)時(shí)生成字幕(SRT格式)。
- 使用
communicate.stream_sync()
獲取音頻數(shù)據(jù)流并處理每個(gè)“音頻”和“詞語邊界”。
process_audio_and_subtitles_async
:通過asyncio.run_in_executor
異步調(diào)用同步版本的process_audio_and_subtitles_sync
,確保異步函數(shù)可以高效地運(yùn)行。
總結(jié)
通過本教程,您學(xué)習(xí)了如何使用 edge-tts
庫實(shí)現(xiàn)文本到語音的轉(zhuǎn)換。您通過不同的函數(shù)實(shí)現(xiàn)了以下功能:
- 基礎(chǔ)文本轉(zhuǎn)語音
- 動(dòng)態(tài)選擇語音生成語音
- 生成音頻流和字幕
到此這篇關(guān)于Python中edge-tts實(shí)現(xiàn)便捷語音合成的文章就介紹到這了,更多相關(guān)Python edge-tts語音合成內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- 關(guān)于Python調(diào)用百度語音合成SDK實(shí)現(xiàn)文字轉(zhuǎn)音頻的方法
- Python調(diào)用訊飛語音合成API接口來實(shí)現(xiàn)文字轉(zhuǎn)語音
- Python人工智能語音合成實(shí)現(xiàn)案例詳解
- Python語音合成的項(xiàng)目實(shí)戰(zhàn)(PyQt5+pyttsx3)
- 基于Python實(shí)現(xiàn)語音合成小工具
- 基于Python編寫一個(gè)語音合成系統(tǒng)
- Python實(shí)現(xiàn)語音合成功能詳解
- python3實(shí)現(xiàn)語音轉(zhuǎn)文字(語音識(shí)別)和文字轉(zhuǎn)語音(語音合成)
- Python實(shí)現(xiàn)語音識(shí)別和語音合成功能
- python騰訊語音合成實(shí)現(xiàn)過程解析
相關(guān)文章
Python實(shí)現(xiàn)Markdown格式消除工具
這篇文章主要為大家詳細(xì)介紹了如何使用?Python?和?PyQt5?庫來創(chuàng)建一個(gè)簡(jiǎn)單易用的?Markdown?格式消除工具,并且支持實(shí)時(shí)預(yù)覽和文件保存功能,需要的可以了解下2025-02-02Tortoise-orm信號(hào)實(shí)現(xiàn)及使用場(chǎng)景源碼詳解
這篇文章主要為大家介紹了Tortoise-orm信號(hào)實(shí)現(xiàn)及使用場(chǎng)景源碼詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-03-03Django 自定義404 500等錯(cuò)誤頁面的實(shí)現(xiàn)
這篇文章主要介紹了Django 自定義404 500等錯(cuò)誤頁面的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-03-03numpy.bincount用于復(fù)數(shù)權(quán)重的方法
numpy.bincount是NumPy庫中的一個(gè)函數(shù),它用于計(jì)算整數(shù)數(shù)組中每個(gè)值的出現(xiàn)次數(shù),numpy.bincount函數(shù)在統(tǒng)計(jì)整數(shù)數(shù)組中每個(gè)值的出現(xiàn)次數(shù)或權(quán)重和時(shí)非常有用,本文給大家介紹numpy.bincount如何用于復(fù)數(shù)權(quán)重,感興趣的朋友跟隨小編一起看看吧2023-11-11解決安裝Python的第三方庫pandas報(bào)錯(cuò)問題
這篇文章主要介紹了解決安裝Python的第三方庫pandas報(bào)錯(cuò)問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-08-08