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
现在我只需要平均幅度。怎么做?
答案 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}}分别。