1. 前言
最近市场上出现一些多个视频拼接而成MV,其原理是根据音频的节拍变换切换视频。
我在这里讲述下如何进行音频节拍检测。
2. 音频检测一般流程
3.
3.1 原始音频频谱
以1024为窗口(即每次读取1024个采样点)进行量化
WaveDecoder decoder = new WaveDecoder( new FileInputStream( "samples/sample.wav" ) );
ArrayList<Float> allSamples = new ArrayList<Float>( );
float[] samples = new float[1024];
while( decoder.readSamples( samples ) > 0 )
{
for( int i = 0; i < samples.length; i++ )
allSamples.add( samples[i] );
}
samples = new float[allSamples.size()];
for( int i = 0; i < samples.length; i++ )
samples[i] = allSamples.get(i);
Plot plot = new Plot( "Wave Plot", 512, 512 );
plot.plot( samples, 44100 / 1000, Color.red );
音频频谱如下:
3.2 数据预处理
(1)差值处理
差值处理是分析序列数据的基本本方法。
我们把当前窗口数据减去上一个窗口数据,得到差值数据,公式如下:
SF(k)=

本文介绍了音频节奏检测的基本流程,包括原始音频频谱分析、数据预处理(差值和傅里叶变换)、节拍检测(峰值检测)。通过差分处理和傅里叶变换,结合时间序列分析,确定音频的节拍。以44100Hz采样率的音频为例,解释了如何计算窗口代表的时间,并进行了峰值检测,以0.5秒为区间计算均值。
最低0.47元/天 解锁文章
59

被折叠的 条评论
为什么被折叠?



