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:
"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
分别。