C 均衡后如何避免音频采样16位剪辑?
我有来自ffmpeg的样本,通常是16位样本(短类型),我使用了iir带通滤波器和dbGain,如前所述,滤波后有时会出现短类型溢出,当计算出的样本值从32767/-32767流出时,结果是一些噪声,这是任何逃脱音频pcm样本剪辑的方法。有什么办法吗 我在谷歌上搜索过,但没有找到任何有效的例子 更新 当我将传递函数计算结果转换为整数并检查溢出时,仍然会出现噪声::C 均衡后如何避免音频采样16位剪辑?,c,audio,ffmpeg,pcm,C,Audio,Ffmpeg,Pcm,我有来自ffmpeg的样本,通常是16位样本(短类型),我使用了iir带通滤波器和dbGain,如前所述,滤波后有时会出现短类型溢出,当计算出的样本值从32767/-32767流出时,结果是一些噪声,这是任何逃脱音频pcm样本剪辑的方法。有什么办法吗 我在谷歌上搜索过,但没有找到任何有效的例子 更新 当我将传递函数计算结果转换为整数并检查溢出时,仍然会出现噪声:: int result = A1 * ((int) Rx) + A2 * ((int) Rxx) + A3 * ((int) Rxxx
int result = A1 * ((int) Rx) + A2 * ((int) Rxx) + A3 * ((int) Rxxx)
- B1 * ((int) Ryy) - B2 * ((int) Ryyy);
if (result > 32767)
result = 32767;
if (result < -32700)
result = -32700;
y = (short) result;
int结果=A1*((int)Rx)+A2*((int)Rxx)+A3*((int)Rxxx)
-B1*((国际)Ryy)-B2*((国际)Ryy);
如果(结果>32767)
结果=32767;
如果(结果<-32700)
结果=-32700;
y=(短)结果;
16位PCM样本必须在[-32768..+32767]范围内。如果你对输入信号应用数学(在你的例子中是双二次滤波器),输出不能保证保持在范围内,这是在你应用正增益的情况下不可避免的结果
由于命中范围边界是这种处理的自然副作用,因此您应该使用以下方法之一来处理它(列表不应该满):
- 确保您的输入信号足够安静和/或将值右移几位,为输出上的大值提供净空
- 对输出信号使用更高的位,例如24位PCM
- 在超出PCM采样范围时,使用浮点PCM作为输出信号以减少精度损失