Python中edge-tts實現(xiàn)便捷語音合成
edge-tts
是一個功能強大的 Python 庫,利用 Microsoft Azure 的云端文本到語音(TTS)服務,支持多種語言和聲音選項,能夠生成高質(zhì)量、自然聽感的語音輸出。它支持多種音頻格式,包括 MP3、WAV 和 OGG,適用于在本地或服務器上進行文本轉(zhuǎn)換為語音的應用程序,可以通過簡單的 API 調(diào)用進行部署和運行,非常適合語音助手、教育應用和音頻內(nèi)容制作等多種場景。
安裝與環(huán)境設置
首先,確保您已經(jīng)安裝了 edge-tts
庫:
pip install edge-tts
安裝完成后,您可以開始進行語音合成相關的功能開發(fā)。
文本轉(zhuǎn)語音
在這個章節(jié),我們將展示如何實現(xiàn)一個基礎功能:傳入文本并生成語音,保存為音頻文件。該功能使用固定的語音并將語音保存為 .mp3
文件。執(zhí)行后會生成 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("今天天氣不錯,適合出門玩耍。", "zh-CN-XiaoyiNeural", "weather.mp3")
generate_audio()
:這是主函數(shù),接收文本、語音和輸出文件名作為參數(shù)。- 異步函數(shù)
generate_audio_async()
實現(xiàn)語音合成。 asyncio.run()
用于運行異步代碼。
查找音色
在此章節(jié)中,我們將展示如何查找符合特定條件的語音,并將符合條件的語音列表打印給用戶,而不進行進一步的操作。此方法僅列出符合條件的語音,并打印出每個語音的名稱、性別和語言。
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"),默認不指定 """ # 異步獲取所有可用語音 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") # 運行異步示例 if __name__ == "__main__": asyncio.run(main())
print_available_voices()
:此函數(shù)是異步的,通過await
來調(diào)用VoicesManager.create()
,并獲取語音列表。然后通過voices.find()
根據(jù)語言和性別篩選語音。
更改語音參數(shù)
除了選擇不同的音色外,edge-tts
還允許用戶在合成時對語音的音量、語速、音調(diào)等參數(shù)進行調(diào)整。通過 Communicate
類中的 rate
、pitch
和 volume
參數(shù),可以動態(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)整(默認為 "+0%",表示標準語速) :param pitch: 音調(diào)調(diào)整(默認為 "+0Hz",表示標準音調(diào)) :param volume: 音量調(diào)整(默認為 "+0%",表示標準音量) """ # 選擇中文語音,這里使用的是小藝的 Neural 語音 voice = "zh-CN-XiaoyiNeural" # 使用 edge_tts.Communicate 創(chuàng)建語音對象,并傳入自定義參數(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( "歡迎體驗自定義語音合成!", "custom_param_audio.wav", rate="+50%", pitch="+10Hz", volume="-20%" )
rate
(語速):控制語速的調(diào)整。默認值為"+0%"
,表示標準語速。pitch
(音調(diào)):控制音調(diào)的調(diào)整,單位是 Hz。默認值為"+0Hz"
,表示標準音調(diào)。volume
(音量):控制音量的調(diào)整,單位是百分比。默認值為"+0%"
,表示標準音量。
生成音頻與字幕
在某些應用場景中,您可能需要同時生成音頻和字幕,并根據(jù)需要選擇同步或異步方式進行處理。這個章節(jié)展示了如何通過 edge-tts
實現(xiàn)同步和異步生成音頻和字幕文件。執(zhí)行后,會生成音頻文件和對應的字幕文件。
import asyncio import edge_tts def process_audio_and_subtitles_sync(text: str, voice: str, output_file: str, srt_file: str) -> None: """ 同步生成音頻并實時生成字幕 :param text: 需要合成的中文文本 :param voice: 使用的語音類型 :param output_file: 輸出的音頻文件名 :param srt_file: 輸出的字幕文件名 """ communicate = edge_tts.Communicate(text, voice) submaker = edge_tts.SubMaker() # 同步生成音頻并實時生成字幕 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: """ 異步生成音頻并實時生成字幕 :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 進行語音合成!", "zh-CN-XiaoyiNeural", "audio_sync.mp3", "audio_sync.srt") # 異步調(diào)用 asyncio.run(process_audio_and_subtitles_async("這是一段測試語音和字幕生成的示例。", "zh-CN-XiaoyiNeural", "audio_async.mp3", "audio_async.srt"))
process_audio_and_subtitles_sync
:同步生成音頻數(shù)據(jù)并實時生成字幕(SRT格式)。
- 使用
communicate.stream_sync()
獲取音頻數(shù)據(jù)流并處理每個“音頻”和“詞語邊界”。
process_audio_and_subtitles_async
:通過asyncio.run_in_executor
異步調(diào)用同步版本的process_audio_and_subtitles_sync
,確保異步函數(shù)可以高效地運行。
總結
通過本教程,您學習了如何使用 edge-tts
庫實現(xiàn)文本到語音的轉(zhuǎn)換。您通過不同的函數(shù)實現(xiàn)了以下功能:
- 基礎文本轉(zhuǎn)語音
- 動態(tài)選擇語音生成語音
- 生成音頻流和字幕
到此這篇關于Python中edge-tts實現(xiàn)便捷語音合成的文章就介紹到這了,更多相關Python edge-tts語音合成內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
- 關于Python調(diào)用百度語音合成SDK實現(xiàn)文字轉(zhuǎn)音頻的方法
- Python調(diào)用訊飛語音合成API接口來實現(xiàn)文字轉(zhuǎn)語音
- Python人工智能語音合成實現(xiàn)案例詳解
- Python語音合成的項目實戰(zhàn)(PyQt5+pyttsx3)
- 基于Python實現(xiàn)語音合成小工具
- 基于Python編寫一個語音合成系統(tǒng)
- Python實現(xiàn)語音合成功能詳解
- python3實現(xiàn)語音轉(zhuǎn)文字(語音識別)和文字轉(zhuǎn)語音(語音合成)
- Python實現(xiàn)語音識別和語音合成功能
- python騰訊語音合成實現(xiàn)過程解析
相關文章
Tortoise-orm信號實現(xiàn)及使用場景源碼詳解
這篇文章主要為大家介紹了Tortoise-orm信號實現(xiàn)及使用場景源碼詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-03-03Django 自定義404 500等錯誤頁面的實現(xiàn)
這篇文章主要介紹了Django 自定義404 500等錯誤頁面的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2020-03-03