Skip to content

GPT-SoVITS 相关优化#1000

Draft
tsxc-github wants to merge 5 commits intoClassIsland:devfrom
tsxc-github:dev
Draft

GPT-SoVITS 相关优化#1000
tsxc-github wants to merge 5 commits intoClassIsland:devfrom
tsxc-github:dev

Conversation

@tsxc-github
Copy link
Copy Markdown
Contributor

@tsxc-github tsxc-github commented May 1, 2025

因为在写GPT-SoVITS文档的时候感觉有很多东西都没优化,要把这些不完善的东西写进文档的tips呢不太优雅,于是就顺便优化了一下~

具体的都在提交信息惹。

另外呢我想做一个 「流式输出」 的功能,对于像是天气预警啊什么的长文就不用等待完全生成了~

但是呢我不知道这个东西应该怎么弄,是判断长文本使用一次性流式输出还是全部都流式(感觉后者更优雅呢)。但是呢我不知道如何将流式输出的音频在播放的同时存一份到文件里(悲

所以,想参考一下各位的意见,以及能否提供一点小小的技术思路,对于我这种菜鸡来说是莫大的帮助惹。

另外讲点题外话,我不是很清楚在C#中有哪些能够对音频设备进行很方便操作的方法...尝试了很久之后发现依然不能很好得实现#478的功能...

最开始我以为这个功能看起来很简单的样子,不就动动手调用下NAudio的方法,再加两个配置项就搞定的事情,就像jy在issue里面说的那样「应该可以便捷地实现功能」。但是在尝试NAudio之后,我发现WaveOutCapabilities类的设备和MMDevice类的设备很难相互转换,我并没有找到完全相同且具有唯一性的成员用于转换...

同时,我没找到在不影响设备音量的同时更改实际的播放音量的方法,折中的办法是播放前先获取一个音量,随后在播放结束后自动复原。但是还得处理多个音频同时播放的问题...

而且如果要做这个功能,还得做很多附属的功能,比如行动的支持、通知渠道特殊配置、时间点/课程特殊配置。头疼...

以上就是我从三月初鸽到现在的理由(

最后很高兴您能读完~无论能否提供帮助,我向您支付阅读这段文字的感谢

@HelloWRC
Copy link
Copy Markdown
Member

HelloWRC commented May 6, 2025

🤔 感觉控制播放时是否使用测试模式的逻辑不应该直接加到 ProcessPlayerList 的参数里面,因为这个方法在执行后会一直处理待播放列表,直到播放列表全部处理完成。如果调用这个方法时处于测试模式,但后面的语音不处于测试模式,就可能出现后续的语音也会清除缓存。如果后面的正常播报的语音和测试语音内容相同,也可能会出现测试完之后把后面语音需要的缓存删除,导致播放失败的情况。

我觉得应该把是否使用测试模式的状态存储到 GptSoVitsPlayInfo 里面,这样可以根据每个语音做出是否需要删除缓存的判断。同时删除缓存时也应该注意播放列表中是否还有要用到即将删除的缓存的语音请求。

@tsxc-github
Copy link
Copy Markdown
Contributor Author

的确是我有些疏忽了,没有考虑到正常的和测试的播放内容相同的问题。但是呢有一个小问题→多次点击会造成重复请求。我想比较改进的办法应当再判断队列中是否有处于测试模式且内容相同的,取消掉后面的请求与播放。并且删除缓存似乎是不必要的,强制进行请求似乎更加优雅。最后呢这个测试的时候按下没有提示,再加上运算较慢,很容易出现上述多次点击问题,也许可以加一个提示。

因学业略有繁忙,可能改进的提交需要较长时间。

最后,感谢您提出改进意见~

@tsxc-github tsxc-github marked this pull request as draft May 6, 2025 09:38
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants