Windows上のコマンドライン・バッチで,WAVファイルの再生速度や音程を編集操作。2つのモノラルWAVを合成し左右ステレオ出力で保存する「SOX」のサンプルコード
SOXは,wavファイルを編集操作するコマンドラインツール。
フリーソフトで,簡単に使える。
WAVの再生速度や音程を一発で変更できる。
SOXはLinuxの世界では有名だが,Windows上でもCUIで利用できる。
CUIなので,コマンドプロンプトから実行するだけでなく,バッチ処理を組むこともできる。
ここでは,SOXの基本的な使い方の紹介に加え
「2つのモノラル音声を左右で合成して,1つのステレオ音声として保存」
という処理を行なってみよう。
(1)SOXを導入しよう
下記のページから,SOXをダウンロードする。
ブラウザで開くと数秒後にZIPのダウンロードが開始する。
http://sourceforge.net/projects/sox/f...
ZIPを解凍すれば,中のフォルダに
sox.exe や soxmix.exe がある。
これでSOXの導入が完了した。
ためしに,そのフォルダ上でコマンドプロンプトを開き
sox と打ち込んでみよう。
sox sox: Usage: [ gopts ] [ fopts ] ifile [ fopts ] ofile [ effect [ effopts ] ] Failed: Not enough input files specified
このように表示されればOK。
(2)SOXで速度や音程を調整してみる
SOXの基本的な使い方を試してみよう。
WAVファイルの再生スピードを2倍にしてみる:
sox input.wav output.wav speed 2.0
WAVファイルの音程(音の高さ,ピッチ)を半音上げてみる:
sox input.wav output.wav pitch 1000
↑これだけだと音割れを起こしてしまうので,音量を絞ってみよう。
-v オプションで,入力や出力の音量を調整できる。
sox -v 0.2 input.wav output.wav pitch 1000
こうすれば音量についての警告が出なくて済む。
また,再生スピードを2倍に上げると
音程も1オクターブ上がるわけだが,
これを打ち消してみよう。
再生速度を上げつつも,音程のピッチは落とすということ。
sox -v 0.6 input.wav output.wav pitch -400 speed 1.5
聞いた感じの音質は必ずしも良くないが,いちおう実行できる。
WAVファイルの秒数(長さ)などの統計情報を,コマンドから得ることもできる。
sox hoge.wav -e stat Samples read: 2050844 Length (seconds): 93.008798 Scaled by: 2147483647.0 Maximum amplitude: 0.936920 Minimum amplitude: -0.880463 Midline amplitude: 0.028229 Mean norm: 0.074630 Mean amplitude: 0.018229 RMS amplitude: 0.135734 Maximum delta: 0.177917 Minimum delta: 0.000000 Mean delta: 0.009749 RMS delta: 0.017417 Rough frequency: 450 Volume adjustment: 1.067
その他,SOXの詳しいオプションの使い方は下記ページを参照。
Soxで音声形式を変換する(wav <--> aiff <--> au <--> wav)
http://www.xucker.jpn.org/pc/sox_use1...
- Linuxの世界では標準的な、音声ファイルの形式を変換するSoxというソフトがあります。 コマンドライン版ながら、Windowsでも使用できますので、ここではSoxの簡単な使い方を説明します。
SoX, SoXI, soxformat マニュアルページ日本語訳
http://www.hcn.zaq.ne.jp/___/unix/sox...
- 音声処理ツール SoX — Sound eXchange の各種マニュアルページの日本語訳です。
(3)モノラル音声を左右で合成してステレオ出力してみよう
モノラルの音声ファイルとして,1.wav および 2.wav があるとする。
この2つのWAVファイルをもとに,ステレオの 3.wav を生成しよう。
- 左からは 1.wav の内容が
- 右からは 2.wav の内容が
それぞれ聞こえてくるようにしたい。
そのためには,下記のような手順でコマンドを順番に実行すればよい。
まず,モノラルをステレオ化。
-c2 オプションを使えばよい。
sox 1.wav -c2 1_st.wav sox 2.wav -c2 2_st.wav
これでそれぞれステレオ化した。
次に,それぞれのステレオ音声を,左寄せ・右寄せする。
片方のチャンネルの音を消すということ。
avgオプションでチャンネルごとの音量を設定すればよい。
まず,ステレオで左寄せ:
sox 1_st.wav 1_st_left.wav avg 1.0,0.0,0.0,0.0
次に,ステレオで右寄せ:
sox 2_st.wav 2_st_right.wav avg 0.0,1.0,0.0,0.0
これで,ステレオだが片方からしか音が聞こえない
というようなWAVファイルが2つできた。
最後に,これらを1つのステレオWAVファイルにミックスする。
リミックスは soxmix コマンドで実行できる。
soxmix 1_st_left.wav 2_st_right.wav output.wav
これで,左右に別々の音が流れるステレオWAVファイルを作成できた。
ネタ元:
AGNULA - A GNU/Linux Audio Distribution Users
http://comments.gmane.org/gmane.linux...
- I want them to be one stereo file.
- it involves some temporary files.
1) convert both mono to stereo sox file1.wav -c2 file1_st.wav
2) use avg to mix them into single channel stereo files
sox file1_st.wav out1.wav avg 1.0,0.0,0.0,0.0
sox file2_st.wav out2.wav avg 0.0,1.0,0.0,0.0
3) mix them
soxmix out1.wav out2.wav final.wavNot what I would call straightforward.