Skip to content

feat: 重新封装打包 Genie TTS 以实现详细的日志记录 #116

Description

@Rvosy

背景

当前 Sakura 使用 Genie TTS 时,服务启动、角色加载、参考音频设置、文本合成、语义 token 推理和音频输出等关键步骤缺少足够清晰的日志。排查问题时只能看到少量 HTTP 状态或第三方整合包输出,难以判断问题发生在模型加载、参考音频、G2P、语义预测还是音频生成阶段。

同时,现有 Genie TTS 整合包来源不够清晰。为了后续分发和维护,需要重新封装一份 Sakura 专用的 Genie TTS 包,明确资源来源、依赖范围和运行入口。

目标

重新封装 Genie TTS,使其成为 Sakura 可直接拉起的 TTS 整合包,并增强运行日志。

需要实现:

  • 提供 Sakura 专用启动入口。
  • 保留 Genie TTS 推理能力。
  • 输出更详细的运行日志。

日志要求

服务运行时应输出以下信息:

  • 服务启动状态。
  • 服务监听地址。
  • 当前协议版本。
  • GenieData 资源目录。
  • HTTP 请求路径和状态码。
  • 角色模型加载开始、完成、失败原因。
  • 参考音频设置开始、完成、失败原因。
  • 收到 TTS 文本时记录文本长度。
  • 合成开始。
  • 语义 token 预测完成状态:
    • EOS / MAX
    • token 起止长度
    • 推理速度 it/s
  • 音频流开始输出。
  • 合成完成:
    • 音频字节数
    • 耗时 ms
  • 异常时输出明确错误信息。

示例日志:

加载角色模型: N.A.V.I.
角色模型加载完成: N.A.V.I.
设置参考音频: N.A.V.I.
参考音频设置完成: N.A.V.I.
收到合成文本: 25 字
开始合成音频
语义 token 预测完成: EOS (150 -> 184, 56.56 it/s)
音频流开始输出
合成音频完成: 84480 bytes, 1334 ms

打包要求

整合包应包含:

  • server.py
  • convert.py
  • genie_tts/
  • deps/
  • GenieData/
  • manifest.json
  • SOURCE_MANIFEST.json
  • THIRD_PARTY_NOTICES.md
  • 启动测试脚本

API 要求

服务需要兼容 Sakura 当前调用方式:

  • GET /openapi.json
  • POST /load_character
  • POST /set_reference_audio
  • POST /tts
  • POST /stop

同时可以保留 Sakura 专用别名:

  • POST /voice/load
  • POST /voice/reference
  • POST /cache/clear

默认 /tts 返回 audio/wav

验收标准

  • Sakura 可以拉起该 TTS 服务。
  • 服务启动后 openapi.json 可访问。
  • 可以加载 ONNX 角色模型。
  • 可以设置参考音频。
  • 可以完成一次 TTS 合成。
  • Sakura 日志窗口能看到完整 TTS 阶段日志。
  • SOURCE_MANIFEST.json 能追溯 GenieData 来源。

注意事项

OpenJTalk / pyopenjtalk 的底层 warning 可能直接写入 stderr。Windows 下如果 Sakura 按 GBK/ANSI 解码日志,日文 warning 可能出现乱码。后续 Sakura 拉起子进程时应设置 UTF-8 环境变量,并按 UTF-8 读取 stdout/stderr。

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions