无需API密钥!Edge-TTS音频格式转换全攻略

【免费下载链接】edge-tts Use Microsoft Edge's online text-to-speech service from Python WITHOUT needing Microsoft Edge or Windows or an API key 【免费下载链接】edge-tts 项目地址: https://gitcode.com/GitHub_Trending/ed/edge-tts

你还在为文本转语音(Text-to-Speech, TTS)服务的API密钥和复杂格式转换烦恼吗?本文将带你一文掌握Edge-TTS的音频格式转换技巧,无需复杂配置,轻松生成多种格式语音。读完本文,你将了解如何利用Edge-TTS项目实现音频格式转换,掌握从文本到音频文件的完整流程,并学会自定义音频参数以满足不同场景需求。

项目概述

Edge-TTS是一个开源项目,允许用户通过Python利用Microsoft Edge的在线文本转语音服务,无需安装Microsoft Edge浏览器、Windows操作系统或API密钥。项目核心功能包括文本转语音生成、音频流式传输以及字幕生成等。音频格式转换是其核心功能之一,通过内部处理将文本转换为MP3格式的音频文件。

项目路径:GitHub_Trending/ed/edge-tts

核心模块:

音频格式转换技术解析

支持的音频格式

Edge-TTS目前主要支持MP3格式的音频输出。在src/edge_tts/communicate.py中,通过配置输出格式参数实现:

# 在Communicate类的__stream方法中设置输出格式
"outputFormat":"audio-24khz-48kbitrate-mono-mp3"

当前支持的具体参数为24kHz采样率、48kbps比特率的单声道MP3格式。这一设置平衡了音频质量和文件大小,适合大多数应用场景。

格式转换流程

音频格式转换的核心流程在src/edge_tts/communicate.py中实现,主要包括以下步骤:

  1. 文本处理:对输入文本进行清洗和分割,确保符合TTS服务要求
  2. SSML生成:将文本转换为语音合成标记语言(Speech Synthesis Markup Language, SSML)
  3. 服务通信:通过WebSocket与Microsoft Edge TTS服务建立连接并发送请求
  4. 音频流接收:接收服务返回的音频流数据
  5. 格式处理:将音频流数据保存为MP3格式文件

以下是格式转换流程的示意图:

mermaid

关键技术点

1. 文本分割与处理

为了适应TTS服务的限制,Edge-TTS会将长文本分割为多个片段。src/edge_tts/communicate.py中的split_text_by_byte_length函数实现了智能分割逻辑:

def split_text_by_byte_length(
    text: Union[str, bytes], byte_length: int
) -> Generator[bytes, None, None]:
    # 实现文本分割逻辑,确保不超过字节限制
    # 优先在换行符或空格处分割,避免破坏词语
    # 确保UTF-8编码安全,不分割多字节字符
    # 避免分割XML实体,如&

该函数确保文本分割不会破坏语义,同时满足服务的字节限制要求。

2. 音频流处理

src/edge_tts/communicate.pystream方法中,实现了音频流的接收和处理:

async def stream(
    self,
) -> AsyncGenerator[TTSChunk, None]:
    # 建立WebSocket连接
    # 接收音频数据块
    # 处理并生成音频元数据
    # 合并音频片段

音频数据以二进制形式接收,每个音频块会被解析并直接写入输出文件,实现流式处理。

3. 格式转换实现

音频格式转换主要通过TTS服务的配置参数实现。在src/edge_tts/communicate.py中,通过设置outputFormat参数指定输出格式:

await websocket.send_str(
    f"X-Timestamp:{date_to_string()}\r\n"
    "Content-Type:application/json; charset=utf-8\r\n"
    "Path:speech.config\r\n\r\n"
    '{"context":{"synthesis":{"audio":{"metadataoptions":{'
    f'"sentenceBoundaryEnabled":"{sq}","wordBoundaryEnabled":"{wd}"'
    "},"
    '"outputFormat":"audio-24khz-48kbitrate-mono-mp3"'
    "}}}}\r\n"
)

实战指南

快速上手:生成MP3音频文件

以下是使用Edge-TTS生成MP3音频文件的简单示例,来自examples/sync_audio_gen_with_predefined_voice.py

import edge_tts

TEXT = "Hello World!"
VOICE = "en-GB-SoniaNeural"
OUTPUT_FILE = "test.mp3"

def main() -> None:
    communicate = edge_tts.Communicate(TEXT, VOICE)
    communicate.save_sync(OUTPUT_FILE)

if __name__ == "__main__":
    main()

运行上述代码后,会生成一个名为test.mp3的音频文件,包含"Hello World!"的语音内容。

自定义音频参数

Edge-TTS支持自定义音频参数,如语速、音量和音调。这些参数可以在创建Communicate对象时设置:

communicate = edge_tts.Communicate(
    TEXT, 
    VOICE,
    rate="+10%",  # 语速增加10%
    volume="+5%",  # 音量增加5%
    pitch="+20Hz"  # 音调增加20Hz
)

参数说明:

  • rate:语速,支持百分比(如"+10%")或绝对数值(如"150%")
  • volume:音量,支持百分比调整
  • pitch:音调,支持Hz为单位的调整

批量转换与流式处理

对于长文本或批量转换需求,可以使用异步处理或流式传输功能。examples/async_audio_gen_with_predefined_voice.py提供了异步处理示例:

import asyncio
import edge_tts

TEXT = "Hello World!"
VOICE = "en-GB-SoniaNeural"
OUTPUT_FILE = "test.mp3"

async def main() -> None:
    communicate = edge_tts.Communicate(TEXT, VOICE)
    await communicate.save(OUTPUT_FILE)

if __name__ == "__main__":
    asyncio.run(main())

流式处理示例可参考examples/async_audio_streaming_with_predefined_voice_and_subtitles.py,该示例同时生成音频和字幕文件。

常见问题与解决方案

音频质量问题

如果生成的音频质量不佳,可尝试调整输出格式参数。虽然当前代码中输出格式是固定的,但可以通过修改src/edge_tts/communicate.py中的相关设置来调整:

# 修改outputFormat参数
"outputFormat":"audio-48khz-128kbitrate-mono-mp3"

提高采样率(如48kHz)和比特率(如128kbps)可以提升音频质量,但会增加文件大小。

长文本处理

对于超长文本,建议使用src/edge_tts/communicate.py中的文本分割功能,或参考tests/001-long-text.sh中的测试用例进行处理。

语音选择

Edge-TTS支持多种语音,可以通过src/edge_tts/voices.py中的list_voices函数获取可用语音列表:

import asyncio
import edge_tts

async def main() -> None:
    voices = await edge_tts.list_voices()
    for voice in voices:
        print(voice["Name"], voice["Locale"])

if __name__ == "__main__":
    asyncio.run(main())

总结与展望

Edge-TTS提供了一种简单高效的方式实现文本到MP3格式的转换,无需依赖API密钥和特定操作系统。通过src/edge_tts/communicate.py中的核心实现,我们可以看到其音频格式转换技术的关键点:

  1. 基于WebSocket的实时音频流传输
  2. 智能文本分割与处理
  3. SSML生成与语音合成配置
  4. MP3音频格式处理与保存

未来,Edge-TTS可能会支持更多音频格式和自定义选项。用户可以通过关注项目README.md获取最新更新。

如果你觉得本文对你有帮助,请点赞、收藏并关注项目,以便获取更多关于Edge-TTS的使用技巧和更新信息。下期我们将介绍如何结合Edge-TTS实现字幕生成功能,敬请期待!

【免费下载链接】edge-tts Use Microsoft Edge's online text-to-speech service from Python WITHOUT needing Microsoft Edge or Windows or an API key 【免费下载链接】edge-tts 项目地址: https://gitcode.com/GitHub_Trending/ed/edge-tts

Logo

中国智能体开发者社区,聚焦智能体与大模型开发,提供前沿资讯、实用工具链、开源项目及行业案例。通过技术沙龙、开发者大赛等活动,促进经验交流与协作,助力开发者快速构建创新智能应用。

更多推荐