6

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

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

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

结果确实是一个比原始文件更小的音频文件,但它无法在 windows 媒体播放器上播放(说读取文件时出错)并且有很多噪音,尽管我可以听到噪音背后的正确音轨。

所以,总而言之,我需要关于线性插值部分的帮助。提前致谢。

4

1 回答 1

7

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

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

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

同样,当不获取完整数组的 FT 而是在分段中时,您会遇到分段边界为 0 的问题。几年前,当我玩这些东西时,我没有想出一个可行的解决方案(因为它也会生成工件)但如果您阅读了正确的书籍,可能会有一个:-)

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

于 2009-10-16T18:55:44.157 回答