文本转语音 (TTS)

本模块提供了文本转语音(Text-to-Speech, TTS)功能,支持将文本内容转换为 opus 或 MP3 格式的音频文件。模块集成了系统原生 TTS 功能(macOS 的 say 命令)以及 Google Text-to-Speech (gTTS) 服务,并使用 ffmpeg 进行音频格式转换。

主要功能

模块提供了两个主要函数,分别用于生成 opus 和 MP3 格式的音频文件:

text_to_speech_output_opus

text_to_speech_output_opus(text: str, opus_filename: str, use_say: bool = True)

将文本转换为 opus 格式的音频文件。

参数:

  • text (str): 需要转换的文本内容。

  • opus_filename (str): 输出的 opus 文件名。

  • use_say (bool): 在 macOS 系统上是否使用系统的 say 命令,默认为 True。

功能说明:

  • 在 macOS 上优先使用系统的 say 命令进行转换。

  • 在其他系统或指定不使用 say 命令时,使用 gTTS 服务。

  • 使用 ffmpeg 将音频转换为 opus 格式,采样率为 16kHz,单声道。

示例:

>>> from pywayne.tts import text_to_speech_output_opus
>>> text_to_speech_output_opus("你好,世界", "hello.opus")

text_to_speech_output_mp3

text_to_speech_output_mp3(text: str, mp3_filename: str, use_say: bool = True)

将文本转换为 MP3 格式的音频文件。

参数:

  • text (str): 需要转换的文本内容。

  • mp3_filename (str): 输出的 MP3 文件名。

  • use_say (bool): 在 macOS 系统上是否使用系统的 say 命令,默认为 True。

功能说明:

  • 在 macOS 上优先使用系统的 say 命令进行转换。

  • 在其他系统或指定不使用 say 命令时,使用 gTTS 服务。

  • 使用 ffmpeg 将音频转换为 MP3 格式。

示例:

>>> from pywayne.tts import text_to_speech_output_mp3
>>> text_to_speech_output_mp3("你好,世界", "hello.mp3")

依赖要求

使用该模块需要满足以下依赖条件:

  1. ffmpeg:

    • macOS 用户可通过 Homebrew 安装:brew install ffmpeg

    • Windows 用户需要从 https://ffmpeg.org 下载并配置环境变量

    • Linux 用户可使用包管理器安装:sudo apt install ffmpeg

  2. Python 依赖:

    • gtts:用于调用 Google Text-to-Speech 服务

    • 其他基础 Python 库:tempfile, subprocess, platform, shutil 等

使用建议

  1. 音频格式选择:

    • opus 格式适合语音通话等场景,文件小且音质好

    • MP3 格式兼容性更好,适合多媒体播放场景

  2. 性能考虑:

    • macOS 上使用系统 say 命令速度较快

    • 使用 gTTS 服务时需要网络连接

    • 建议对频繁使用的音频进行缓存

  3. 错误处理:

    • 使用前请确保 ffmpeg 已正确安装

    • 注意处理网络问题导致的 gTTS 服务调用失败

    • 确保输出路径具有写入权限

示例代码

以下是一个完整的使用示例:

from pywayne.tts import text_to_speech_output_opus, text_to_speech_output_mp3

# 生成 opus 格式音频
text_to_speech_output_opus(
    text="欢迎使用文本转语音服务",
    opus_filename="welcome.opus"
)

# 生成 MP3 格式音频
text_to_speech_output_mp3(
    text="这是一条测试消息",
    mp3_filename="test.mp3",
    use_say=False  # 强制使用 gTTS 服务
)

注意事项

  1. 系统要求:

    • 确保系统已安装 ffmpeg 并可在命令行中访问

    • macOS 用户如需使用 say 命令,请确保系统音频服务正常

  2. 网络要求:

    • 使用 gTTS 服务时需要稳定的网络连接

    • 建议添加网络超时处理机制

  3. 文件处理:

    • 注意检查输出文件路径的权限

    • 建议在处理完成后及时清理临时文件

模块扩展建议

未来可以考虑在以下方面扩展模块功能:

  1. 支持更多 TTS 服务:

    • 集成其他开源或商业 TTS 引擎

    • 添加更多语音合成选项(如声音、语速等)

  2. 增强音频处理能力:

    • 支持更多音频格式

    • 提供音频后处理功能(如音量调节、降噪等)

  3. 优化性能:

    • 实现音频缓存机制

    • 支持批量转换和并行处理

常见问题 (FAQ)

  1. ffmpeg 相关问题:

    Q: 提示找不到 ffmpeg 命令怎么办?

    A: 请根据您的操作系统安装 ffmpeg:
    • macOS:使用 brew install ffmpeg

    • Linux:使用 sudo apt install ffmpeg 或对应的包管理器命令

    • Windows:从官网下载并添加到系统 PATH

    Q: ffmpeg 转换时报错怎么处理?

    A: 检查输出目录是否有写入权限,确保输入文件存在且格式正确。

  2. 语音服务问题:

    Q: macOS 的 say 命令无法使用?

    A: 检查系统音频服务是否正常,或尝试将 use_say 参数设置为 False 以使用 gTTS。

    Q: gTTS 服务无法访问?

    A: 检查网络连接,必要时配置代理。如果问题持续,可以尝试使用本地 TTS 引擎。

  3. 音频质量问题:

    Q: 生成的音频质量不理想? A: 可以尝试调整 ffmpeg 的转换参数,或选择更适合的音频格式。opus 格式通常在相同文件大小下有更好的音质。

  4. 其他常见问题:

    Q: 如何处理长文本转换? A: 建议将长文本分段处理,避免单次转换时间过长。

    Q: 临时文件占用空间过大? A: 程序会自动清理临时文件,如果发现残留,可以手动清理系统临时目录。