关于audio的古老的笔记3

定义回顾(Framework 层)

AudioTrack / AudioFlinger / HAL 中:

Framework 成员含义
mFrameSize单个 frame 占用的字节数(bytes) = 通道数 × 每个样本大小(sample size, 2 或 4 bytes)
mFrameCount总的 frame 数量(frames) = HAL buffer / AudioTrack buffer 中的 frame 数量
mBufferSize总字节数(bytes) = mFrameSize × mFrameCount

注意:这里的 frame 指的是“声道打包后的最小单位”,例如 stereo 16bit → frame = 2*2 bytes = 4 bytes


2️⃣ 对应到 period_size / period_count

我们在 ALSA / HAL 层说:


period_size = 每次 DMA 消耗的 frame 数 period_count = ring buffer 里有几个 period buffer_size = period_size × period_count

Framework 层的对应关系:

HAL / DriverFramework (AudioTrack / AudioFlinger)
period_size (frames)mPeriodSize(有些地方是 HAL 返回的 frame 数)
period_countperiodCount(Framework 很少直接用,但可以算成 mFrameCount / mPeriodSize)
buffer_size (frames)mFrameCount
buffer_size (bytes)mBufferSize = mFrameCount × mFrameSize

3️⃣ 举例(低延迟 track)

假设:

  • Stereo 16bit → 每帧 4 bytes

    
    

    mFrameSize = 4 bytes

  • HAL ring buffer: period_size = 240 frames, period_count = 2

    
    

    buffer_size = 240 * 2 = 480 frames

  • Framework 对应:


mFrameCount = 480 mBufferSize = 480 * 4 = 1920 bytes

  • 低延迟延迟:


latency = buffer_size / sample_rate = 480 / 48000 = 10 ms

✅ 对应完全匹配。


4️⃣ 小结公式


mFrameSize = bytes_per_sample * num_channels mFrameCount = total_frames_in_buffer = period_size * period_count mBufferSize = mFrameSize * mFrameCount = total_bytes

  • 如果 Framework 层只知道 mFrameCount / mFrameSize,就可以算出 HAL 的 period_count / period_size,反之亦然。

  • period_size / period_count 更接近硬件层,mFrameCount / mBufferSize 是 Framework 层抽象的总 buffer。


5️⃣ 🔥 工程小技巧

  1. 低延迟 track:mFrameCount 尽量小 → latency 低

  2. 普通 track:mFrameCount 大一点 → underrun 容错高

  3. Stereo 16bit


mFrameSize = 2ch * 2B = 4B mFrameCount = 480 → mBufferSize = 1920 bytes

  1. Mono 16bit


mFrameSize = 1ch * 2B = 2B mBufferSize = mFrameCount * 2

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值