🧦

SoXでかんたん音声編集

2025/03/22に公開

前置き

オーディオデータをコマンドで手軽に扱いたい

「コマンドで簡単にWAV音源のサンプリングレートや量子化ビット数が知りたい」、「MP3のビットレートを確認したい」、と思ったことはありませんか?

また、「収録した音源をMP3に変換したい」、「ステレオ音源のL/Rを単純にミックスしてモノラルにしたい」など、ちょっとしたオーディオ処理をしたいときに、DAWなどGUIがリッチなアプリケーションを開くのではなく、コマンドから操作できたらいいのに、と思ったことはありませんか?

私はあります。

本記事では、SoXを使ってコマンドでオーディオデータの情報を見たり、なんらかの処理をする流れを紹介します。

SoXとは

https://sourceforge.net/projects/sox/

オーディオデータをコマンドで簡単に編集できるツールです。

「アーミーナイフみたいにいろいろできるよ。オーディオファイルを他のタイプのファイルに変換できて、その際にエフェクトやフィルターもかけられるよ。」と書いてありました。

SoX is the Swiss Army Knife of sound processing utilities. It can convert audio files to other popular audio file types and also apply sound effects and filters during the conversion.

SoXの最も基本的な形は以下です。これにオプションをいろいろつけることで、${input_file} になんらかの処理を施した結果を ${output_file} に書き出すことができます。

$ sox ${input_file} ${output_file}

バージョン等

  • macOS Sonoma 14.5
  • SoX 14.4.2 (Homebrewでインストール)

今回の流れ

  • WAVで録音する
  • WAVの情報を確認する
  • MP3に変換する
  • ステレオで録音する
  • ステレオをモノラルに変換する

本編

WAVで録音する

以下のコマンドでWAV音源を収録することができます。

sox -d -r 44100 -b 16 output.wav
  • -d : これをつけると録音できます
    • このオプションは ${input_file} の代わりにデフォルトのオーディオデバイス (つまり、マイク) を指定しており、入力を既存ファイルではなくマイクにします
  • -r : サンプリング周波数を指定します
  • -b : 量子化ビット数を指定します
  • output.wav : 出力ファイル名を指定します
    • ファイルのフォーマットは拡張子から自動的に判断してくれます

SoXをインストールすると一緒に使えるようになるrecというコマンドがあります。これは sox -d のエイリアスのようなもので、収録コマンドを以下のようにすこし簡略化して書くことができます。

$ rec -r 44100 -b 16 output.wav

WAVの情報を確認する

以下のコマンドでオーディオファイルの基本的な情報を見ることができます。または、--info の代わりに省略形の --i を使うこともできます。

$ sox --info output.wav

Input File     : 'output.wav'
Channels       : 1
Sample Rate    : 44100
Precision      : 16-bit
Duration       : 00:00:06.27 = 276480 samples = 470.204 CDDA sectors
File Size      : 553k
Bit Rate       : 706k
Sample Encoding: 16-bit Signed Integer PCM

先ほど録音時に指定したパラメータが表示されていますね。

  • Sample Rate : 44100
  • Precision : 16-bit

sox --i にもエイリアスがあり、soxi でも同様の結果を得られます。

$ soxi output.wav

WAVやMP3はSoXで確認できます。ただし、最近よく使われるようになってきたAAC (拡張子は .m4a など) を扱えないので、FFmpeg と使い分けています。

MP3に変換する

先ほど、SoXの基本形は以下ですと紹介しました。

$ sox ${input_file} ${output_file}

また、SoXは拡張子から自動的にフォーマットを判別してくれるので、なんとMP3に変換するコマンドはこれだけです。

$ sox output.wav output.mp3

できあがったMP3の情報をsoxiで確認してみましょう。

$ soxi output.mp3

Input File     : 'output.mp3'
Channels       : 1
Sample Rate    : 44100
Precision      : 16-bit
Duration       : 00:00:06.30 = 277654 samples = 472.201 CDDA sectors
File Size      : 50.4k
Bit Rate       : 64.0k
Sample Encoding: MPEG audio (layer I, II or III)

Bit Rate: 64.0k と表示されています。MP3へ変換する際のデフォルト設定が64 kbpsのようですね。例えば固定ビットレート (Constant Bit Rate; CBR) で128 kbpsを指定したいときは、以下のように -C 128 とすることができます。

$ sox output.wav -C 128 output_128kbps.mp3
$ soxi output_128kbps.mp3

Input File     : 'output_128kbps.mp3'
Channels       : 1
Sample Rate    : 44100
Precision      : 16-bit
Duration       : 00:00:06.30 = 277610 samples = 472.126 CDDA sectors
File Size      : 101k
Bit Rate       : 128k
Sample Encoding: MPEG audio (layer I, II or III)

ステレオで録音する

以下のように -c 2 というオプションをつけると、ステレオで (2チャンネルで) 録音できます。

sox -d -r 44100 -b 16 -c 2 stereo.wav
soxi stereo.wav

Input File     : 'stereo.wav'
Channels       : 2
Sample Rate    : 44100
Precision      : 16-bit
Duration       : 00:00:03.16 = 139264 samples = 236.844 CDDA sectors
File Size      : 557k
Bit Rate       : 1.41M
Sample Encoding: 16-bit Signed Integer PCM

ステレオをモノラルに変換する

ステレオ音源をモノラル (1チャンネル) に変換するには、channels 1 をつけます。

sox output_stereo.wav mono.wav channels 1
soxi  mono.wav

Input File     : 'mono.wav'
Channels       : 1
Sample Rate    : 44100
Precision      : 16-bit
Duration       : 00:00:03.16 = 139264 samples = 236.844 CDDA sectors
File Size      : 279k
Bit Rate       : 706k
Sample Encoding: 16-bit Signed Integer PCM

最後に

「なんかいろいろできそう」ということは伝わったと思います。これ以降、「SoXであれもできるの?」という疑問が浮かんだときは、LLMに聞くのが一番手っ取り早いと思いますw

最後まで読んでいただき、ありがとうございました。

Voicyテックブログ

Discussion