对于AAC,搜下来定点方案中较好的是3GPP中AAC的参考实现。由于是3GPP的reference code,质量肯定没问题,就决定用它了。刚开始未优化时在我们芯片上跑下来load是2000多MCPS,后来一步步优化到不到200MCPS,可以在芯片上高枕无忧的运行了,也就没再继续优化,还要去忙其他的decoder呢。至于怎么优化的可以看我前面写过的一片文章(音频的编解码及其优化方法和经验),这里就不具体描述了,通常优化都是有套路的。优化好后就要把静态库集成到FFMPEG中,并且加相应的适配代码,使其能正常运行。那时(2013年)网上关于这方面的描述不多,我也是一边搜索一边尝试,最终把AAC的定点实现库成功集成到FFMPEG中了。这里也简单说一下怎么加decoder的库到FFMPEG 中,给有需要的做个参考。主要有以下几个步骤:
1)把decoder调好,得到库文件和头文件
2)修改FFMPEG的configure
3)在allcodecs.c中加上REGISTER_DECODER(),注册这个decoder

4)在libavcodec目录中加上这个decoder的适配文件(*.c),同时修改libavcodec下的makefile,使这个适配文件能编进去
5)修改./configure 使这个decoder使能,同时告诉相应的库路径和头文件路径
OGG格式的解码用的是Vorbis,其官网()上就有定点实现。本来load就不高,把他简单优化一下就可以用了,然后做成静态库集成到FFMPEG中。从找定点实现到集成到FFMPEG中用了不到一星期时间,可以说是非常顺利。WMA就没有这么顺利了,废了一番波折,主要是因为微软不提供定点实现。在网上花了一些时间搜索,某个国外论坛里有人说RockBox里有WMA的定点实现。把RockBox download下来在Ubuntu下生成一个带界面的应用程序,播放一个WMA格式的音乐,可以正常播放。接下来就是把WMA的定点实现从RockBox中剥离出来,它与其他代码耦合的比较深,剥离花了些时间,最终还是成功剥离了,又花了点时间简单优化下并做成库集成进FFMPEG中。这样三个decoder的优化及集成就搞定了。
Decoder搞定后就开始做后处理,主要做均衡化(EQ),它是通过改变不同频段上的gain值从而产生不同的音效,有摇滚、经典、古典、爵士舞曲等10种模式。从信号处理的角度看,EQ就是一个两阶IIR滤波器。用户在手机APP上指定想要的模式后模式ID就会发到音箱上,软件就会根据ID得到相应的参数做EQ后处理。依旧在网上找定点实现,找到后先做一个应用程序验证效果。验证好后就开始把它用到我们的产品中并和其他模块联调。调试好后看到我们的无线音箱也支持音效特别有成就感。
经过我们几个月的努力,无线音箱解决方案完成了,也陆续得到客户的认可,采用我们的方案。对我个人而言,从语音扩展到了音乐,音频的知识面更广了。
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/bofangqi/article-66707-2.html
企业大了就是好啊
做了电商
美国靠得住