接触AI智能方面已有三年,奈何本人只做应用层,其实对于语言相关技术理解也不是很深。最近项目相关,必须要深入一下音频使用,如果你也是做上层,公司也没有C做音频这一块的,只能借助三方资料了。
第一:首先你要知道,安卓启动麦克风有耗时动作,这个再google官网有资料说明,常规是60ms~150ms之间,公司设备配置较低,耗时再110ms,为什么要知道这个,因为为后面做拾音准备,因为它的工作延迟,会让你第一个音,不准,或者丢掉
第二:知道这个后,你就想一个问题了,麦克风拿到数据data数据,按音频格式是pcm,这个数据是无损,从http或者ws中,这个越小体积数据传输,会越快,成功率会提高,所以你需要接触到压缩,压缩的方法千千万万主流 speex,opus,我也不介绍了,随便推荐一个opus:https://github.com/martoreto/opuscodec
这个是有一段时间线上使用过,所以不用担心稳定性,跟可用性问题
第三:你要知道的有压缩就有解压,这方法得配套使用,怎么压缩就需要怎么解压
当项目进行到这里的时候,就要开始优化了
第四:比如ogg格式,这种通用标准,为了让你的音频更多三方可用,你还得接入了。所以有两个东西speex_ogg,opus_ogg。其中呢,opus_ogg 对google,跟微软,speex呢,像腾信,科大,国内很多也在用,所以你得研究用哪种了,所以呢你又要开始去找一些库了,没有C功底,你很难把ogg跟你前面的opus合并再一起,因为这个就是纯C之间调用,通过jni触发回调了。
speex_ogg 这块呢,目前git上有源码,可以搜索到,不做说明,ogg_opus这块呢,git上目前有的非常非常少,大多数都是,可以使用完整音频转换,可我的场景需要实时,这块找了一段时间都没有,暂时放下了,后来一次偶然找了一个库,验证了还能用,意外,可开发者没有提供播放类,算是一个不完整的,因为前面说了要压缩跟解压一套才是完整的,安卓5.0支持ogg,你要知道ogg只是一种格式,内部压缩格式多了,解压每家用得都不一样,完全基本不可公用。这里说到这里
第五:你要研究音频了,你有没有想过,识别率为什么底,相信你也查过资料,什么3A处理,什么原音加强,降噪,等等东西,一看,又是C相关,打住吧,看了看不懂,
第六:好玩的东西来了,你会遇到一个场景,我按下说话,20秒,其实我就说了2句话,就两个5秒。其中没有声音的10秒,你是不是送到服务了啊,这段是不是可以优化下,去看看vad吧,也就是语音端点检测,资料给你https://github.com/wangzhengcheng1994/android-webrtc-vad,
你要是觉得到位了,那你还是太年轻,vad这个东西基础版是能告诉你静音还是活动的,但是最重要的是算法,怎么知道断句了,这一块是所有做AI语音识别公司,第一个技术攻关,好坏直接影响到拾音好坏,效率问题,没有一家公司公开,这一块没有任何资料(阿里,科大,百度,京东,华为)都没有开出来,心里是不是又要翻白眼了。目前呢,据我了解,好的vad里面会融合进去,原声加强,降噪,等处理。所以这一块资料,没戏,除非自己做,但是这一块算法,嘿嘿,做安卓应用又可以死心了
惊喜处处有,意外总是不期而遇。欢迎讨论