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

いくつかの方法があります。

方法 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 が最も速いと思われます。

find方法 1 は、外部プログラム、一時ファイルの作成、アクセスと削除、変数の再定義など、多くの手順を使用します。

方法 2 は、 のすべての出力を調べますSOX

find方法 4 は、実行を遅くする外部プログラムを使用します。

方法 3 は、実際には出力の最初の 7 行をスキップしSOX、THEN は出力の評価を開始します。

注:方法 2 ~ 4 はすべて 1 行で実行できます。(とを削除するだけ)です。

編集:コードのいくつかのエラーを修正しました。

注:コマンド プロンプトから使用するには、方法 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 に答える