android audio framework

发布时间:2024年01月23日

在这里插入图片描述
在这里插入图片描述

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的一套软件体系。
CodecCoder/Decoder
I2S/PCM/AC97Codec与CPU间音频的通信协议/接口/总线
DAIDigital Audio Interface 其实就是I2S/PCM/AC97
DSPDigital Signal Processor
PCMPulse Code Modulation 一种从音频模拟信号转换成数字信号的技术,区别于PCM音频通信协议
SSISerial Sound Interface
DAPMDynamic 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:
  1. 内核通知应用的一种方式
  2. 目前使用socket进行内核和应用的通信
  3. uevent就是一个特殊格式的字符串
  4. 内核发送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 (五)接电话与听音乐

文章来源:https://blog.csdn.net/imyfriend/article/details/132719355
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。