linux ALSA
ALSA表示高级Linux声音体系结构(Advanced Linux Sound Architecture)。它由一系列内核驱动,应用程序编译接口(API)以及支持Linux下声音的实用程序组成。
- 最上层是音频应用和声卡服务;
- ALSA Library:alsa 提高用户空间访问声卡设备标准api
- ALSA Layer:ALSA 驱动层。ALSA 又可以抽象为ASoc 层。
- ASoc Layer:和具体平台相关。主要包括音频接口和控制接口两大类(可以简单理解为音频数据流和控制,其他控制也包含对电压管理的支持(DAPM))
术语
名称 | 解释 | ||
---|---|---|---|
样本长度(sample) | 样本是记录音频数据最基本的单位,常见的有8位和16位。 | ||
通道数(channel) | 该参数为1表示单声道,2则是立体声 | ||
桢(frame) | 桢记录了一个声音单元,其长度为样本长度与通道数的乘积 | ||
采样率(rate) | 每秒钟采样次数,该次数是针对桢而言 | ||
周期(period) | 音频设备一次处理所需要的桢数,对于音频设备的数据访问以及音频数据的存储,都是以此为单位。 | ||
ASoC–ALSA System on Chip | 是建立在标准ALSA驱动层上,为了更好地支持嵌入式处理器和移动设备中的音频Codec的一套软件体系。 | ||
Codec | Coder/Decoder | ||
I2S/PCM/AC97 | Codec与CPU间音频的通信协议/接口/总线 | ||
DAI | Digital Audio Interface 其实就是I2S/PCM/AC97 | ||
DSP | Digital Signal Processor | ||
PCM | Pulse Code Modulation 一种从音频模拟信号转换成数字信号的技术,区别于PCM音频通信协议 | ||
SSI | Serial Sound Interface | ||
DAPM | Dynamic Audio Power Management | ||
Mixer | 混音器,将来自不同通道的几种音频模拟信号混合成一种模拟信号 | ||
音频设备
英文名 | 中文名 |
---|---|
EARPIECE | 听筒 |
Headset | 耳机(带mic) |
Headphone | 耳机,不带mic |
Speaker | 扬声器 |
Microphone | 麦克风 |
mono | 单声道 |
stereo | 立体声 |
音频播放流程
ALSA-Probe的流程
Tinyalsa pcm_open的调用流程
Ref
Linux音频ASoC架构驱动解析
ALSA驱动框架分析
Android 音频系统
Audio基本概念及处理流程
Linux ALSA音频驱动之一:框架概述
Linux ALSA驱动之二:声卡的创建流程
Linux ALSA驱动之三:PCM创建流程源码分析(基于Linux 5.18)
Linux ALSA驱动之四:Control设备创建流程源码分析(5.18)
Linux ALSA声卡驱动之三:PCM设备的创建 *
Android Audio学习
Linux ALSA 音频系统:物理链路篇
Linux Audio
Linux 音频驱动(一) ASoC音频框架简介
Linux 音频驱动(二) ASoC音频驱动之Platform驱动
Linux 音频驱动(三) ASoC音频驱动之Codec驱动
Linux 音频驱动(四) ASoC音频驱动之Machine驱动
Linux 音频驱动(五) ALSA音频驱动之PCM逻辑设备
Linux 音频驱动(六) ALSA音频驱动之PCM Write数据传递过程
kernel-sound
Android
Android耳机拔插事件流程
对于Headset的插入检测,一般通过jack耳机插座来完成,大概原理是使用带检测机构的耳机插座,将检测脚连到GPIO中断上,耳机插入时,是的检测脚的电平变化,引起中断。通过GPIO的值判断耳机是插入还是拔出。
在Android系统中,有线耳机分两种:
- 一种带mic,一种不带mic,带mic的耳机被称为Headset,
- 不带mic的耳机被称为HeadPhone
Uevent
目前使用的耳机插拔事件使用的是UEvent
。但是也可以使用InputEvent
,这种设置在frameworks/base/core/res/res/values/config.xml
中,设置项为
<boolname="config_useDevInputEventForAudioJack">false</bool>
值为false
,所以目前kernel是用Uevent来通知应用层耳机插拔的。
什么是Uevent:
- 内核通知应用的一种方式
- 目前使用socket进行内核和应用的通信
- uevent就是一个特殊格式的字符串
- 内核发送uevent使用kobject_uevent_env,它还有一个wrapper是kobject_uevent,这个函数使用的比较多
Ref
Android耳机拔插事件流程
Android HDMI audio设备插拔事件
耳机插拔流程 *
Android 耳机插拔流程源码跟踪浅析
CarAudioService
Android汽车服务篇(四) CarAudioService
Android CarAudioFocus详解(一)
car
Android10.0CarAudioZone(一)
audio
Android9.0CarAudio分析之一启动过程
Android9.0CarAudio分析之而AUDIO_DEVICE_OUT_BUS
音频系统
Android 音频
Android-Audio
音频输出设备是如何决定的
Ref
Android9.0AudioPolicy之audio_policy_configuration.xml解析(一)
Android9.0AudioPolicy之audio_policy_configuration.xml解析(二)
配置音频政策 google
Android音频框架之一 详解audioPolicy流程及HAL驱动加载与配置 *
Android音频驱动学习(一) Audio HAL *
Qualcomm Audio HAL 音频通路设置 *
Android音频框架之一 详解audioPolicy流程及HAL驱动加载与配置
Android Audio音频系统之深入浅出
蓝牙电话(hfp)与Android audio hal的关联
android – 蓝牙 bluetooth (五)接电话与听音乐