OuteTTS:基于纯语言建模的开源文本到语音合成项目,支持语音克隆等多种语音合成任务

226 阅读4分钟

❤️ 如果你也关注大模型与 AI 的发展现状,且对大模型应用开发非常感兴趣,我会快速跟你分享最新的感兴趣的 AI 应用和热点信息,也会不定期分享自己的想法和开源实例,欢迎关注我哦!

🥦 微信公众号|搜一搜:蚝油菜花 🥦


🚀 快速阅读

  1. OuteTTS 是一个基于纯语言建模方法的开源文本到语音合成项目。
  2. 支持文本到语音合成、语音克隆、音频标记化、CTC 强制对齐和结构化提示创建等功能。
  3. 适用于有声读物、智能客服、语音导航等多种应用场景。

正文(附运行示例)

OuteTTS 是什么

outetts.png

OuteTTS 是一个开源的文本到语音(TTS)项目,基于纯语言建模的方法生成语音。该项目基于 LLaMa 架构,使用 Oute3-350M-DEV 基础模型,拥有 3.5 亿参数。OuteTTS 具备音频标记化、CTC 强制对齐技术和结构化提示创建等创新音频处理方法,支持语音克隆功能,以及用户创建自定义说话人的声音。它与 llama.cpp 和 GGUF 格式兼容,适用于有声读物、智能客服、语音导航等多种应用场景。

OuteTTS 的主要功能

  • 文本到语音合成:将文本转换为自然听起来的语音输出。
  • 语音克隆:用户提供参考音频文件和相应的文本,创建自定义的语音,用于个性化语音应用。
  • 音频标记化:用 WavTokenizer 将音频信号转化为可供模型处理的格式。
  • CTC 强制对齐:创建字与音频令牌之间的精确映射,确保文本与音频之间的准确对应。
  • 结构化提示创建:用特定的格式提供明确的指导,提高语音合成的准确性和自然度。
  • 与现有技术兼容:与 llama.cpp 和 GGUF 格式兼容,方便集成到不同的应用环境中。

OuteTTS 的技术原理

  • 音频标记化:OuteTTS 用 WavTokenizer 对音频信号进行标记化,将连续的音频波形转换为离散的音频令牌,以便模型处理。
  • CTC 强制对齐:用连接时序分类(CTC)技术,OuteTTS 精确地将文本中的字与音频令牌对应起来,确保语音合成的准确性。
  • 结构化提示创建:OuteTTS 基于“[full transcription] [word] [duration token]”的结构化提示格式,为模型提供清晰的指导,有助于提高合成语音的准确性和自然度。
  • 基于 LLaMa 架构的模型构建:OuteTTS 基于 LLaMa 架构,用预训练的 Oute3-350M-DEV 模型,模型在大量数据上进行预训练,拥有 3.5 亿参数,为语音合成任务提供强大的支持。
  • 纯语言建模:OuteTTS 用纯语言建模的方式实现语音合成,无需复杂的适配器或架构,简化 TTS 的实现过程。
  • 参数调整:基于调整模型参数,如温度和重复惩罚,OuteTTS 在不同情况下获得更稳定和高质量的语音输出。

如何运行 OuteTTS

安装

pip install outetts

重要提示: 对于 GGUF 支持,你必须手动安装 llama-cpp-python。具体安装指令请访问 llama-cpp-python 仓库

接口使用

from outetts.v0_1.interface import InterfaceHF, InterfaceGGUF

# 初始化接口,使用 Hugging Face 模型
interface = InterfaceHF("OuteAI/OuteTTS-0.1-350M")

# 或者初始化接口,使用 GGUF 模型
# interface = InterfaceGGUF("path/to/model.gguf")

# 生成 TTS 输出
# 没有提供说话人参考时,模型会随机生成说话人特性
output = interface.generate(
    text="Hello, am I working?",
    temperature=0.1,
    repetition_penalty=1.1,
    max_length=4096
)

# 播放生成的音频
output.play()

# 将生成的音频保存到文件
output.save("output.wav")

语音克隆

# 从音频文件创建自定义说话人
speaker = interface.create_speaker(
    "path/to/reference.wav",
    "reference text matching the audio"
)

# 将说话人保存到文件
interface.save_speaker(speaker, "speaker.pkl")

# 从文件加载说话人
speaker = interface.load_speaker("speaker.pkl")

# 生成带有自定义声音的 TTS
output = interface.generate(
    text="This is a cloned voice speaking",
    speaker=speaker,
    temperature=0.1,
    repetition_penalty=1.1,
    max_length=4096
)

资源

  1. 项目官网:www.outeai.com/blog/OuteTT…
  2. GitHub 仓库:github.com/edwko/OuteT…
  3. WavTokenizer 仓库:github.com/jishengpeng…
  4. CTC 强制对齐教程:pytorch.org/audio/stabl…

❤️ 如果你也关注大模型与 AI 的发展现状,且对大模型应用开发非常感兴趣,我会快速跟你分享最新的感兴趣的 AI 应用和热点信息,也会不定期分享自己的想法和开源实例,欢迎关注我哦!

🥦 微信公众号|搜一搜:蚝油菜花 🥦