gpt4 book ai didi

audio - 交错立体线性插值

转载 作者:行者123 更新时间:2023-12-03 02:07:33 25 4
gpt4 key购买 nike

我正在实现音频数据的实时线性插值,它存储在交错的音频缓冲区中。音频文件可以是单声道或多声道。在单声道音频文件的情况下,我插值如下:

f_dex = offset + ((position / oldlength) * (newlength * b_channelcount));
i_dex = trunc(f_dex); // get truncated index
fraction = f_dex - i_dex; // calculate fraction value for interpolation
b_read = (b_sample[i_dex] + fraction * (b_sample[i_dex + b_channelcount] - b_sample[i_dex]));
outsample_left += b_read;
outsample_right += b_read;

这听起来很棒,我没有任何问题。但是,当我要读取多 channel 文件时,我必须更正计算出的读取位置,以确保它在相应帧中的第一个样本上,例如:
f_dex = offset + ((position / oldlength) * (newlength * b_channelcount));
if ((long)trunc(f_dex) % 2) {
f_dex -= 1.0;
}
i_dex = trunc(f_dex); // get truncated index
fraction = f_dex - i_dex; // calculate fraction value for interpolation
outsample_left += (b_sample[i_dex] + fraction * (b_sample[i_dex + b_channelcount] - b_sample[i_dex])) * w_read;
outsample_right += (b_sample[i_dex + 1] + fraction * (b_sample[(i_dex + 1) + b_channelcount] - b_sample[i_dex + 1])) * w_read;

现在这引入了一些数字噪声,我无法真正解释原因。是否有任何其他/更好的方法可以将实时线性插值应用于交错立体声文件?

最佳答案

我对你的变量名有点困惑,position , oldlengthoutsample_left/outsample_right似乎是为了输出而 newlengthoffset来自输入,b_sample ?

我认为您的问题包括b_channelcountf_dex 的计算中.试试吧

f_dex = offset + ((position / oldlength) * newlength);

你可以省略 % 2检查和调整。这种调整没有达到你的预期。

附录 11/7:
我错过了一些东西,您还需要调整您对 i_dex 的使用,正如我设置的 f_dex在这里,它将每个 channel 的整个 block 计算为 1。在哪里之前有 b_sample[i_dex] , 而是使用 b_sample[i_dex*b_channelcount] ;这将使您进入该 block 的第一个样本(如果是立体声,则为左侧)。同样,您可以使用 b_sample[i_dex*b_channelcount + 1]如果有一个右声道, b_sample[(i_dex+1)*b_channelcount]对于下一个 block 的第一个样本进行插值等。

关于audio - 交错立体线性插值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26766146/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com