スポンサーリンク

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.wav

Not what I would call straightforward.