我在处理音频文件时遇到了一个问题。我正在实现一个处理音频文件的算法,该算法要求输入为5 KHz单声道音频文件。
我有的大多数音频文件都是PCM44.1 KHz 16位立体声,所以我的问题是如何转换44.1 KHz立体声文件到5 KHz单声道文件?
如果有人能提供一个教程,解释这个想法背后的DSP或任何JAVA库的基础知识,我将不胜感激。
发布于 2011-08-24 16:26:34
只是为了补充Prasad已经说过的话,你应该在下采样之前以2.5 kHz的速度对信号进行低通滤波,以防止结果中的混叠。如果原始信号中有4 kHz音调,则不可能由5 kHz采样率表示,并将折叠回到2.5 kHz奈奎斯特限制,从而在1.5 kHz处产生假(“混叠”)音调。
请参阅相关:How to implement low pass filter using java
另外,如果你的下采样频率从44100到5,000 hz,你将为每8.82个原始样本保存一个;而不是一个很好的整数除法。这意味着您还应该使用某种类型的插值,因为您将从原始信号中采样非整数值。
发布于 2011-08-21 05:27:04
Java Sound API (javax.sonal.*)包含许多处理声音的有用函数。
http://download.oracle.com/javase/tutorial/sound/index.html
你可以找到已经实现的java代码来轻松地对你的音频文件HERE进行下采样。
发布于 2011-08-22 14:43:16
对于我已经处理过的立体声PCM,通常pcm中的每隔16位的值是对应于特定立体声通道的数据点,这被称为交错。因此,首先获取立体声通道中的所有其他值,以提取单声道PCM字节数组。
至于频率下采样,如果你要播放一个44100 Hz的音频文件,就像它是一个5000 Hz的音频文件一样,你会有太多的数据,这会使它的声音变慢。因此,以int(44100/5,000)为增量进行采样,将其下采样到5 5khz信号。
https://stackoverflow.com/questions/7133679
复制相似问题