Java-下采样WAV音频文件
嗨,我需要将wav音频文件的采样率从44.1kHz下采样到8kHz。我必须使用字节数组手动完成所有工作…这是出于学术目的。
我目前正在使用2个类(接收器和源)来弹出和推送字节数组。一切顺利,直到到达需要使用线性插值对数据块进行下采样的部分为止。
由于我是从44100降采样到8000 Hz,因此我该如何插入一个包含约128000000字节的字节数组?现在,我弹出5、6或7个字节,具体取决于i%2 ==
0,i%2 == 1和i%80 == 0,并将这5、6或7个字节的平均值推入新文件。
结果确实是一个比原始音频文件小的音频文件,但无法在Windows Media
Player上播放(说读取文件时出错),并且尽管我能听到正确的声音,但噪音很大。
因此,总而言之,我需要有关线性插值部分的帮助。提前致谢。
回答:
我认为您不应该使用这些样本的平均值,因为那将是一个中值滤波器,而不是精确的下采样。只需使用每5th / 6th / 7th个样本并将其写入新文件即可。
那可能会有一些混淆现象,但总体上是可以识别的。
另一个更复杂的解决方案,但从质量角度来讲可能会获得更好的结果,这是首先使用FFT或DFT将您的样本转换为频率分布,然后以适当的采样率将其转换回。自从我做了这样的事情已经有一段时间了,但这绝对是可行的。不过,您可能需要花些时间才能使其正常工作。
另外,当不进行完整数组的FT运算时,而是在分段中,您会遇到分段边界为0的问题。几年前,当我玩这些东西时,我并没有为此提出一个可行的解决方案(因为也会产生伪像),但是如果您阅读正确的书,可能会有一种伪像:-)
至于WMP抱怨文件:您 确实 修改了相应编写的标头,对吗?
以上是 Java-下采样WAV音频文件 的全部内容, 来源链接: utcz.com/qa/407034.html