如何检测音频文件中的峰值?

如何检测音频文件中的峰值?

给定一个几分钟的 Wave 文件,以半规则的间隔发出短暂的点击声,我将如何获取每次点击的毫秒时间戳?我试图验证单秒定时器的准确性。最好仅使用 shell、Python、Ruby 或其他标准 *nix 工具。

答案1

可能sox是一个选择。

像这样调用:

sox sound.wav sound.dat

它将 a 写入textual representation of the sample data文件sound.dat。根据选项,您可以获得一个带有以下内容的文件自开始以来的时间在里面第一栏和一个归一化样本量第二栏,例如:

; Sample Rate 44100
; Channels 1
               0     -0.026428223 
   2.2675737e-05     -0.022186279 
   4.5351474e-05     -0.022186279 
   6.8027211e-05     -0.022827148 
   9.0702948e-05     -0.022491455 
   0.00011337868     -0.025756836 
   0.00013605442     -0.021850586 
   0.00015873016     -0.026428223 
    0.0001814059      -0.02545166 
   0.00020408163     -0.023162842 
   0.00022675737      -0.02545166 
   0.00024943311     -0.018249512 
   0.00027210884     -0.018249512 
   0.00029478458     -0.019226074 
   0.00031746032      -0.01663208 
   0.00034013605     -0.013702393 
   0.00036281179     -0.014984131 
   0.00038548753     -0.015319824 

一点点awk可以揭示带有时间戳的一瞥:

$ awk '$2 > 0.6 { print }' < sound.dat
; Sample Rate 44100
; Channels 1
       1.1002721       0.64196777 
       1.1004762       0.65371704 

man soxman soxformat应该提供更多信息。

相关内容