《基于 ALSA 的 Android 音频系统设计与实现--- ---林东海》节选

come from : https://blog.csdn.net/ljl86400/article/details/80107988

  ALSA 包括驱动包 alsa-driver,开发包 alsa-libs,开发包插件 alsa-lib plugins,设置管理工具包 alsa-utils,其它声音相关处理小程序包 alsa-tools,特殊音频固件支持包 alsa-firmware,OSS 接口兼容模拟层工具 alsa-oss 共 7 个子项目,其中只有驱动包是必须的。

alsa-libs 指用户空间的函数库,提供给应用程序使用,应用程序应包括头文件 asoundlib.h,并使用共享库 libasound.so。

目前 ALSA 内核提供给用户空间的接口有:

1】信息接口(proc/asound):ALSA 使用/proc/asound 目录下的文件保存设备信息并且实现一些控制。

2】控制接口(dev/snd/controlCX):提供灵活的方式管理注册的声卡和对存在的声卡进行查询。

3】混音器接口(dev/snd/mixerCXDX):控制发送信号和控制声音大小的声卡上的设备。

4】PCM 接口(dev/snd/pcmCXDX):提供管理数字音频的录音和回放,pcmCXDXc 对应录音设备,pcmCXDXp 对应回放设备。

5】原始 MIDI 接口(dev/snd/midiCXDX):支持 MIDI(Musical Instrument DigitalInterface,音乐设备数字化接口),一种标准电子音乐指令集。这些 API 提供访问声卡上的 MIDI 总线。这些原始接口直接工作在 MIDI 事件上,程序员只需管理协议和时间。

6】音序器接口(dev/snd/seq):一个比原始 MIDI 接口高级的 MIDI 编程和声音同步高层接口。它可以处理很多 MIDI 协议和定时器。

7】定时器接口(dev/snd/timer):为支持声音的同步事件提供访问声卡上的定时器。

 

基于 ALSA 的 Android 音频系统的实现主要需要完成以下几方面的工作:

1】获取 ALSA 相关源码,主要有 ALSA 库 alsa-lib,ALSA 工具 alsa-utils,Audio 硬 件 抽 象 层 alsa_sound , 这 三 部 分 需 要 分 别 放 到 以 下 指 定 位 置external/alsa-lib,external/alsa-utils,hardware/alsa_sound。

2】修改 BoardConfig.mk,如下:

BOARD_USES_GENERIC_AUDIO := false

 

BOARD_USES_ALSA_AUDIO := true

BUILD_WITH_ALSA_UTILS := true

通过以上设置,音频系统便被切换成基于 ALSA 实现。

3】移植 Audio 硬件抽象层。Audio 硬件抽象层是 AudioFlinger 和 Audio 驱动的接口,基于 ALSA 的具体

实现位于 hardware/alsa_sound 文件夹中,该部分需要根据特定平台进行修改。

4】实现 Audio 驱动。Audio 驱动采用 ASoC 架构。ASoC 中,Audio 驱动主要包含 codec 驱动、platform 驱动和 machine 驱动,实现这些驱动是本次设计重要的工作,而实现codec 驱动则是重中之重。

5】配置 asound.conf。Asound.conf 是 ALSA 的配置文件,位于 system/etc 下。Asound.conf 的配置需要根据底层 Audio 驱动注册的信息来完成,配置好 asound.conf 之后上层便可打开 asound.conf 中定义的虚拟设备,并自动选择相应的音频通路。

Android凭借其开源,良好的用户体验,高性价比,庞大的应用程序等优势迅速发展起来并保持强劲的发展势头。如今Android智能手机、Android平板电脑等移动产品已走入人们的日常生活,成为人们通讯、娱乐的重要工具。本设计以malata采用RK2918方案的Android平板电脑项目为背景,主要任务是设计实现Android平板电脑的音频系统,为广大平板用户提供良好的音频体验。 ALSA(Advanced Linux Sound Architecture,高级Linux声音架构)在Linux操作系统上提供了音频和MIDI(Musical Instrument Digital Interface,音乐设备数字化接口)的支持。它的主要特性包括:高效地支持从消费类入门级声卡到专业级音频设备所有类型的音频接口,完全模块化的设计,支持对称多处理和线程安全,对OSS(Open Sound System,开放声音系统)的向后兼容,以及提供了用户空间的alsa-lib库来简化应用程序的开发[1]。基于ALSA音频系统能够很好的适应硬件的多样性,因此Android设备厂商能够更灵活地根据不同需求选择不同的音频编解码芯片。ALC5625是一款高度集成低功耗高保真的带I2S/PCM接口并具有多路输入输出的音频编解码器,可满足本次设计的各项需求。 基于ALSA的Andorid音频系统拥有一个标准和健全的架构,自上而下由Audio应用程序、Audio Java框架层、Audio本地框架层、AudioFlinger、Audio硬件抽象层、alsa-lib和底层Audio驱动几个部分组成。本文分析音频系统架构的各个层次,并着重阐述ALSAAndroid音频系统中的应用以及Audio驱动的详细实现
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值