ALSA 音频概念

假设我们将要使用一个立体声 16位 44.1k的音频流,单向(录音或者播放),那么我们就有

  • 立体声 = 2通道
  • 1个样本 16bits = 2bytes
  • 1个帧 代表 所有通道的一个样本。那么我们现在是双通道,所以
    • 1帧 = (通道数) * (样本大小bytes) = 2 * 2 = 4bytes
  • 为了能支持2 * 44.1k的采样率,系统必须支持如下的速度

    • bsp_rate = (通道数) * (1个样本长度) * (采样率) = 1帧 * 采样率 = 2 * 2 * 44.1k = 176400bytes/sec

    图我就不挪了 自己看原版吧

现在 alsa每秒都中断。那么我们每秒都需要176400byte数据准备好,才能供上一个 双通道 16 位 44.1k的音频流。

  • 如果半秒中断一次,那么每次终端就是 176400 / 2 = 88200 bytes
  • 如果100ms中断一次,那么我们就需要 176400 * (0.1 / 1)= 17640 位。

我们可以通过设置period size 来控制pcm中断的产生。
- 如果我们设置一个16位双通道44.1k的音频流 并且每次都有4410帧数据 -》 4 byte * 4410frams = 17640字节 》一次中断会需要17640字节的数据 =》 那么他就是100ms中断一次。

alsa会自己觉得实际的buffer_size 和period_size,根据请求的通道数,和他们其他的一些属性。

下面是一个问题的回答:

帧代表一个单位 1帧 = 通道数 * 样本长度
在你的情况下,1帧占据了 2 通道* 16位 = 4个字节

周期数就是在环形buffer里面的
buffer_size = 周期大小 * 周期数
周期大小(bytes) = 周期大小 * byte每帧
byte每帧 = 通道数 * 每个样本的byte数

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值