一种FIFO的采样率调节方法

一种FIFO的采样率调节方法

Sample rate adjustment with FIFO.

挑战

有时候你采样速率和需要的音频播放速率比例不整, 比如51.2k采样, 11.025k播放。你可以用重采样解决,但是这里有一个极低计算量的低质量重采样方法。

原理

输入采样率 Fi,输出采样率Fo,假设两者非常接近,比如一个是
51200 / 4 = 12800,另一个是11025。
输入点间隔时间 Ti = 1 / Fi;
输出点间隔时间 To = 1 / Fo;

当To>Ti时,经过x个采样点, x To >= (x+1) Ti,则需要在输出添加一个点,这个可以通过读出最后一个点,但是不弹出缓存,也就是下一个点再重复一遍。

当To<Ti时,经过x个采样点, x To <= (x-1) Ti,则需要在输入减少一个点,这个可以通过忽略下一个采样点写入实现。

编程判断

假设你需要万分之一的准确度,计算每个采样点的10000倍误差:
int dT10000 = 10000 * (To - Ti)
如果dT10000>0 就在输出累积,反之在输入累积。 预先定义
int DT=0;
每次读出或写入时,计算

// 对dT1000>0在读出部分做
DT +=dT10000;
If(DT > 10000)
{
	DT -=10000;
	读出不动指针;
}

//对dT10000<0在输入部分做
DT +=dT10000;
If(DT < 10000)
{
	DT +=10000;
	忽略输入一次;
}
···
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值