移动操作系统音频单元设计

时间:2022-08-24 09:30:16

移动操作系统音频单元设计

摘 要: 介绍一种移动操作系统音频模块设计实现方法。该音频模块采用开源项目PulseAudio作为音频处理单元,用ALSA与底层硬件交互,由AudioManager提供API供上层应用调用,实现操作系统的音频通路切换与音量调节等功能。文章首先介绍音频系统架构,然后从音频控制单元AudioManager出发,详细介绍系统音频分类以及AudioManager提供给上层调用的方法,最后介绍音频通路与音量调节的实现。

关键词: 移动操作系统; 音频模块; AudioManager; 通路切换; 音量调节

中图分类号:TP316 文献标志码:A 文章编号:1006-8228(2017)02-01-04

0 引言

音频系统是移动操作系统不可或缺的子系统之一,它负责处理所有与声音相关的信息,随着移动操作系统功能设计的越来越全面和人性化,对音频的精准控制提出了更高的要求,例如不同情况下不同的输出方式以及不同模式下的音量调节互不影响。这就对音频系统的功能提出了更高的要求。android系统的音频子系统是一款成熟的音频系统[1-3],谷歌公司为它的音频系统设计了一套全局音频管理器――AudioFinger,并精简了ALSA来与硬件交互。本文所涉及的移动操作系统采用开源项目pulseaudio作为音频处理单元,并采用ALSA与硬件交互[4-5]。

PulseAudio[6]是一个跨平台的,可通过网络工作的声音服务,它的主要特点包括[7]:

⑴ 可对每一个应用程序进行音量控制;

⑵ 可扩展的插件与支持可装载模块架构;

⑶ 兼容性许多流行的音频应用程序;

⑷ 支持多重音源和多重输出;

⑸ 低延时操作和支持延迟测量;

⑹ 一个对处理器资源效率零拷贝内存架构;

⑺ 能够发现本地网络上使用PulseAudio的其他计算机并通过其扬声器直接播放声音;

⑻ 能够改变一个应用程序的声音输出设备,就算这个应用程序在播放声音(程序不需要支持这个特性,而事实上,程序甚至没有意识到改变);

⑼ в薪疟竟δ艿拿令行界面;

⑽ 一个功能完善且带有命令行重新配置功能的守护进程;

⑾ 内置采样转换和重采样功能;

⑿ 能够合并多块声卡成一个声卡;

⒀ 能够同步播放多个音频流;

⒁ 动态检测蓝牙音频设备;

⒂ 使全系统均衡的能力。

1 系统架构

安卓音频系统架构从上到下可以分为5层,从上到下分别:Application、Framework、Libraries、HAL、Linux Kernel。Application为运行在最上层的各种应用,Framework是对Libraries的封装,为上层Application的开发提供标准接口,Libraries是整个系统的核心,负责完成音频的控制与处理。本文涉及的音频系统在层级上与android系统大同小异,同样分为Application、Framework、Libraries、HAL、Linux Kernel这几层,但在Framework、Libraries拥有不同的实现方式,具体架构见图1。

⑴ Framework

Framework层提供两个模块,分别为AudioManager模块与Ngfd模块。

AudioManager模块的设计思想源于android系统的AudioManager类,本系统的AudioManager模块提供了一系列与音量控制相关的方法供上层应用调用,以方便应用程序控制音量。AudioManager又分为三个模块:Volume、Route、Profile,这三个模块分别负责音量调节、通路以及策略。AudioManager模块最终都是通过调用PulseAudio接口来实现对音量的控制。Ngfd模块提供与振动相关的接口供上层应用调用。

⑵ Libraries

Libraries层提供两个模块,分别为PulseAudio和Profiled,其中PulseAudio为开源项目,提供音频控制相关方法,PulseAudio具体实现方式本文不做探究,Profiled负责提供音频策略。

2 AndroidManager方法说明

移动操作系统一般具有多种不同类型的音频,例如:铃声、通知、闹钟、短消息等等,所以这需求音频系统能够对不同类型的音频分别进行设置,为此,本文将音频分为如下7种类型(role),放在一个枚举类型中:

AudioManager控制整个音频系统由一系列的方法来完成,每种方法具有自己独特的功能,在本文所设计的音频系统中,将方法归结为16种,每种方法的介绍与实现如下。

⑴ Audio Role

AM_ROLE_TYPE getActiveRole()――返回当前活动的Role,其取值是AM_ROLE_TYPE枚举类型。

⑵ 音量控制

int getVolume(AM_ROLE_TYPE role)――返回指定Role的当前音量,其取值范围为0~100。输入参数为Role,其取值AM_ROLE_TYPE枚举类型。

void setVolume(AM_ROLE_TYPE role, int volume)――设置指定Role的当前音量,其取值范围为0~100。

⑶ 音量调节

void adjustVolume(AM_ROLE_TYPE role, AM_ADJUST_DIRECTION direction)――侧键设置音量的接口,其输入参数除了Role外,还有一个用于指导操作的参数direction,其取值为ADJUST_LOWER,ADJUST_RAISE和ADJUST_SAME三者之一。目前系统的步长音量分为12级。

本文所述音频系统借鉴android系统的分层架构,采用PulseAudio作为音频处理单元,完成了音频策略制定、情景模式切换以及音量调节功能,并提供API供上层开发人员调用。本音频系统划分了多种音频类型,并制定了多种音频通路,能满足操作系统多样化的音频调节功能需求,但由于有时需要快速地在静音、振动与正常三种模式之间切换,所以本音频系统加入了情景模式切换功能,用户能更便捷的在这三种模式中切换。

参考文献(References):

[1] 杨丰盛.Android应用开发揭秘[M].机械工业出版社,2010.

[2] 王波涛.移动多媒体技术介绍[M].机械工业出版社,2011.

[3] 韩超,梁泉.Android系统级深入开发――移植与调试[M].电

子工业出版社,2010.

[4] 姚昱F,刘卫国.Android的架构与应用开发研究[J].计算机系

统应用,2008.11:24,110-112

[5] 李杨,冯刚,李亮,罗拥华.基于Android的多媒体应用开发与

研究[J].计算机与现代化,2011.4:149-152

[6] https:///index.php/PulseAudio,archlinux

[7] http:///p/pulseaudio,开源中国,2009.

上一篇:湖南省双峰县中小学教师培训需求调研报告 下一篇:浅谈数学有序思维训练