获得从SOX的.wav的平均幅度(只)(Get Mean amplitude(only) of .w

2019-09-22 08:18发布

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

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

Answer 1:

有几个方式。

方法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实际上跳过从第一线7输出的SOX然后开始评估的输出。

注:2-4的方法都可以在一行上做,只是删除()

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

注:要在命令提示符方法1使用应该工作原样。 2-4方法需要改变所有%% 's到%的。

例如,您可以直接粘贴到这个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%z分别。



文章来源: Get Mean amplitude(only) of .wav from sox
标签: cmd wav sox