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

2024-10-14 20:31:14

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

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

3、但另一位插件作者冲天表示他的PC端可以播放,尚不确定是他的QQ版本原因还是其他骒貉缭塄原因,最新版QQ肯定是不行的。而如果你将一个真正的AMR编码的音频上传,那么安卓和IOS的QQ都可以正常播放。但电悲逻液徙脑端依然不能解码。因为QQ所支持的语音,虽然后缀是.amr,但实际音频编码是silk。如果你用记事本打开QQ语音的话,会发现文件头是“#!SILK_V3”,而不是AMR编码所应有的“#!AMR”。好了,前面说了这么多,就是想告诉很多尝试想要发送AMR音频的同学,为什么在发出的音频在电脑端不能播放。总之,想要发一个全平台都能正常播放的语音,就必须使用所有版本的QQ都支持的编码方式,那就是SILK编码。那么SILK编码是什么呢,这不是一个常见编码。他本身是Skype开发的一种用于VoIP的编码方式,适合于网络电话,优点是以非常低的比特率和丢包容错率来实现清晰的语音通话。通常是使用24KHz,25Kbps的码率。如果是MP3,到了此码率上基本已经严重失真了。把普通音频转为SILK格式,并没有现成的转换软件,格式工厂,转化大师之类的软件就不用去考虑了。不过,SILK的编解码是开源的。你们可以选择SILK_SDK_SRC_v1.0.9,这是最新的。源码是C语言的,所以需要安装一个GCC编译器来编译为EXE程序,当你下载了SILK SDK之后。test目录下有一个Encoder.c,这就是你要编译的源码,编译后就能得到一个SILK编码程序了。编译的过程百度一下GCC编译连接即可,命令行执行罢了。但是,这个简单的编码软件,并没有太高级的功能,所以他所支持的输入音频,必须为24KHz的PCM音源。下面就是语音时代插件所附带的编码软件的参数配置,这个与原始版是一样的。通常情况下,你不会想去修改输出音频的参数的,默认的就很好。顺便一说,语音时代的SILK编码器是他们二次开发过的,所以你无法直接使用。

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

5、而腾讯加上的^B这个间隔符很关键,如果一个SILK编码的AMR文件(说的好复杂),文件头第一个字符不是它,那么对不起,各版本的QQ都不会识别。所以,在先开始说的,编译Encoder.c时,你可能需要稍微微修改一下源码,让输出的音频,加上这么一个文件头。这样,输出的音频,你就可以使用Api_UploadVoice上传啦,并且所有版本的QQ都可以正常播放!到了这里,可能有人会说,不懂修改源码怎么办?没关系,你也可以修改标准SILK音频的字节集。Api_UploadVoice读入的是字节集,你只要在这个SILK音频的字节集最前方加上一个“2,”,QQ也可以正常识别这个音频文件啦!这样就简单很多了是不是?好了,原理解析到此结束。如果你想使用语音替换文字输出,那么流程就是3步:第一步获取合成语音mp3文件,百度就有提供接口,这个很简单。当然也可以使用歌曲啊什么的。第二步,用ffmpeg把任意音源转为24KHz的PCM源。第三步,用SILK编码器把这个PCM源转为SILK音频。发送!如果还是解决不了的话,就只有用语音时代喽。。我有空的话大概会写一个发送自定义音频的插件吧。不过语音合成我完全没计划。因为我在语音上研究了半天只是为了娇喘机器人而已。。。

猜你喜欢