Skip to content

微信语音(SILK)编解码

发表时间:Sat Dec 02 2023 19:30:25 GMT+0800 (中国标准时间)

TEQuant https://mmbiz.qpic.cn/mmbiz_jpg/XaSOeHibHicMFFGb5xpZWerYbiaX1SsedZibDIIEr3iaOXtZB5vg7bj4Y0aX1xYDHTD94vCkMTZY1No5o1CCwGVetBw/0?wx_fmt=jpeg

SILK 是 Skype 开发的一种音频压缩格式和音频编解码器。有文章显示,Skype 已经放弃了 SILK[1] 转到了 Opus。

老早听说微信语音用的是 SILK,最近研究了一下。

网上搜索的很多内容,都指向 https://developer.skype.com/silk ,但这地址已经无法访问了。

找了一圈,只能从网页存档中看看了:https://web.archive.org/web/20090306031346/https://developer.skype.com/silk

按图索骥,找到了源码:https://github.com/ploverlake/silk

然后就可以开搞了。

思路比较简单,主要实现两个接口:

  • SILK to MP3

  • MP3 to SILK

前面用于收;后面用于发。两个都不能一步到位,需要经过一个中间态:PCM。

PCM 通过对音频进行采样、量化、编码之后得到。

很多解码器,对各种音频格式解码之后,输出的一般都是 PCM,可以用于直接播放。用带 DAC 的单片机,就可以做一个音频播放器了;如果了解 MP3 解码,可以直接播放 MP3。

说到这里,不知道大家有没有注意到一个情况:MP3 的解码好多人写;但 MP3 的编码少有人写。为啥?因为多数应用场景为播放 MP3;生成 MP3 的场景比较少。

我很早的时候投机取巧做过一个 TTS 软件,效果一般但思路比较清奇。

我把所有汉字的读音搞到,转成 PCM 格式;然后做一张表,关联字和字所在的音频的时间点。TTS 就成了。

当输入一串文字的时候,通过查表,把到对应的时间点,然后提取对应的音频,再拼起来,就形成了文字对应的语音了。

简单吧,根本就不用研究“没谱”(Mel 谱)和 HMM(那会儿神经网络还不流行)这些高深技术。

好了,说远了。回到微信语音转 MP3。

好像也没啥好说的,直接用 SILK SDK,解码就是了。

算了,自己看代码吧,代码在这里:https://github.com/lich0821/SilkMp3Converter.git

不过好像还有个问题,语音文件从哪里来?群里说吧。

后台回复 WeChatFerry 讨论语音

参考资料

[1]

Skype 已经放弃了 SILK: _https://answers.microsoft.com/en-us/skype/forum/all/whats-the-strategy-about-silk-codec-on-skype/5135db3a-58df-4c74-a39d-207a0cf8fdb5_

阅读原文

上次更新于: