按照GameDev.net的指南,我正在尝试使用基本节拍检测(在C和/或Java中)。我理解算法实现背后的逻辑,但是我对如何获得歌曲的左右声道(即mp3或wav)的“声音幅度”数据感到困惑。
例如,他从以下假设开始:
在这个模型中,我们将通过计算信号的平均声能并将其与瞬时声能进行比较来检测声能变化。假设我们在立体模式下工作,有两个值列表:(a)和(bn)。 (a)包含左声道每Te秒捕获的声音幅度值列表,(bn)右声道每Te秒捕获的声音幅度值列表。
然后他继续使用以下算法操纵an
和bn
。我想知道如何为两个频道每隔an
秒获得bn
和Te
所需的信号处理,这样我就可以开始关注他的指南了解一些简单的问题歌曲中的节拍检测。
答案 0 :(得分:1)
未压缩的音频文件(例如.wav或.aiff)大部分是一长串样本。每个样本由给定时间点的幅度组成。当录制音乐时,每秒拍摄许多这些幅度样本。 对于立体声(2声道)音频文件,阵列中的样本通常是备用通道:[sample1 left,sample1 right,sample2 left,sample2 right,etc ...]。
大多数音频解析库已经有了为每个频道单独返回样本的方法。
每个通道都有样本数组后,只要您知道采样率或每秒采样数,就可以轻松找到特定秒的样本。例如,如果文件的采样率是每秒44100个样本,并且您想要在 n 秒中捕获样本,则可以使用介于其间的向量部分( n * 44100)和(( n + 1)* 44100)。