从2017年开始国外智能音箱的热潮席卷到国内,各大小厂商都推出了智能音箱,主要有阿里的天猫精灵京东的叮咚和小米的小爱同学等。我也在去年双11入手了一款智能音箱(天猫精灵),体验下来总体感觉还是不错的,我相信这股热潮在今年(2018)会愈演愈热。有报道说美国的青年有了智能音箱后对手机的依赖度有所下降,即有些事情可以通过智能音箱解决了,这种现象在国内也会出现。智能音箱是在无线音箱的基础上加上人工智能(AI)发展起来的。几年前无线音箱也火过,推出了好多产品,有基于bluetooth的,也有基于WiFi的。基于bluetooth的是主流,基于WiFi的不多,但是现在智能音箱都是基于WiFi的。那时我还在芯片公司,我们team的语音解决方案已经做得很成熟,老板就让我们用自己公司的芯片做主芯片,开发一个基于WiFi的无线音箱解决方案。

无线音箱先由手机去配置连到某个无线路由器上,手机也连到这个无线路由器上, 这样手机上的音乐播放器就可以把音乐在无线音箱上播放了。既可以把手机本机上的歌曲推送到音箱上播放,也可以把云端的歌曲推送到音箱上播放。支持的协议有DLNA和Airplay,主流的音乐播放器(QQ音乐/酷狗音乐/网易云音乐等)均支持,也支持苹果的音乐播放器(Airplay)。支持的音乐格式很多,有MP3/AAC/OGG/APE/WMA/ALAC/FLAC等,支持音乐双声道立体声播放,但是在一个音箱上效果不明显。如果有两个这样的音箱,又用上公司开发的相应的音乐播放APP,可以把左声道的数据推送到一个音箱上,右声道的数据推送到另一个音箱上,产生较强的立体声效果。

无线音箱的软件实现是在openWrt上开发的,这样无线相关的软件全都好了,我们只要开发音频相关的软件。音频相关的绝大多数是基于开源的开发,协议的DLNA用的是sharepoint,AirPlay用的是gmediarender,音乐格式解析及解码等用的是FFMPEG,音频的播放用的是ALSA。Sharepoint和gmediarender基本上是拿来用,在接口上改了一点点,调用我们做好的API实现与我们自己软件的通信。FFMPEG主要是增加decoder,同时还要对decoder优化使其能流畅的运行。我们自己的软件就是搭一个框架(实现一个process)把这些开源实现给串起来,形成一个无线音箱音乐播放方案。解决方案的软件框图如下:

我们实现的process叫mediaplay, 它与协议(DLNA/AirPlay)之间通过share memory通信,从而实现音乐的播放暂停停止等。Mediaplay会调用FFMPEG提供的API去解析音乐格式,并一帧一帧的解码得到PCM数据放进ring buffer中,然后用mutex block住mediaplay。Mediaplay向ALSA注册了回调函数,每隔一帧时长就会被调用一次,取走ring buffer中一帧PCM数据,并解锁mutex使mediaplay继续循环运行去解码下一帧。在一首歌开始解码时一般会缓存若干帧在ring buffer中然后才使能播放,这样做虽然增加了一两百毫秒的delay,但是保证了播放时的连续流畅性,不会出现噪声。再说音乐播放是非实时业务,一两百毫秒的delay对用户是不敏感的。

我们team共4人。一人负责ALSA(包括driver和ALSA-Lib的调用),一人负责软件框架(即实现mediaplay process及里面的控制逻辑),一人负责DLNA/AirPlay协议的移植以及与mediaplay的通信,我负责FFMPEG、decoder优化以及把优化好的decoder lib集成到FFMPEG中,同时还负责后处理(主要是EQ)。用开源的好处是网上资料很多。我开始前先在网上搜怎么编译FFMPEG生成动态库,以及怎么使能一些decoder不使能一些decoder等。这些搞定后就调研我们需要的decoder(MP3/AAC/APE/OGG/WMA/FLAC/ALAC)FFMPEG是否都支持,哪些是定点实现的,哪些是浮点实现的(我们是在ARM上做软件方案,且CPU只有500兆,一定要用定点实现,浮点实现CPU load扛不住)。调研下来这些decoder FFMPEG都支持,但是AAC/OGG/WMA是浮点实现的。做了个小应用程序(代码中调用FFMPEG的API)在芯片上去播放这些格式的音乐,明显播放速度变慢了,这就需要去找这些decoder的定点实现来替换浮点实现。又到网上搜这些decoder定点实现中哪个应用最广泛(在网上快速搜到自己想要的东西也是一种能力,我就在那时候这方面的能力得到了提高,并且养成了要找开源首先去GitHub的习惯。给GitHub打广告了,哈哈)。

对于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,其官网(www.xiph.org)上就有定点实现。本来load就不高,把他简单优化一下就可以用了,然后做成静态库集成到FFMPEG中。从找定点实现到集成到FFMPEG中用了不到一星期时间,可以说是非常顺利。WMA就没有这么顺利了,废了一番波折,主要是因为微软不提供定点实现。在网上花了一些时间搜索,某个国外论坛里有人说RockBox里有WMA的定点实现。把RockBox download下来在Ubuntu下生成一个带界面的应用程序,播放一个WMA格式的音乐,可以正常播放。接下来就是把WMA的定点实现从RockBox中剥离出来,它与其他代码耦合的比较深,剥离花了些时间,最终还是成功剥离了,又花了点时间简单优化下并做成库集成进FFMPEG中。这样三个decoder的优化及集成就搞定了。

Decoder搞定后就开始做后处理,主要做均衡化(EQ),它是通过改变不同频段上的gain值从而产生不同的音效,有摇滚、经典、古典、爵士舞曲等10种模式。从信号处理的角度看,EQ就是一个两阶IIR滤波器。用户在手机APP上指定想要的模式后模式ID就会发到音箱上,软件就会根据ID得到相应的参数做EQ后处理。依旧在网上找定点实现,找到后先做一个应用程序验证效果。验证好后就开始把它用到我们的产品中并和其他模块联调。调试好后看到我们的无线音箱也支持音效特别有成就感。

经过我们几个月的努力,无线音箱解决方案完成了,也陆续得到客户的认可,采用我们的方案。对我个人而言,从语音扩展到了音乐,音频的知识面更广了。

无线音箱解决方案开发过程相关推荐

  1. 便利的无线信号传输解决方案

    通过使用不须经过许可的60 GHz射频毫米波段,可实现前所未有的多千兆数据速率,为短距离非接触式连接开辟了新的机会.这种板对板非接触式连接技术,可以去除电子设备中的柔性电缆,并避免工业电子系统中因为转 ...

  2. 煤矿无线广播系统解决方案

    煤矿无线广播系统解决方案 北京海特伟业科技有限公司发布于:2022-04-13 文/任洪卓 一.煤矿无线广播系统建设必要性 近期我国煤矿事故频发,尤其是较大事故接连发生,客观上需要煤矿企业安装煤矿无线 ...

  3. 高音质高性价比蓝牙音箱解决方案

    高音质高性价比蓝牙音箱解决方案 1.蓝牙模块:RB103(蓝牙4.0) 2.蓝牙协议:音乐播放(A2DP).流媒体控制(AVRCP).免提通话(HFP) 3.实现功能:开/关机.音量控制.暂停/播放. ...

  4. 基于Orangpi Zero和Linux ALSA实现WIFI无线音箱(三)

    作品已经完成,先上源码: https://files.cnblogs.com/files/qzrzq1/WIFISpeaker.zip 全文包含三篇,这是第三篇,主要讲述接收端程序的原理和过程. 第一 ...

  5. 无线对讲调度服务器,无线对讲系统解决方案

    <无线对讲系统解决方案>由会员分享,可在线阅读,更多相关<无线对讲系统解决方案(23页珍藏版)>请在人人文库网上搜索. 1.无线对讲智能化系统解决方案 随着我国无线通信技术飞速 ...

  6. b700a怎么连蓝牙_233621蓝牙2.1无线音箱B700A小测

    随着蓝牙技术的发展,使用蓝牙的相关产品也越来越多,各种蓝牙耳机.蓝牙键盘.蓝牙鼠标都让我们的外设摆脱了线材的束缚.小编之前也介绍过一款便携蓝牙音箱,也评测过一款蓝牙耳机,而今天拿到的是一款采用蓝牙2. ...

  7. 几种无线充电解决方案特点及原理图

    几种无线充电解决方案特点及原理图 参考文章: (1)几种无线充电解决方案特点及原理图 (2)https://www.cnblogs.com/ydvely521/p/9535432.html 备忘一下.

  8. 高密度无线覆盖解决方案

    面对人员密集的场所,经常会出现智能终端高密度接入需求,这些高密度需求往往会成为无线网络​的梦魇,由于无线频率资源有限,面对干扰和在高密度无线终端的应用场景中会带来诸多的挑战. 高密度无线覆盖应该考虑的 ...

  9. 7.5W10W无线充电解决方案原理图

    7.5W.10W手机无线充电解决方案原理图 支持苹果.三星手机快速无线充电,支持5W无线充电,可以快速通过qi认证和其它各项认证.

  10. 银行网点WLAN无线认证解决方案

    随着银行业务的不多增加,营业网点的不断增加,新形势下竞争的加剧要求银行不断的提高服务水平来加强自己在市场中的竞争力.伴随着移动智能终端和便携式wifi设备的普及,在银行的分支网点部署WLAN无线网络, ...

最新文章

  1. [原]Python命令
  2. 请先设置tkk_物联卡apn设置机型大全!!物联卡连不上4G、网速慢?推荐你看这片文...
  3. Linux--date命令 date命令
  4. matlab实现脑电信号的相位同步分析,视听刺激脑电信号的相位同步分析
  5. matlab sunlink工具箱,FreeBSD handbook Unix Basics
  6. Comparable和Comparator
  7. (转)采访 | ETHNews 对 Vitalik Buterin 的独家专访
  8. 全国计算机三级嵌入式资料
  9. DH参数标定原理推导
  10. ColorPix——到目前为止最好用的屏幕取色器
  11. 安科瑞电力监控系统在上海平凉街道23街坊商办项目的应用
  12. 抛物线交点式公式_抛物线公式大全
  13. flask上传图片解决方案
  14. 在自己网页浏览器端通过websocket接入海康摄像头实时视频-方案二
  15. Ambari集群里操作时典型权限问题put: `/home/bigdata/1.txt‘: No such file or directory的解决方案(图文详解)
  16. 2014年服装设计短训班(周末班)招生简章-北京服装学院培训中心
  17. 系统学习——Bootstrap
  18. “云界十年”——第十届中国云计算大会举行
  19. mumu按键精灵_魂器学院,新手做的按键精灵脚本,基本每天的日常任务可做,mumu模拟器的...
  20. 复数的辐角的主值的计算公式

热门文章

  1. 百度wz竞价推广关键词排名的影响因素大全
  2. GPU共享内存小结---pycuda
  3. 神经网络的反向传播算法推导
  4. 2020强网杯Siri记录
  5. PDF如何旋转页面?这样旋转就好了
  6. 计算机模拟计算 电脑配置,Material Studio材料模拟计算的工作站配置方案
  7. 均值、方差、标准差、协方差详解及MATLAB实现
  8. 1345: 国际象棋
  9. 团体程序设计天梯赛 L1-059 敲笨钟
  10. Unimodal Array