从sox获得.wav的平均幅度(仅)

时间:2012-09-12 07:51:06

标签: cmd wav sox

C:\Program Files\sox-14-4-0>sox Sample.wav -n stat

以上代码给出了以下结果

Samples read:             26640
Length (seconds):      3.330000
Scaled by:         2147483647.0
Maximum amplitude:     0.515625
Minimum amplitude:    -0.734375
Midline amplitude:    -0.109375
Mean    norm:          0.058691
Mean    amplitude:     0.000122
RMS     amplitude:     0.101146
Maximum delta:         0.550781
Minimum delta:         0.000000
Mean    delta:         0.021387
RMS     delta:         0.041831
Rough   frequency:          526
Volume adjustment:        1.362

现在我只需要平均幅度。怎么做?

1 个答案:

答案 0 :(得分:3)

有几种方法。

方法1:

"C:\Program Files\sox-14-4-0\sox" Sample.wav -n stat | find "Mean    amplitude: " > %TMP%\amp.tmp
set /p meanAMP=<%TMP%\amp.tmp
set meanAMP=%meanAMP:*:     =%
del %TMP%\amp.tmp
echo %meanAMP%

方法2:

for /f "tokens=1-3" %%x in ('"%ProgramFiles%\sox-14-4-0\sox" Sample.wav -n stat') do (
  if "%%x %%y"=="Mean amplitude:" set meanAMP=%%z
)
echo %meanAMP%

最快:

方法3:

for /f "skip=7 tokens=1-3" %%x in ('"%ProgramFiles%\sox-14-4-0\sox" Sample.wav -n stat') do (
  if "%%x %%y"=="Mean amplitude:" set meanAMP=%%z
)
echo %meanAMP%

方法4:

for /f "tokens=1-3" %%x in ('"%ProgramFiles%\sox-14-4-0\sox" Sample.wav -n stat ^| find "Mean    amplitude:"') do (
  set meanAMP=%%z
)
echo %meanAMP%

我怀疑方法3是最快的,因为:

方法1使用了很多步骤,包括外部程序find,临时文件的创建,访问和删除,以及变量的重新定义。

方法2检查SOX的所有输出。

方法4使用外部程序find,这会减慢执行速度。

方法3实际上跳过SOX的前7行输出,然后开始评估输出。

注意:方法2-4可以在一行中完成,只需删除()

编辑:修正了代码中的一些错误。

注意:要在命令提示符下使用,方法1应该按原样运行。方法2-4要求将所有%%更改为%

例如,您可以将其直接粘贴到cmd

for /f "skip=7 tokens=1-3" %%x in ('"%ProgramFiles%\sox-14-4-0\sox" Sample.wav -n stat') do (
  if "%x %y"=="Mean amplitude:" set meanAMP=%z
)
echo %meanAMP%

请注意,这几乎是方法3的精确副本,但我将%%x%%y%%z更改为%x%y和{{ 1}}分别。