1

我在处理音频文件时遇到问题。我正在实现一种处理音频文件的算法,该算法要求输入为 5 KHz 单声道音频文件。

我拥有的大多数音频文件都是 PCM 44.1 KHz 16 位立体声,所以我的问题是如何将 44.1 KHz 立体声文件转换为 5 KHz 单声道文件?

如果有人能提供一个教程来解释这个想法或任何 JAVA 库背后的 DSP 基础知识,我将不胜感激。

4

3 回答 3

2

为了增强 Prasad 已经说过的内容,您应该在下采样之前对 2.5 kHz 的信号进行低通滤波,以防止结果出现混叠。如果原始信号中有一些 4 kHz 的音调,它不可能用 5 kHz 的采样率来表示,并且将被折回 2.5 kHz 奈奎斯特极限,从而在 1.5 kHz 处产生虚假(“混叠”)音调.

参见相关:如何使用 java 实现低通滤波器

此外,如果您从 44100 下采样到 5000 赫兹,每 8.82 个原始样本就会节省一个;不是一个很好的整数除法。这意味着您还应该使用某种类型的插值,因为您将从原始信号中采样非整数值。

于 2011-08-24T08:26:33.653 回答
1

Java Sound API (javax.sound.*) 包含许多有用的函数来处理声音。

http://download.oracle.com/javase/tutorial/sound/index.html

您可以在这里找到已经实现的 java 代码来轻松地对您的音频文件进行采样。

于 2011-08-20T21:27:03.607 回答
1

对于立体声 PCM,我通常处理 pcm 字节数组中的每个其他 16 位值是对应于特定立体声通道的数据点,这称为交错。因此,首先抓取立体声通道中的所有其他值以提取单声道 PCM 字节数组。

至于频率下采样,如果你要像播放 5000Hz 的音频文件一样播放 44100Hz 的音频文件,你会得到太多的数据,这会使声音变慢。因此,以 int(44100/5000) 为增量进行采样,以将其下采样为 5khz 信号。

于 2011-08-22T06:43:16.233 回答