Python中edge-tts实现便捷语音合成

2025-05-06 17:50

本文主要是介绍Python中edge-tts实现便捷语音合成,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

《Python中edge-tts实现便捷语音合成》edge-tts是一个功能强大的Python库,支持多种语言和声音选项,本文主要介绍了Python中edge-tts实现便捷语音合成,具有一定的参考价...

edge-tts 是一个功能强大的 python 库,利用 Microsoft Azure 的云端文本到语音(TTS)服务,支持多种语言和声音选项,能够生成高质量、自然听感的语音输出。它支持多种音频格式,包括 MP3、WAV 和 OGG,适用于在本地或服务器上进行文本转换为语音的应用程序,可以通过简单的 API 调用进行部署和运行,非常适合语音助手、教育应用和音频内容制作等多种场景。

安装与环境设置

首先,确保您已经安装了 edge-tts 库:

pip install edge-tts

安装完成后,您可以开始进行语音合成相关的功能开发。

文本转语音

在这个章节,我们将展示如何实现一个基础功能:传入文本并生成语音,保存为音频文件。该功能使用固定的语音并将语音保存为 .mp3 文件。执行后会生成 weather.mp3 音频文件,包含了合成的中文语音。

import asyncio
import edge_tts

def generate_audio(text: str, voice: str, output_file: str) -> None:
    """
    传入文本、语音及输出文件名,生成语音并保存为音频文件
    :param text: 需要合成的中文文本
    :http://www.chinasem.cnparam voice: 使用的语音类型,如 'zh-CN-XiaoyiNeural'
    :param output_file: 输出的音频文件名
    """
    async def generate_audio_async() -> None:
        """异步生成语音"""
        communicate = edge_tts.Communicate(text, voice)
        await communicate.save(output_file)

    # 异步执行生成音频
    asyncio.run(generate_audio_async())

# 示例调用
generate_audio("今天天气不错,适合出门玩耍。", "zh-CN-XiaoyiNeural", "weather.mp3")
  • generate_audio():这是主函数,接收文本、语音和输出文件名作为参数。
  • 异步函数 generate_audio_async() 实现语音合成。
  • asyncio.run() 用于运行异步代码。

查找音色

在此章节中,我们将展示如何查找符合特定条件的语音,并将符合条件的语音列表打印给用户,而不进行进一步的操作。此方法仅列出符合条件的语音,并打印出每个语音的名称、性别和语言。

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: 可选参数,选择语音的性别("Male" 或 "Female"),默认不指定
    """
    # 异步获取所有可用语音
    voices = await VoicesManager.create()

    # 根据语言过滤语音
    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"符合条件的语音:China编程")
        for voice in filtered_voices:
            print(f"语音名称: {voice['Name']}, 性别: {voice['Gender']}, 语言: {voice['Language']}")
    else:
        print(f"没有找到符合条件的语音:语言={language}, 性别={gender}")

# 示例调用
async def main():
    await print_available_voices(language="zh", gender="Female")

# 运行异步示例
if __name__ == "__main__":
    asyncio.run(main())
  • print_available_voices():此函数是异步的,通过 await 来调用 VoicesManager.create(),并获取语音列表。然后通过 voices.find() 根据语言和性别筛选语音。www.chinasem.cn

更改语音参数

除了选择不同的音色外,edge-tts 还允许用户在合成时对语音的音量、语速、音调等参数进行调整。通过 Communicate 类中的 ratepitch 和 volume 参数,可以动态控制生成的语音效果。

import edge_tts

def generate_audio_with_custom_params(text: str, output_file: str, rate: str = "+0%", pChina编程itch: str = "+0Hz", volume: str = "+0%") -> None:
    """
    生成带有自定义语音参数的音频
    :param text: 需要合成的中文文本
    :param output_file: 输出的音频文件名
    :param rate: 语速调整(默认为 "+0%",表示标准语速)
    :param pitch: 音调调整(默认为 "+0Hz",表示标准音调)
    :param volume: 音量调整(默认为 "+0%",表示标准音量)
    """
    # 选择中文语音,这里使用的是小艺的 Neural 语音
    voice = "zh-CN-XiaoyiNeural"  
    
    # 使用 edge_tts.Communicate 创建语音对象,并传入自定义参数
    communicate = edge_tts.Communicate(text, voice, rate=rate, pitch=pitch, volume=volume)
    
    # 保存生成的音频文件
    communicate.save_sync(output_file)
    print(f"音频已生成,语速: {rate},音调: {pitch},音量: {volume}。")

# 示例调用
generate_audio_with_custom_params(
    "欢迎体验自定义语音合成!", 
    "custom_param_audio.wav", 
    rate="+50%", 
    pitch="+10Hz", 
    volume="-20%"
)
  • rate(语速):控制语速的调整。默认值为 "+0%",表示标准语速。
  • pitch(音调):控制音调的调整,单位是 Hz。默认值为 "+0Hz",表示标准音调。
  • volume(音量):控制音量的调整,单位是百分比。默认值为 "+0%",表示标准音量。

生成音频与字幕

在某些应用场景中,您可能需要同时生成音频和字幕,并根据需要选择同步或异步方式进行处理。这个章节展示了如何通过 edge-tts 实现同步和异步生成音频和字幕文件。执行后,会生成音频文件和对应的字幕文件。

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"])  # 写入音频数据
            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: 输出的字幕文件名
    """
    # 异步调用同步版本的逻辑
    loop = asyncio.get_event_loop()
    await loop.run_in_executor(None, process_audio_and_subtitles_sync, text, voice, output_file, srt_file)

# 示例调用
process_audio_and_subtitles_s编程ync("欢迎使用 Python 进行语音合成!", "zh-CN-XiaoyiNeural", "audio_sync.mp3", "audio_sync.srt")

# 异步调用
asyncio.run(process_audio_and_subtitles_async("这是一段测试语音和字幕生成的示例。", "zh-CN-XiaoyiNeural", "audio_async.mp3", "audio_async.srt"))
  • process_audio_and_subtitles_sync:同步生成音频数据并实时生成字幕(SRT格式)。
  • 使用 communicate.stream_sync() 获取音频数据流并处理每个“音频”和“词语边界”。
  • process_audio_and_subtitles_async:通过 asyncio.run_in_executor 异步调用同步版本的 process_audio_and_subtitles_sync,确保异步函数可以高效地运行。

总结

通过本教程,您学习了如何使用 edge-tts 库实现文本到语音的转换。您通过不同的函数实现了以下功能:

  • 基础文本转语音
  • 动态选择语音生成语音
  • 生成音频流和字幕

 到此这篇关于Python中edge-tts实现便捷语音合成的文章就介绍到这了,更多相关Python edge-tts语音合成内容请搜索编程China编程(www.chinasem.cn)以前的文章或继续浏览下面的相关文章希望大家以后多多支持China编程(www.chinasem.cn)!

这篇关于Python中edge-tts实现便捷语音合成的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1154502

相关文章

Java整合Protocol Buffers实现高效数据序列化实践

《Java整合ProtocolBuffers实现高效数据序列化实践》ProtocolBuffers是Google开发的一种语言中立、平台中立、可扩展的结构化数据序列化机制,类似于XML但更小、更快... 目录一、Protocol Buffers简介1.1 什么是Protocol Buffers1.2 Pro

Python脚本轻松实现检测麦克风功能

《Python脚本轻松实现检测麦克风功能》在进行音频处理或开发需要使用麦克风的应用程序时,确保麦克风功能正常是非常重要的,本文将介绍一个简单的Python脚本,能够帮助我们检测本地麦克风的功能,需要的... 目录轻松检测麦克风功能脚本介绍一、python环境准备二、代码解析三、使用方法四、知识扩展轻松检测麦

Python多线程应用中的卡死问题优化方案指南

《Python多线程应用中的卡死问题优化方案指南》在利用Python语言开发某查询软件时,遇到了点击搜索按钮后软件卡死的问题,本文将简单分析一下出现的原因以及对应的优化方案,希望对大家有所帮助... 目录问题描述优化方案1. 网络请求优化2. 多线程架构优化3. 全局异常处理4. 配置管理优化优化效果1.

Java实现本地缓存的四种方法实现与对比

《Java实现本地缓存的四种方法实现与对比》本地缓存的优点就是速度非常快,没有网络消耗,本地缓存比如caffine,guavacache这些都是比较常用的,下面我们来看看这四种缓存的具体实现吧... 目录1、HashMap2、Guava Cache3、Caffeine4、Encache本地缓存比如 caff

Java高效实现Word转PDF的完整指南

《Java高效实现Word转PDF的完整指南》这篇文章主要为大家详细介绍了如何用Spire.DocforJava库实现Word到PDF文档的快速转换,并解析其转换选项的灵活配置技巧,希望对大家有所帮助... 目录方法一:三步实现核心功能方法二:高级选项配置性能优化建议方法补充ASPose 实现方案Libre

Go中select多路复用的实现示例

《Go中select多路复用的实现示例》Go的select用于多通道通信,实现多路复用,支持随机选择、超时控制及非阻塞操作,建议合理使用以避免协程泄漏和死循环,感兴趣的可以了解一下... 目录一、什么是select基本语法:二、select 使用示例示例1:监听多个通道输入三、select的特性四、使用se

Java 中编码与解码的具体实现方法

《Java中编码与解码的具体实现方法》在Java中,字符编码与解码是处理数据的重要组成部分,正确的编码和解码可以确保字符数据在存储、传输、读取时不会出现乱码,本文将详细介绍Java中字符编码与解码的... 目录Java 中编码与解码的实现详解1. 什么是字符编码与解码?1.1 字符编码(Encoding)1

Python中高级文本模式匹配与查找技术指南

《Python中高级文本模式匹配与查找技术指南》文本处理是编程世界的永恒主题,而模式匹配则是文本处理的基石,本文将深度剖析PythonCookbook中的核心匹配技术,并结合实际工程案例展示其应用,希... 目录引言一、基础工具:字符串方法与序列匹配二、正则表达式:模式匹配的瑞士军刀2.1 re模块核心AP

Python Flask实现定时任务的不同方法详解

《PythonFlask实现定时任务的不同方法详解》在Flask中实现定时任务,最常用的方法是使用APScheduler库,本文将提供一个完整的解决方案,有需要的小伙伴可以跟随小编一起学习一下... 目录完js整实现方案代码解释1. 依赖安装2. 核心组件3. 任务类型4. 任务管理5. 持久化存储生产环境

Python使用python-pptx自动化操作和生成PPT

《Python使用python-pptx自动化操作和生成PPT》这篇文章主要为大家详细介绍了如何使用python-pptx库实现PPT自动化,并提供实用的代码示例和应用场景,感兴趣的小伙伴可以跟随小编... 目录使用python-pptx操作PPT文档安装python-pptx基础概念创建新的PPT文档查看