我有一个音频文件,一个人说出数字0到9,每个数字之间都有一点停顿。我应该通过使用静音检测从连续音频记录中分割各个数字的发音。因此,为了识别静音,我正在分析录音的短时能量(STE):
STEs = [] # list of short-time energies
for k in range(nFrames):
startIdx = k * sampsPerFrame
stopIdx = startIdx + sampsPerFrame
window = np.zeros(signal.shape)
window[startIdx:stopIdx] = 1 # rectangular window
STE = sum((signal ** 2) * (window ** 2))
STEs.append(STE)
plt.figure()
plt.plot(STEs)
plt.title('Short-Time Energy')
plt.ylabel('ENERGY')
plt.xlabel('FRAME')
plt.autoscale(tight='both');
我需要在STE显示幅度接近于0的情况下对原始信号进行分段,即寂静的地方。这样,我希望分别获得每个数字的录音。
我不知道如何在STE显示振幅接近0的点处分割音频信号。例如,在上面附加的图像链接中,我希望在显示0振幅的连续峰值之间分割音频。有20个峰值,因此结果应该是在STE的每个谷点处分割20个音频文件。
我无法用Python编写此代码。任何帮助将不胜感激。谢谢。