2
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

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

4

1 回答 1

3

有几种方法。

方法一:

"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%

方法二:

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%

最快的:

方法三:

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%

方法四:

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 将是最快的,因为:

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

方法 2 检查 的所有输出SOX

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

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

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

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

注意:要从命令提示符使用方法 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%z

于 2012-09-15T02:43:14.977 回答