【Python】edge-tts :便捷语音合成

守听  论坛元老 | 2025-1-13 02:20:43 | 显示全部楼层 | 阅读模式
打印 上一主题 下一主题

主题 1038|帖子 1038|积分 3114

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

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

起首,确保您已经安装了 edge-tts 库:
  1. pip install edge-tts
复制代码
安装完成后,您可以开始进行语音合成相关的功能开辟。
文本转语音

在这个章节,我们将展示如何实现一个底子功能:传入文本并生成语音,生存为音频文件。该功能使用固定的语音并将语音生存为 .mp3 文件。执行后会生成 weather.mp3 音频文件,包含了合成的中文语音。
  1. import asyncio
  2. import edge_tts
  3. def generate_audio(text: str, voice: str, output_file: str) -> None:
  4.     """
  5.     传入文本、语音及输出文件名,生成语音并保存为音频文件
  6.     :param text: 需要合成的中文文本
  7.     :param voice: 使用的语音类型,如 'zh-CN-XiaoyiNeural'
  8.     :param output_file: 输出的音频文件名
  9.     """
  10.     async def generate_audio_async() -> None:
  11.         """异步生成语音"""
  12.         communicate = edge_tts.Communicate(text, voice)
  13.         await communicate.save(output_file)
  14.     # 异步执行生成音频
  15.     asyncio.run(generate_audio_async())
  16. # 示例调用
  17. generate_audio("今天天气不错,适合出门玩耍。", "zh-CN-XiaoyiNeural", "weather.mp3")
复制代码


  • generate_audio():这是主函数,吸收文本、语音和输出文件名作为参数。
  • 异步函数 generate_audio_async() 实现语音合成。
  • asyncio.run() 用于运行异步代码。
查找音色

在此章节中,我们将展示如何查找符合特定条件的语音,并将符合条件的语音列表打印给用户,而不进行进一步的操作。此方法仅列出符合条件的语音,并打印出每个语音的名称、性别和语言。
  1. import asyncio
  2. import edge_tts
  3. from edge_tts import VoicesManager
  4. async def print_available_voices(language: str = "zh", gender: str = None) -> None:
  5.     """
  6.     异步查找并打印符合特定条件的语音列表。
  7.     :param language: 语音的语言,如 "zh-CN" 表示中文
  8.     :param gender: 可选参数,选择语音的性别("Male" 或 "Female"),默认不指定
  9.     """
  10.     # 异步获取所有可用语音
  11.     voices = await VoicesManager.create()
  12.     # 根据语言过滤语音
  13.     filtered_voices = voices.find(Language=language)
  14.     if gender:
  15.         filtered_voices = [voice for voice in filtered_voices if voice["Gender"] == gender]
  16.    
  17.     # 打印符合条件的语音
  18.     if filtered_voices:
  19.         print(f"符合条件的语音:")
  20.         for voice in filtered_voices:
  21.             print(f"语音名称: {voice['Name']}, 性别: {voice['Gender']}, 语言: {voice['Language']}")
  22.     else:
  23.         print(f"没有找到符合条件的语音:语言={language}, 性别={gender}")
  24. # 示例调用
  25. async def main():
  26.     await print_available_voices(language="zh", gender="Female")
  27. # 运行异步示例
  28. if __name__ == "__main__":
  29.     asyncio.run(main())
复制代码


  • print_available_voices():此函数是异步的,通过 await 来调用 VoicesManager.create(),并获取语音列表。然后通过 voices.find() 根据语言和性别筛选语音。
更改语音参数

除了选择不同的音色外,edge-tts 还允许用户在合成时对语音的音量、语速、音调等参数进行调解。通过 Communicate 类中的 rate、pitch 和 volume 参数,可以动态控制生成的语音结果。
  1. import edge_tts
  2. def generate_audio_with_custom_params(text: str, output_file: str, rate: str = "+0%", pitch: str = "+0Hz", volume: str = "+0%") -> None:
  3.     """
  4.     生成带有自定义语音参数的音频
  5.     :param text: 需要合成的中文文本
  6.     :param output_file: 输出的音频文件名
  7.     :param rate: 语速调整(默认为 "+0%",表示标准语速)
  8.     :param pitch: 音调调整(默认为 "+0Hz",表示标准音调)
  9.     :param volume: 音量调整(默认为 "+0%",表示标准音量)
  10.     """
  11.     # 选择中文语音,这里使用的是小艺的 Neural 语音
  12.     voice = "zh-CN-XiaoyiNeural"  
  13.    
  14.     # 使用 edge_tts.Communicate 创建语音对象,并传入自定义参数
  15.     communicate = edge_tts.Communicate(text, voice, rate=rate, pitch=pitch, volume=volume)
  16.    
  17.     # 保存生成的音频文件
  18.     communicate.save_sync(output_file)
  19.     print(f"音频已生成,语速: {rate},音调: {pitch},音量: {volume}。")
  20. # 示例调用
  21. generate_audio_with_custom_params(
  22.     "欢迎体验自定义语音合成!",
  23.     "custom_param_audio.wav",
  24.     rate="+50%",
  25.     pitch="+10Hz",
  26.     volume="-20%"
  27. )
复制代码


  • rate(语速):控制语速的调解。默认值为 "+0%",表示尺度语速。
  • pitch(音调):控制音调的调解,单位是 Hz。默认值为 "+0Hz",表示尺度音调。
  • volume(音量):控制音量的调解,单位是百分比。默认值为 "+0%",表示尺度音量。
生成音频与字幕

在某些应用场景中,您可能需要同时生成音频和字幕,并根据需要选择同步或异步方式进行处理。这个章节展示了如何通过 edge-tts 实现同步和异步生成音频和字幕文件。执行后,会生成音频文件和对应的字幕文件。
  1. import asyncio
  2. import edge_tts
  3. def process_audio_and_subtitles_sync(text: str, voice: str, output_file: str, srt_file: str) -> None:
  4.     """
  5.     同步生成音频并实时生成字幕
  6.     :param text: 需要合成的中文文本
  7.     :param voice: 使用的语音类型
  8.     :param output_file: 输出的音频文件名
  9.     :param srt_file: 输出的字幕文件名
  10.     """
  11.     communicate = edge_tts.Communicate(text, voice)
  12.     submaker = edge_tts.SubMaker()
  13.     # 同步生成音频并实时生成字幕
  14.     with open(output_file, "wb") as audio_file:
  15.         for chunk in communicate.stream_sync():
  16.             if chunk["type"] == "audio":
  17.                 audio_file.write(chunk["data"])  # 写入音频数据
  18.             elif chunk["type"] == "WordBoundary":
  19.                 submaker.feed(chunk)  # 处理字幕
  20.     # 保存字幕文件
  21.     with open(srt_file, "w", encoding="utf-8") as subtitle_file:
  22.         subtitle_file.write(submaker.get_srt())
  23. async def process_audio_and_subtitles_async(text: str, voice: str, output_file: str, srt_file: str) -> None:
  24.     """
  25.     异步生成音频并实时生成字幕
  26.     :param text: 需要合成的中文文本
  27.     :param voice: 使用的语音类型
  28.     :param output_file: 输出的音频文件名
  29.     :param srt_file: 输出的字幕文件名
  30.     """
  31.     # 异步调用同步版本的逻辑
  32.     loop = asyncio.get_event_loop()
  33.     await loop.run_in_executor(None, process_audio_and_subtitles_sync, text, voice, output_file, srt_file)
  34. # 示例调用
  35. process_audio_and_subtitles_sync("欢迎使用 Python 进行语音合成!", "zh-CN-XiaoyiNeural", "audio_sync.mp3", "audio_sync.srt")
  36. # 异步调用
  37. 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 库实现文本到语音的转换。您通过不同的函数实现了以下功能:


  • 底子文本转语音
  • 动态选择语音生成语音
  • 生成音频流和字幕
渴望这篇教程可以或许资助您熟练使用 edge-tts 库进行中文语音合成!

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

守听

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表