前の関連記事:SoXで音声感知録音:その6 話し声を準リアルタイム録音2
SoXで音声感知録音:その3 自動録音環境構築まとめの音声ファイルを結合するバッチファイルsox_concat.batは一つずつSoXを起動してファイル結合をしているため時間がかかっていました。SoXは複数ファイルを引数にして一度に結合できるので音声ファイルを結合するバッチファイルを作り直しました。
sox_concat.bat
バッチファイルと同じフォルダにあるsourceフォルダにいれた音声ファイルを結合してバッチファイルと同じフォルダにout0.wavファイルを出力します。
先頭のファイルの後ろに結合するので先頭のファイルは書き換えられます。
先頭のファイルの後ろに結合するので先頭のファイルは書き換えられます。
EXTで入力ファイル形式、OUTEXTで出力ファイル形式を指定できます。
SoXの引数の長さには限度があるのでglob Filename too longというエラーが出てくる場合はBULKの数値を小さくします。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 |
@ echo off rem 処理前ファイルのあるフォルダ set SOURCE_DIR=source rem 処理前ファイルの拡張子 set EXT=wav rem 処理後ファイルの拡張子 set OUTEXT=wav rem ファイルを結合するときに一括処理するファイル数。大きくする程処理が速くなるがあまり大きくするとエラーがでる。 set BULK=200 rem sox.exeへのパスの設定。環境変数PATHに設定しているときは不要。 rem Windows7 64bitの場合。 path %PATH% ;C:\Program Files (x86)\sox-14-4-2 rem WindowsXPの場合。 path %PATH% ;C:\Program Files\sox-14-4-2 rem sox.exeにパスが通っているかの確認。 set T=0 for /F "delims= " %%t in ( 'sox --version' ) do set T= %%t if %T% ==0 ( cls echo sox.exeが見つかりません。 echo . pause exit ) rem SoXの既定の音声デバイスの設定。 set AUDIODRIVER=waveaudio rem このスクリプトがあるディレクトリ。 set SD= %CD% set SOURCE_DIR_P= %SD% \ %SOURCE_DIR% if not exist "%SOURCE_DIR_P%" ( mkdir "%SOURCE_DIR_P%" ) set /A BULK= %BULK% -1 setlocal enabledelayedexpansion echo %SOURCE_DIR% フォルダにある %EXT% ファイルを結合しています。 rem 結合するファイルリストをリセット set F_LIST= rem ファイルリストの要素数 set C=0 cd "%SOURCE_DIR_P%" for %%g in (*. %EXT% ) do ( if !C! EQU %BULK% ( set F_LIST= !F_LIST! "%%g" rem F_LISTのファイルをout0.wavと結合してout.wavにする。 echo !C! 個のファイルを結合中。 sox "%SD%\out0.wav" !F_LIST! "%SD%\out.wav" rem out0.wavを削除してout.wavをout0.wavに改名する。 del /Q "%SD%\out0.wav" move "%SD%\out.wav" "%SD%\out0.wav" set F_LIST= set C=0 ) else ( if not exist "%SD%\out0.wav" ( echo 最初のファイル %%g を%SD%\out0.wavにする。 sox "%%g" "%SD%\out0.wav" del /Q "%%g" ) else ( echo %%g をファイルリスト !F_LIST! に追加する。 set F_LIST= !F_LIST! "%%g" set /A C= !C! +1 ) ) ) rem !F_LIST!に!C!個残っているファイルを結合する。 if !C! GTR 0 ( echo !C! 個を結合中。 sox "%SD%\out0.wav" !F_LIST! "%SD%\out.wav" del /Q "%SD%\out0.wav" move "%SD%\out.wav" "%SD%\out0.wav" ) cd %SD% if not %OUTEXT% EQU wav ( sox out.wav out0. %OUTEXT% ) endlocal |
0 件のコメント:
コメントを投稿