1

我正在尝试按照GameDev.net的指南对基本节拍检测(在 C 和/或 Java 中)做一些工作。我了解算法实现背后的逻辑,但是我对如何获得歌曲左右声道(即 mp3 或 wav)的“声音幅度”数据感到困惑。

例如,他从以下假设开始:

在这个模型中,我们将通过计算信号的平均声能并将其与瞬时声能进行比较来检测声能变化。假设我们在立体声模式下使用两个值列表:(an) 和 (bn)。(an) 包含左声道每 Te 秒捕获的声音幅度值列表, (bn) 右声道每 Te 秒捕获的声音幅度值列表。

然后他继续操作anbn使用他的以下算法。我想知道如何进行必要的信号处理以获取两个通道anbn每一Te秒,这样我就可以开始遵循他的指南并在歌曲中处理一些简单的节拍检测。

4

1 回答 1

1

未压缩的音频文件(例如 .wav 或 .aiff)大部分是一长串样本。每个样本由给定时间点的幅度组成。录制音乐时,每秒会采集许多幅度样本。对于立体声(2 通道)音频文件,数组中的样本通常交替通道:[sample1 left, sample1 right, sample2 left, sample2 right, 等等...]。

大多数音频解析库已经有一种方法可以为每个通道分别返回样本。

一旦您拥有每个通道的样本数组,只要您知道采样率或每秒的样本数,就很容易找到特定秒的样本。例如,如果您的文件的采样率为每秒 44100 个样本,并且您想在第n秒内捕获样本,您将使用介于 ( n * 44100 ) 和 (( n + 1 ) * 44100)。

于 2013-10-22T01:29:42.530 回答