我在进行音频处理时(虽然也可以是图像处理),有一个一维的数字数组。(它们恰好是表示音频样本的16位带符号整数,但是这个问题同样适用于不同大小的浮点数或整数。)
为了匹配具有不同频率的音频(例如将44.1kHz样本与22kHz样本混合),我需要拉伸或压缩值的数组以满足特定长度。
将数组减半很简单:放弃每个其他样本。
[231, 8143, 16341, 2000, -9352, ...] => [231, 16341, -9352, ...]
将数组宽度加倍略微复杂:在原地将每个条目加倍(或选择在相邻的“真实”样本之间执行一些插值)。
[231, 8143, 16341, 2000, -9352, ...] => [231, 4187, 8143, 12242, 16341, ...]
我想要的是一个高效、简单的算法,可以处理任何缩放因子,并(理想情况下)支持在此过程中执行某种插值。
我的用例恰好是使用Ruby数组,但我也可以接受大多数任何语言或伪代码的答案。