选型这件事,最后让我下决心的不是跑分,是同一段文字反复听了几十遍之后,哪一遍我忘了自己在听机器。
我实际比较了什么
参数表上的 MOS 分、采样率、模型规模,参考价值有限,因为最终场景是「听一整章小说」,不是念一句「今天天气不错」。我把比较收窄到四个地方:
- 长句的呼吸感:三十字以上的句子,逗号处停多久、有没有不该断的地方断了。
- 多音字和专名:「行长」「重庆」这类,以及人名、书名里不常见的字。
- 情绪的平:朗读最怕每句都带一点播音腔,听二十分钟会累。
- 变速之后还像不像人:这一条权重最高,因为产品里语速是要交给用户调的。
怎么听才不算自欺欺人
固定一段三千字左右的文本,一半叙事一半对话;同一副耳机,同一音量;把不同引擎的输出切成十段打乱顺序,隔天再听一遍,看还能不能分出来哪个是哪个。第一次能分出来不算本事,第二天还能分出来,差别才是真的。
MiMo 在这套听法下最明显的优势是句尾不飘、长句里停顿的位置比较克制,变速到 1.3 倍也不会出现那种「赶着念完」的挤压感。短板也有:极短的单句有时略显平,需要靠前端的文本归一化和标点处理补一下。
选引擎别只看单句 demo,拿你真实要读的内容去听,而且要在你打算让用户用的那个语速上听。
还有一层约束
因为要做的是能被系统阅读类 App 调用的引擎,不是自带播放器的独立应用,所以「声音好不好」只是入场券。还得看它能不能稳定地按 Android TTS 框架的回调方式把音频流吐出来、能不能在合成过程中响应中断、以及语速参数能不能落到底层。这部分后面单独写。