打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
[Audio]ALSA音频框架-简介
参考:
1. 奇小葩 https://blog.csdn.net/u012489236/article/details/98068122
2. 技术芯 https://blog.csdn.net/sinat_37817094/article/details/80490830
3. 哈迪斯_石头 https://blog.csdn.net/zqh6516336520/article/details/38226333
4. linux kernel:4.4

简介

Alsa是Advanced Linux Sound Architecture的缩写,即高级Linux声音架构,在Linux操作系统上提供了对音频和MIDI的支持。在Linux 2.6的内核版本后,Alsa目前已经成为了linux的主流音频体系结构。除了 alsa-driver,ALSA 包含在用户空间的 alsa-lib 函数库,具有更加友好的编程接口,并且完全兼容于 OSS,开发者可以通过这些高级 API 使用驱动,不必直接与内核驱动 API 进行交互。

ALSA 主要有如下特点:

  • 支持多种声卡设备、

  • 模块化的内核驱动程序 、

  • 支持 SMP(对称多处理)和多线程、

  • 提供应用开发函数库

  • 兼容OSS应用程序

系统框架

User空间:主要由Alsa Libray API对应用程序提供统一的API接口,各个APP应用程序只要调用 alsa-lib 提供的 API接口来实现放音、录音、控制。现在提供了两套基本的库,tinyalsa是一个简化的alsa-lib库,现在Android的系统中主要使用它。

ALSA CORE:alsa 核心层,向上提供逻辑设备(PCM/CTL/MIDI/TIMER/…)系统调用,向下驱动硬件设备(Machine/I2S/DMA/CODEC)

ASOC Core:是 ALSA 的标准框架,是 ALSA-driver 的核心部分,提供了各种音频设备驱动的通用方法和数据结构,为 Audio driver提供 ALSA Driver API

Hardware Driver:音频硬件设备驱动,由三大部分组成,分别是 Machine、Platform、Codec,提供的 ALSA Driver API 和相应音频设备的初始化及工作流程,实现具体的功能组件,这也是驱动开发人员需要具体实现的部分。

目录结构

.
├── ac97_bus.c
├── aoa
├── arm
├── atmel
├── core
├── drivers
├── firewire
├── hda
├── i2c
├── isa
├── last.c
├── mips
├── oss
├── parisc
├── pci
├── pcmcia
├── ppc
├── sh
├── soc
├── sound_core.c
├── sound_firmware.c
├── sparc
├── spi
├── synth
└── usb
  • ac97_bus.c -->实现AC97标准总线。

AC97 标准把音频设备中的数字部分和模拟部分分开, 并规定数字信号处理由CPU 来负责,或者采用专门的DSP 芯片; 而模拟部分, 即A/D、D/A 转换与Mix 混音操作, 则由CODEC 芯片(Coder2Decoder: 编码/解码器) 完成。 音频处理的流程如下:

①CODEC 采样音频数据, 把模拟信号转换成数字信号通过AC2link 和AC 控制单元传送给CPU 或DSP 处理。

②CPU 对数字信号处理后交由AC 控制单元通过AC2link 传输给CODEC 进行混音处理,再转换成模拟信号输出。其中AC 控制单元是AC97 CODEC 的控制器。AC2link 是AC97 标准定义的全双工的串行接口, 负责传输音频数据、寄存器控制命令和状态信息。

AC2link 由4 根串行总线和一个nRESET 信号线组成。串行总线分别是: 位时钟信号线(B IT_CL K ) , 帧同步信号线(SYNC ) , 数据输出(SDA TA _OU T ) 和数据输入(SDA TA _IN ) 信号线。它按照AC97 rev211 标准规定的AC2link数字串口接口协议[ 1 ]进行数据的传输。AC2link在B IT _CL K 的上升沿发送数据, 在下降沿接收数据, 实现全双工的数据传输。

  • last.c -->所有音频设备注册完成后打印ALSA devices List

下面是一个log示例:

[    1.814400] ALSA device list:
[    1.814432]   #0: rockchip,rt5640-codec
[    1.814440]   #1: RK-FPGA-I2S
  • sound_core.c -->注册音频核心层子系统

subsys_initcall(init_soundcore);
module_exit(cleanup_soundcore);
  • sound_firmware.c --> 加载音频驱动固件

EXPORT_SYMBOL(mod_firmware_load);

下面是目录及其说明

个人博客:https://www.letcos.top/ |

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
Android 音频系统
Linux ALSA 系统架构
ALSA Audio API 使用指南
ASoC - audio for embedded Linux systems
详解AC97和HD声卡前置音频接口的连接跳线_
你知道么?HD Audio与AC97究竟有何区别-音频设备应用-太平洋DIY频道
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服