DMA技术与音频数据的存储和播放

基本概念

  • 采样率: 每秒采集的采样点次数。如480000HZ, 就是我们常见的48KHZ
  • 采样点(Sample):每一个采样点代表一个时间点的声音幅度值。对于立体声,每个采样点包含了两个声道(左声道,右声道)的数据。
  • 帧:一帧就是一个时刻采集的数据,如果音频是立体声则会产生2个采样点,如果是更复杂的比如5.1,则会产生更多的采样点。例如PCM数据是48KHZ,16bit的, 立体声, 则一秒的PCM数据有48KHZ帧。每一帧会有两个采样点, 每个采样点用16bit存储着。
  • 声道:对于立体声有两个声道,左声道和右声道。

比如,我们有个PCM数据,是 48KHZ, 立体声, 16bit 。

那么则代表, 这段数据每一秒,将产生48K帧, 每一帧,包含两个声道的数据,每一个声道的数据,用16bit表示。

一帧数据, 是16 X 2 = 32 bit = 4字节。

音频数据每一帧存储规则

上述已经说明了,一帧数据,就是一个采样点上的数据。接下来我们还是以立体声为例子,讲讲一帧的音频数据是怎么存储的。

这一帧数据代表多长时间的音频呢?

其实很简单, 1S/48000 = 21微秒。

所以一帧大约能播放21微秒的时长,非常非常短。

音频帧与帧的存储规则

音频帧与帧的存储规则就相当简单了,就是按照顺序来即可。 只不过每帧的内部,是按照声道来排布的。也就是L1, R1, L2, R2, L3, R3...这种规则来存储。

因为音频的数据存在这种规则,所以在硬件播放这些数据的时候,只需要根据固定的地址间隔来取内存,就很轻松的将左右声道分来来取了。 两者可以做到同时播放。

硬件对于帧数据的播放流程

DMA技术

讲到音频播放,底层是离不开DMA技术的。我们首先讲讲这个DMA技术,这套技术不止用于音频播放。

DMA全称为 Direct Memory Access, 直接内存访问。 是一种硬件技术,允许外部设备,如音视频硬件, 磁盘控制器等,绕过CPU,直接与计算机运行时内存(RAM)进行数据读写。它的核心是解放CPU,避免CPU被频繁的数据搬运占用任务。

Android的音视频播放高度依赖DMA技术,其核心价值在于减轻CPU负载,降低延迟,提升效能。

DMA技术除了用在音视频播放外,还广泛使用于:

  • 显卡从内存读取纹理数据
  • 硬盘读写大文件
  • 网络设备收发数据包
  • 摄像头传输图像数据

音频怎么写进去的

Android中音频的写入,依赖DMA技术, AudioTrack会将最终已经处理完的PCM数据,

  • 通过调用AudioFlinger的代码来配置内存缓冲区地址,
  • 音频外设寄存器地址也配置到DMA中
  • 开启循环模式,支持扬声器连续播放。
  • 其中,DMA取数据的时候,在用户缓冲区存在双缓冲,来避免播放中断。

用户开发播放器处理的是哪一块

我们开发播放器的时候肯定不会用到这么深的技术,在Android的体系内,最深只要达到AudioFlinger即可。

音频开发中,主要掌握的就是上方环节中,对音频数据的采集,处理, 编码,传输等环节。这些内容几乎涵盖行业内应用层99%的需求。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

2579所以然

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值