欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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)服務,支持多種語言和聲音選項,能夠生成高質(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 Celery定時任務的示例

    python Celery定時任務的示例

    這篇文章主要介紹了python Celery定時任務的示例,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-03-03
  • Python實現(xiàn)Markdown格式消除工具

    Python實現(xiàn)Markdown格式消除工具

    這篇文章主要為大家詳細介紹了如何使用?Python?和?PyQt5?庫來創(chuàng)建一個簡單易用的?Markdown?格式消除工具,并且支持實時預覽和文件保存功能,需要的可以了解下
    2025-02-02
  • Python對列表去重的多種方法(四種方法)

    Python對列表去重的多種方法(四種方法)

    開發(fā)中對數(shù)組、列表去重是非常常見的需求,對一個list中的id進行去重,有下面幾種方法,具體內(nèi)容詳情大家參考下本文
    2017-12-12
  • Tortoise-orm信號實現(xiàn)及使用場景源碼詳解

    Tortoise-orm信號實現(xiàn)及使用場景源碼詳解

    這篇文章主要為大家介紹了Tortoise-orm信號實現(xiàn)及使用場景源碼詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-03-03
  • Django 自定義404 500等錯誤頁面的實現(xiàn)

    Django 自定義404 500等錯誤頁面的實現(xiàn)

    這篇文章主要介紹了Django 自定義404 500等錯誤頁面的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-03-03
  • numpy.bincount用于復數(shù)權重的方法

    numpy.bincount用于復數(shù)權重的方法

    numpy.bincount是NumPy庫中的一個函數(shù),它用于計算整數(shù)數(shù)組中每個值的出現(xiàn)次數(shù),numpy.bincount函數(shù)在統(tǒng)計整數(shù)數(shù)組中每個值的出現(xiàn)次數(shù)或權重和時非常有用,本文給大家介紹numpy.bincount如何用于復數(shù)權重,感興趣的朋友跟隨小編一起看看吧
    2023-11-11
  • OpenCV?光流Optical?Flow示例

    OpenCV?光流Optical?Flow示例

    這篇文章主要為大家介紹了OpenCV?光流Optical?Flow示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-04-04
  • Pycharm如何添加源與添加庫

    Pycharm如何添加源與添加庫

    這篇文章主要介紹了Pycharm如何添加源與添加庫問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-09-09
  • 解決安裝Python的第三方庫pandas報錯問題

    解決安裝Python的第三方庫pandas報錯問題

    這篇文章主要介紹了解決安裝Python的第三方庫pandas報錯問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-08-08
  • python中的線程池threadpool

    python中的線程池threadpool

    這篇文章主要介紹了python中的線程池threadpool問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-11-11

最新評論