Audio采样率相关计算


根据采样率计算buffer duration


audio buffer的时长和timestamp在知道采样率的情况下是可以直接计算的,这里假设采样率是44100,那么以微妙为单位,1秒等于1000000微妙,一个采样的时间计算出来就是22微妙,那么1024个采样就是22528,通常一个AAC frame通常就是1024个采样。

1 秒 采样率 = 1 个采样的时间长度 \frac{1秒}{采样率} = 1个采样的时间长度 采样率1=1个采样的时间长度
1 个采样的时长 × 1024 = 一个 b u f f e r 的时间长度 {1个采样的时长}\times {1024} = 一个buffer的时间长度 1个采样的时长×1024=一个buffer的时间长度

>>> 1000000/44100
22
>>> 22*1024
22528

整形计算的精度损失


如果以纳秒为单位,1秒等于1000000000纳秒 ,一个采样的时间就是22675纳秒,1024个采样就是23219200纳秒,换成微秒就是23219微秒,这样一个Audio buffer计算时间ts和duration的时候就损失691微妙,这样在经过一段时间之后,体现在av同步上就出问题了。

>>> 1000000000/44100
22675
>>> 22675*1024
23219200

📣 所以在计算的时候要特别小心使用的时间单位是否满足需求。


如果以纳秒为单位,1秒等于1000000000纳秒 ,一个采样的时间就是22675纳秒,1024个采样就是23219200纳秒,换成微秒就是23219微秒,这样一个Audio buffer计算时间ts和duration的时候就损失691微妙,这样在经过一段时间之后,体现在av同步上就出问题了。

>>> 1000000000/44100
22675
>>> 22675*1024
23219200

根据buffer大小计算audio的duration

如何计算一个buffer的采样数,因为:

s a m p l e s = b u f f e r 总字节数 每个 s a m p l e 的字节数 samples = \frac{buffer总字节数}{每个sample的字节数} samples=每个sample的字节数buffer总字节数

假设buffer大小是4096个字节,2声道16bit采样,一个采样就是4个字节,那么4096个字节就是1024个采样:

>>> 4096/4
1024

如果采样率是44100,那么这个buffer的时长就是23219.95微秒,这里1秒等于1000000.0微秒:

>>> 1000000.0/44100*1024
23219.954648526076

如果采样率是48000,那么这个buffer的时长就是21333.33微秒,这里1秒等于1000000.0微秒:

>>> 1000000.0/48000*1024
21333.333333333332
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值