cdfmlr / muvtuber

Makes your AI vtuber
445 stars 75 forks source link

关于添加自定义TTS功能 #58

Open Paraworks opened 11 months ago

Paraworks commented 11 months ago

我注意到有一个与 Sovits 项目集成的问题,实际上可以考虑将 Azure TTS api 替换为自定义的api,然后单独修改 TTS 函数以适配 Sovits 或 Vits 项目。这是因为各个 Sovits 版本的 gradio启动内置了 TTS 模块,不需要额外接入Azure, 只需将其修改为Flask启动即可。

cdfmlr commented 11 months ago

TTS 模块是完全独立,可以灵活替换的,并不依赖于 Azure。可以在 muvtuberdriver 的配置中设置使用任意服务:

https://github.com/cdfmlr/muvtuber/blob/332d4ce424fcc76c0c421d57a20ebfe3db3e58fb/configs/muvtuberdriver/config.yaml#L22-L25

这里的 sayer.server 可以是任意实现了 muvtuber-proto/muvtuber/sayer/v1 接口的 grpc 服务。

externalsayer 是一个上述 muvtuber-proto/muvtuber/sayer/v1 接口的具体实现。这个程序旨在通过调用外部 Web API 来提供 sayer 服务,所以叫做 external sayer。externalsayer 可以支持实现、配置多种接口。而 Azure 只是 externalsayer 中提供的一种可以调用的接口(虽然目前是唯一一种)。你可以参考 Azure 的实现,添加调用任意 API 的实现。如果你的 sovits 或者其他任意 TTS 实现有 API 可以调用,你可以考虑在 externalsayer 中添加一种调用的实现。

如果没有 Web API 可用,或者你可以七天无理由不喜欢 externalsayer 的实现,那么你也可以从更底层入手,封装 sovits 的调用方法,直接提供一个 muvtuber-proto/muvtuber/sayer/v1 服务,cdfmlr/mac_sayer 是一个(相比于 externalsayer)更简单的实现例子。如果你写 Go 语音,还可以考虑复用 murchinroom/sayerapigo,这里已经写好了 endpoint 层。当然你也可以写 python 或其他任何拥有 grpc 支持的语言,只是可能会多写几行非常机械无聊的开服务的那种代码。

P.s. 这个 issue 和 https://github.com/cdfmlr/muvtuber/issues/42 是重复的。Prefer this, close #42.