如何追踪wav文件中没有声音的部分?
我想要开发一个小型软件,将wav文件划分为若干段,并且将没有声音的区域视为划分点。
程序如何判断wav文件的音量是否低? 我会使用Java或MFC进行开发。
通过计算信号的RMS,我已成功实现了静音检测。这是通过以下方式完成的(假设您有一个音频采样数组):
long sumOfSquares = 0;
for (int i = startindex; i <= endindex; i++) {
sumOfSquares = sumOfSquares + samples[i] * samples[i];
}
int numberOfSamples = endindex - startindex + 1;
long rms = Math.sqrt(sumOfSquares / (numberOfSamples));
一个波形文件基本上是一个值列表,这些值代表着一个被离散分割的声波,通常以一定速率(一般为44100 Hz)进行。当值接近0时,就表示静音。只需设置阈值并查找连续的区域(假设长度为100ms),其中值低于该阈值即可。
简单的静音检测是通过将声音块与某个值(根据录音质量选择)顺序比较来完成的。
类似于:
abs(track[position]) < 0.1
或者
(track[position]) < 0.1) && (track[position]) > -0.1)
如果我们假设chunk是[-1, 1]的浮点数。
如果声音被归一化,它会更好地工作。