最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python中edge-tts實現(xiàn)便捷語音合成

 更新時間:2025年05月06日 11:31:28   作者:T0uken  
edge-tts是一個功能強大的Python庫,支持多種語言和聲音選項,本文主要介紹了Python中edge-tts實現(xiàn)便捷語音合成,具有一定的參考價值,感興趣的可以了解一下

edge-tts 是一個功能強大的 Python 庫,利用 Microsoft Azure 的云端文本到語音(TTS)服務(wù),支持多種語言和聲音選項,能夠生成高質(zhì)量、自然聽感的語音輸出。它支持多種音頻格式,包括 MP3、WAV 和 OGG,適用于在本地或服務(wù)器上進行文本轉(zhuǎn)換為語音的應(yīng)用程序,可以通過簡單的 API 調(diào)用進行部署和運行,非常適合語音助手、教育應(yīng)用和音頻內(nèi)容制作等多種場景。

安裝與環(huán)境設(shè)置

首先,確保您已經(jīng)安裝了 edge-tts 庫:

pip install edge-tts

安裝完成后,您可以開始進行語音合成相關(guān)的功能開發(fā)。

文本轉(zhuǎn)語音

在這個章節(jié),我們將展示如何實現(xiàn)一個基礎(chǔ)功能:傳入文本并生成語音,保存為音頻文件。該功能使用固定的語音并將語音保存為 .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"),默認(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")

# 運行異步示例
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 類中的 ratepitch 和 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)整(默認(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)建語音對象,并傳入自定義參數(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)整。默認(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)用場景中,您可能需要同時生成音頻和字幕,并根據(jù)需要選擇同步或異步方式進行處理。這個章節(jié)展示了如何通過 edge-tts 實現(xiàn)同步和異步生成音頻和字幕文件。執(zhí)行后,會生成音頻文件和對應(yīng)的字幕文件。

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ù)可以高效地運行。

總結(jié)

通過本教程,您學(xué)習(xí)了如何使用 edge-tts 庫實現(xiàn)文本到語音的轉(zhuǎn)換。您通過不同的函數(shù)實現(xiàn)了以下功能:

  • 基礎(chǔ)文本轉(zhuǎn)語音
  • 動態(tài)選擇語音生成語音
  • 生成音頻流和字幕

 到此這篇關(guān)于Python中edge-tts實現(xiàn)便捷語音合成的文章就介紹到這了,更多相關(guān)Python edge-tts語音合成內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • pandas中Series的代碼實例解析

    pandas中Series的代碼實例解析

    這篇文章主要介紹了pandas中Series的代碼實例解析,Series序列,是一種一維的結(jié)構(gòu),類似于一維列表和ndarray中的一維數(shù)組,但是功能比他們要更為強大,Series由兩部分組成:索引index和數(shù)值values,需要的朋友可以參考下
    2023-07-07
  • Python使用cx_Oracle庫連接Oracle數(shù)據(jù)庫指南

    Python使用cx_Oracle庫連接Oracle數(shù)據(jù)庫指南

    這篇文章主要為大家介紹了Python使用cx_Oracle庫連接Oracle數(shù)據(jù)庫指南,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-12-12
  • python中dump與dumps實現(xiàn)序列化

    python中dump與dumps實現(xiàn)序列化

    這篇文章就來介紹python中dump與dumps實現(xiàn)序列化,文章將圍繞dump與dumps實現(xiàn)序列化展開內(nèi)容且簡精,需要的朋友可以參考一下,希望對你有所幫助
    2021-10-10
  • python使用DebugInfo模塊打印一個條形堆積圖

    python使用DebugInfo模塊打印一個條形堆積圖

    今天介紹一個不使用 matplot,通過 DebugInfo模塊打印條形堆積圖的方法,本文給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友參考下吧
    2023-08-08
  • python 實現(xiàn)二維列表轉(zhuǎn)置

    python 實現(xiàn)二維列表轉(zhuǎn)置

    今天小編就為大家分享一篇python 實現(xiàn)二維列表轉(zhuǎn)置,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-12-12
  • Python異步多進程調(diào)度系統(tǒng)的完整實現(xiàn)與實戰(zhàn)指南

    Python異步多進程調(diào)度系統(tǒng)的完整實現(xiàn)與實戰(zhàn)指南

    本文將基于Python內(nèi)置的multiprocessing模塊,展示一個生產(chǎn)級別的多進程調(diào)度系統(tǒng)實現(xiàn),涵蓋進程池管理、進程間通信、實時監(jiān)控和結(jié)果持久化等核心功能,有需要的小伙伴可以了解下
    2025-11-11
  • 詳解Python中三元運算符的使用

    詳解Python中三元運算符的使用

    條件表達式(有時稱為“三元運算符”)在所有Python操作中優(yōu)先級最低,三元運算符根據(jù)條件為真或假來計算某些東西,下面就跟隨小編一起來看看Python中三元運算符的具體使用吧
    2023-09-09
  • 探索Python?Furl高性能URL構(gòu)建解析和操作功能實例

    探索Python?Furl高性能URL構(gòu)建解析和操作功能實例

    本文將提供關(guān)于Python?Furl的全面指南,包括安裝和配置、基本概念、URL解析、URL構(gòu)建、查詢參數(shù)操作、片段處理、實際應(yīng)用場景以及豐富的示例代碼
    2024-01-01
  • python 安裝教程之Pycharm安裝及配置字體主題,換行,自動更新

    python 安裝教程之Pycharm安裝及配置字體主題,換行,自動更新

    這篇文章主要介紹了python 安裝教程之Pycharm安裝及配置字體主題,換行,自動更新,本文通過圖文并茂的形式給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-03-03
  • Pandas如何通過np.array函數(shù)或tolist方法去掉數(shù)據(jù)中的index

    Pandas如何通過np.array函數(shù)或tolist方法去掉數(shù)據(jù)中的index

    這篇文章主要介紹了Pandas如何通過np.array函數(shù)或tolist方法去掉數(shù)據(jù)中的index問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-02-02

最新評論

枣强县| 玉门市| 汉源县| 安新县| 碌曲县| 麟游县| 宿迁市| 加查县| 洞头县| 石台县| 琼结县| 四川省| 延庆县| 荔浦县| 萍乡市| 云梦县| 南开区| 大同县| 宜阳县| 香格里拉县| 武宁县| 潜山县| 历史| 旬邑县| 洪湖市| 乌兰浩特市| 新野县| 绥棱县| 赤城县| 济南市| 通化县| 内江市| 库伦旗| 比如县| 宣恩县| 裕民县| 特克斯县| 高雄县| 河南省| 绥德县| 长乐市|