-
-
Notifications
You must be signed in to change notification settings - Fork 1.4k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
加速合成的一点小思路,长语句,按 , 。 ! 进行分割,在读第一句的时候,利用这个时间合成下一句。 #208
Comments
谢谢你的建议,这是一个非常好的想法。只是目前 wukong 的 Player 默认是非阻塞的,所以当我拆分句子后得小心做好 onCompleted 的衔接,否则就会出现一堆句子同时播放的问题。 要解决这个问题,我需要把 Player 的播放机制从单任务做成一个队列,顺便干掉 wait 参数。这样才能简单而优雅的实现你的想法。 我近期会考虑对 Player 做个重构支持这个 feature 。 |
1.先计算总共拆分成几句,然后每句一个序号。 2.我已经碰到过一堆句子同时播放的情况了。有时会唤醒2次,然后对2次都回答,就同时播放了。这种情况很少。 3.如果按方法1搞,说不定能顺便就解决情况2了。 |
需要先实现好 Player 的子线程播放队列,才能考虑做这个 feature 。否则要么在播放声音过程中无法唤醒(阻塞了主线程),要么就会很容易出现多段语音同时播放的问题(不阻塞,但是异步同时叠加播放了音频)。 |
优化一下我最早的思路: 详细思路: |
不需要这么复杂,我的想法是全部句子丢线程池里消化。文本生产者-TTS 消费者/播放队列生产者-播放队列消费者的方式。 |
…th` 选项。 1. 增加了线程池来进行并行 TTS ,以优化合成速度,并解决了文本超长可能导致 TTS 失败的问题; 2. 由于文本超长导致TTS的问题已经被解决,废弃了 `trim_too_long_text` 和 `max_text_length` 选项。
3.4.0版本 已实现了多线程TTS加速合成的能力。 |
做是可以做,不过代码可能就会写的很难看。 |
优化了一把。这次一旦合成 TTS ,会立马按顺序进入播放,而不会等到所有 TTS 合成完成。代码提交到了主干。 |
牛。 |
我统计了一下,合成一句话用时大约是0.4+秒,播放一句话大约是6秒。所以在播放第1句话的时候,剩下的所有内容均已合成成功。 分拆成2行,分别进行TTSlines = re.split(",|。|!|?|!|?|\n", msg ,maxsplit=1) |
确认已寻找过答案
问题描述
加速合成的一点小思路,“分段合成”。长语句,按 , ; 。 ! 进行分割,在读第一句的时候,利用这个时间合成下一句。
优点:加快了反应速度。
缺点:消耗更多的API调用量。
可以加一个参数,由用户根据自己的情况,是否启用“分段合成”功能。
The text was updated successfully, but these errors were encountered: