不看这几篇好文,就别说自己了解物联网
近十年是移动智能设备迅速爆发的十年。随着智能手机、平板电脑、AI智能音响、车载智能设备的普及,“语音”已经成为了用户与智能设备交互的最重要方式之一。
例如,当您拿出手机拨打电话时,“内置mic”负责您声音的采集、“听筒”是对方声音输出的默认设备。当您家人也想和对方聊上几句时,您往往会打开Speaker让家人一起畅聊。当您接听的是商务会议时,您往往会插上“3.5mm耳机”或者“蓝牙耳机”,让自己拥有更加私密的通话氛围。
开车中的您正在沉浸在车载音乐BGM中时,如果手机导航软件需要提醒您“前方有违章拍照”时手机会怎么做呢?以Android手机为例,Android会把BGM的音量降低,然后将导航播报的声音和低音量的BGM混音后播放,当导航播报完毕后再将BGM恢复到原来的音量继续播放。这种无缝切换的设计不仅友好的提醒了您前方的路况信息,又让您持续的沉浸在BGM中无法自拔。
还有细心的朋友可能会发现,现在大型商场中,AI智能机器人越来越多了。您已经不需要在手机上打开某个APP、敲上想查的关键字去搜索您想找的商户来,您需要做的仅仅是开口说出您的问题,机器人即可给您满意的答案。
以上这些应用场景的实现都是由智能设备中的“音频中枢系统”来完成的。如果要用一句话来描述智能设备的“音频系统”的话,那么可以这么理解,就是“向下屏蔽和管理的错中复杂的声卡设备,向上为应用程序提供友好丰富的语音服务接口”。
嵌入式OS中需要管理的音频硬件codec错综复杂。功能上区分有仅支持录音的、仅支持播放的、同时支持录音播放/播放的codec、有支持音量调节的也有不支持的。接口上区分有I2S接口的,PCM接口的,AC97接口的。音频codec的厂商也有近百家,搭配的CPU平台也有几十种,排列组合之后就是上万种的“CPU + Audio Codec”的可能,且每一种排列组合在Linux内核中都已经有成熟的音频驱动程序支持,繁荣的硬件驱动生态是各种主流智能设备的OS无法摒弃Linux内核的重要原因。
图1: 典型音频硬件系统框架
丰富的应用生态也是Linux在嵌入式设备中经久不衰的重要原因。以Linux系统为例,Linux屏蔽了底层音频硬件的差异,在用户态通过alsa-lib为生态中的音频应用提供了统一的API接口供调用。
因此要快速开发一款经久不衰的智能语音产品,一个优秀的的音频系统框架是至关重要的。
ALSA是Advanced Linux Sound Architecture的缩写,即高级Linux音频架构,在Linux上提供了对音频和MIDI(较少使用)的支持。在Linux 2.6的内核版本后,AlSA目前已经成为了linux的主流音频体系结构。官方资料和源码下载参考:“ALSA-Project”。
ALSA包含内核设备驱动层ALSA-Driver以及用户态的ALSA-Lib两大模块。应用程序直接调用ALSA-Lib的标准接口即可完成对底层音频硬件的控制,直接访问内核接口是不被允许的。
ALSA有如下特点
图2: Linux ALSA音频系统框架
ALSA-Lib提供了对内核ALSA-Driver完整功能接口的支持,为应用提供了更加安全的API接口,同时也提供了丰富的音频组件,从而让应用程序的开发更加简单且高效。
官网给出的alsa-lib的API列表信息如下,
图3:ALSA官网对ALSA-Lib API的描述
下面提供了一些ALSA-Lib接口的简单描述,
ALSA-Lib还提供了丰富的PCM插件。插件可以自动处理诸如:命名设备、采样率转换、通道间的采样复制、写入文件、为多个输入/输出连接声卡/设备(不同步采样)、使用多通道声卡/设备等工作。插件的使用是通过ALSA-Lib的配置文件来进行,同时配置文件也规定了音频在ALSA-Lib中的处理链路。常用的音频插件包括,
ALSA-Lib提供了对内核ALSA Driver的完整支持,同时也有非常多的组件可供使用,但是如果尝试移到ALSA-Lib到AliOS Things中也面临着以下的问题,
Linux kernel中ALSA-Driver主要包含ALSA Core, ASOC Core, Hardware Driver三部分。
图4: Linux ALSA音频驱动代码结构
ALSA-Core是alsa-driver的核心层,向上提供音频设备(PCM/ Control/ MIDI/ Timer ...)的系统调用,向下驱动硬件设备。
ASOC-Core是建立在标准ALSA Core基础上,为了更好支持嵌入式系统和应用于移动设备的音频Codec的一套软件体系。在移动设备中, 为了更好的提供ALSA支持, 在核心层的基础上出现了ASOC(ALSA System on Chip)层,主要由如下三部分组成,
处于ALSA Driver框架的最底层,具体的代码逻辑也是驱动开发人员需要实现的部分。Linux ALSA Driver中将Audio硬件抽象成了platform, codec, machine三大块,每个模块分工清晰。
AliOS Things的定位是轻量级的物联网操作系统,作为后起之秀,和众多物联网操作系统一样,很难获得广大硬件厂商的软件支持,同时在应用生态上也无法与成熟的Linux相媲美。所以我们不妨大胆的去尝试,积极拥抱已有的Linux硬件驱动生态和应用生态将会是AliOS Things快速获取用户认可的重要选择。
综上AliOS Things的音频系统框架主要出于以下三点考虑:
图5: AliOS Things音频框架设计
由图可见,AliOS Things音频系统包括音频驱动框架、音频服务框架、音频应用组件三大部分。
AliOS Things音频驱动框架设计的2大目标是,
音频服务框架(Audio Service)是AliOS Things音频系统的核心模块,包括应用测Sound PCM/Control接口设计、音量管理、播放焦点管理、音效管理、dsnoop录音分发模块、plugin管理模块,Audio Card Manage、PCM/Control Interface模块等。其中plugin管理模块涉及的插件有"soft volume", "rate", "dmix"和 "sona/dts"等。
目前AliOS Things上已经适配好的音频应用组件有"FFMPEG & SDL", "wav播放器",uVoice等,例如智能音响上常用的url播放器, tts播放器, 本地提示音(mp3, aac ...)播放器,蓝牙A2DP音频等。已经初步具备了云端钉一体的智能语音能力。
目前AliOS Things的音频驱动框架还处于初级阶段,距离Android上非常完整的、优秀的音频服务体验还有很大的差距。好在AliOS Things也算是在音频应用领域迈出了坚实的一步,未来还有很多工作需要去尝试。
希望广大的HaaS开发者们积极给我们提意见,一起为AliOS Things的音频框架出谋划策,一起拼一起赢。
漫谈农业物联网与互联网技术的结合
传感器,物联网时代的智能硬件数字化入口
如何快速搭建一个像“天猫精灵”的智能语音助手?
物联网之IP Camera解决方案简介
从语音交互历史浅看它是否会是物联网行业的一个爆点?
带你走进多媒体世界:视频文件是怎么播放出来的
物联网云端一体AI方案的探索
物联网设备连接的下一个引爆点:4G Cat.1
物联网教育现状和前景
一文看懂蓝牙在物联网中的应用场景
下一个智能硬件爆品是什么?
华为、阿里、小米都在用的全屋智能技术
为什么物联网领域使用Rust的项目越来越多?
物联网中也能使用区块链技术?面向IoT的区块链基础架构IoTeX
开源硬件的前世今生
物联网碎片化的一些思考
边缘计算在物联网行业的应用
物联网太难 ? 不妨试试用Python来开发
5G会给物联网行业带来哪些变化?
必须要了解的物联网安全知识
ARMv9能给ARM带来新一轮腾飞吗?(安全篇)
ARMv9能给ARM带来新一轮腾飞吗?(人工智能篇)
国产物联网操作系统的出路在哪里?
RISC-V架构能否引领物联网时代?
物联网到底为什么这么火?
谁才是物联网连接技术中的王者?
物联网平台大量出现能否将行业带入爆发式发展
脚本语言适合物联网开发吗
从“嵌入式”到“物联网”的四大转变
物联网发展新趋势