《基于 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 中定义的虚拟设备,并自动选择相应的音频通路。

猜你喜欢

转载自blog.csdn.net/zmjames2000/article/details/88020891