【问题标题】:Get Mean amplitude(only) of .wav from sox从 sox 获取 .wav 的平均振幅(仅)
【发布时间】:2012-09-05 04:43:57
【问题描述】:
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

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

【问题讨论】:

    标签: cmd wav sox


    【解决方案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%
    

    方法二:

    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的所有输出。

    方法 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%z

    【讨论】:

    • 感谢您的宝贵回答。但我不知道在哪里粘贴这些代码。当我在 cmd 中尝试时,我得到 "'C:\Program' 不是内部或外部命令、可运行程序或批处理文件。" 或者我得到 %%x 是意外的此时。
    • @Gaan_staglA - 我已修复代码以删除 is not recognized 错误。方法 1 应该在批处理文件中或在 cmd 提示符下按原样工作。方法2 2-4 要么在批处理文件中,要么将所有%%'s 更改为%'s。
    猜你喜欢
    • 1970-01-01
    • 2013-11-22
    • 2011-05-30
    • 1970-01-01
    • 1970-01-01
    • 2017-01-11
    • 2020-05-29
    • 2012-06-14
    相关资源
    最近更新 更多