Java - 下采样wav音频文件

Jea*_*lin 6 java audio wav downsampling

嗨我需要将wav音频文件的采样率从44.1kHz下采样到8kHz.我必须使用字节数组手动完成所有工作......这是出于学术目的.

我目前正在使用2个类,Sink和Source来弹出和推送字节数组.一切顺利,直到我到达需要使用线性插值对数据块进行下采样的部分.

由于我从44100下采样到8000 Hz,如何插入包含128 000 000字节的字节数组?现在我正在弹出5,6或7个字节,具体取决于i%2 == 0,i%2 == 1和i%80 == 0并将这些5,6或7个字节的平均值推入新文件.

结果确实是一个比原始音频文件更小的音频文件,但它不能在Windows媒体播放器上播放(说在阅读文件时出错)并且虽然我能听到噪音背后的正确轨道,但仍有很多噪音.

因此,总而言之,我需要有关线性插值部分的帮助.提前致谢.

Joe*_*oey 7

我认为您不应该使用这些样本的平均值,因为这将是中值滤波器,而不是精确的下采样.只需使用每个第5/6/7个样本并将其写入新文件.

这可能会有一些混叠伪像,但可能总体上是可识别的.

另一个更复杂的解决方案,但可能是质量更好的结果,首先是使用FFT或DFT将样本转换为频率分布,然后使用适当的采样率将其转换回来.已经有一段时间了,因为我做了这样的事情,但它绝对可行.不过,您可能需要摆弄一下才能使其正常工作.

此外,当没有采用整个阵列的FT而是分段时你会遇到段边界为0的问题.几年前,当我玩这些东西时,我没有想出一个可行的解决方案(因为它也可以生成工件)但如果你读了正确的书,可能还有一本:-)

至于WMP抱怨文件:你确实修改了你写的标题,对吧?

  • 哇!非常感谢"只需使用每个第5/6/7个样本并将其写入新文件"就是纠正了我的整个问题!不敢相信我花了好几个小时就花了你2分钟就写完了!再次感谢! (2认同)