多语言展示
当前在线:1158今日阅读:112今日分享:19

MYPCQQ语音发送实现原理简单介绍。

事先声明,此贴只提供mypcqq发送语音原理介绍和实现构想,有想法的同学可以根据本帖获得实现办法,但并不能让你直接获得发送任意语音的能力。并且,并不一定全部正确,只是基于我的测试和理解,实际应用中有所偏差也是有可能的。
工具/原料
1

电脑

2

mypcqq

方法/步骤
1

MYPCQQ的框架,提供了语音发送的API:Api_UploadVoice。语音发送全部基于此API实现。用途是上传一个amr语音文件。然后配合Api_SendMsg发送出去。用法很简单:

2

QQ所支持上传的语音,后缀要求为amr,但是注意,仅仅是后缀。其内在编码为silk,这个稍后讲。QQ发送语音的流程是,首先生成AMR后缀的语音,然后上传至腾讯服务器,服务器将这个语音数据流转发至各个用户。在转发过程中,服务器对语音数据没有效验,也没有修改。也就是说,如果你把一个MP3编码音频的后缀,修改为AMR,也可以成功上传到Q群并让大家接收到。但是,能够接收到,并不代表接收端能够正常播放。这就与各个消息接收端的解码有关系了。常见的接收端无非就是PC版,安卓版,IOS版,还有个轻聊版。在我的测试中,如果你真的发送了一个MP3编码的音频,那只有安卓的QQ客户端可以正常播放,其他均不行。比如下图就是发送一个MP3编码文件的结果,在PC端显示为一个1秒的音频,无法正常播放。而IOS端,则可以正常显示此音频的长度,但无法播放出声音。

4

如果是格式工厂,当然你转换频率的时候,他会完美的处理。而这个简单的编码软件不会。所以输入的PCM编码数据,如果不是24KHz,出来的音频就会严重失真。所以问题就来了。大家想要编码的音频源各种各样,可能是MP3,可能是AAC,可能是WAV,频率也可能是48K,22K怎么办?这里就需要另一个编码软件:ffmpeg。有研究过语音时代插件的同学可能已经发现了。在语音时代的组件包里,有ffmpeg.exe和VoiceEra_Encoder.exe两个可执行程序。ffmpeg可以说是各种编解码软件的核心,各种音频视频无一不能。(然而他不支持SILK。。。)那么,首先用ffmpeg把任意格式的音频文件,转换为24KHz的PCM即可。这里顺便一说。正常情况下的WAV后缀音频,用的就是PCM编码,只是多了WAV文件头而已。转换完之后,你就有了一个适合SILK编码的音频源了,此时再用先开始编译出的编码器转换即可。可以直接保存为.amr文件。原本如果是正常情况,这个silk编码的amr文件应该是可以正常播放了。但是!腾讯很无聊的,在他们的SILK编码时,加入了一个效验字符:^B,如下图。在文件最开头,有一个符号。正常的SILK音频是没有的。

注意事项
1

本经验非原创,非常好 QQ:2

2

mypcqq下载地址:http://www.mypcqq.cc/

推荐信息