SoXというサウンド処理用のコマンドラインツール

SoXというサウンド処理用のコマンドラインツールを知りました。これは普通に便利なので、紹介しておきます。Sound eXchangeの略がSoXのようです。

私は、音声入力ツールの検証をしようと思って調べていたときに、soxで検証データを取ると便利と知りました。macOSで作業してます。

インストールはhomebrewを使いました。

homebrew install sox

以下で16kHzモノラルのテスト音声が取れます。

rec -r 16000 -c 1 test1.wav    # Ctrl+Cで停止
Code language: CSS (css)

めちゃ便利。

合わせて確認したいリンクも調べたので置いておきます。


SoXの開発元と保守状況について

HandWikiによると、以下です。

  • 最初の作者はLance Norskogで、1991年7月にUsenetのalt.sourcesグループに「Aural eXchange」として投稿された。同年11月の2回目のリリースで「Sound Exchange」に改名された。
  • その後、様々な貢献者がいて、最新の安定版は14.4.2であり、リリースは2015年2月22日になっている。SourceForgeでのコード更新は2015年のバージョン14.4.2を最後に止まっています。

つまり、10年以上新しいリリースがなく、メンテナンスはほぼ行われていない状態。ただ、現在も多くの環境でパッケージとして配布され、広く使われ続けているようです。

オーディオ関係のファイルフォーマットはそんなに頻繁に変わるものではないですし、安定しているんだろう、と私は認識してます。


それから以下は、ついでにClaude Opusに実行サンプルとして出力させたものです。現時点で私は実際に動かして検証してませんし、文章もほぼAIが書いたものをそのまま貼ってます。次に私が使う時、参考にしつつ調べる省略になれば、と考えておいておきます。参考にされる場合は、各自が調べ直すなど、自己責任でお願いします。

SoXの基本構文

sox [入力ファイル] [出力ファイル] [エフェクト]
Code language: CSS (css)

フォーマット変換

sox input.wav output.mp3
Code language: CSS (css)

WAVをMP3に変換します。拡張子から自動でフォーマットを判別します。

音量変更

sox input.wav output.wav vol 0.5
Code language: CSS (css)

音量を半分にします(2.0なら倍)。

トリミング(切り出し)

sox input.wav output.wav trim 10 5
Code language: CSS (css)

10秒地点から5秒間を切り出します。

フェードイン・アウト

sox input.wav output.wav fade 3 0 3
Code language: CSS (css)

最初の3秒でフェードイン、最後の3秒でフェードアウト。

サンプルレート変更

sox input.wav output.wav rate 44100
Code language: CSS (css)

サンプルレートを44.1kHzに変換する。

複数ファイルの連結

sox file1.wav file2.wav output.wav
Code language: CSS (css)

2つのファイルをつなげます。

ファイル情報の表示

soxi input.wav
Code language: CSS (css)

サンプルレート、チャンネル数、長さなどを表示する

基本的な録音

rec output.wav
Code language: CSS (css)

これだけでマイクから録音が始まり、Ctrl+Cで停止

時間を指定して録音

rec output.wav trim 0 10
Code language: CSS (css)

10秒間だけ録音して自動停止

フォーマットやスペックを指定

rec -r 44100 -c 2 -b 16 output.wav
Code language: CSS (css)

サンプルレート44.1kHz、ステレオ、16bitで録音

録音しながらエフェクト適用

rec output.wav noisered noise.prof 0.3
Code language: CSS (css)

無音検出による自動停止。

rec output.wav silence 1 0.1 3% 1 3.0 3%
Code language: CSS (css)

これで「音が鳴り始めたら録音開始、3秒間無音が続いたら自動停止」といった挙動が作れます。会話や演奏の区切りで自動的に切ってくれるので、バッチ処理や自動収録に向いています。

テスト用・検証用のデータ生成

無音の生成

sox -n silence.wav trim 0 5
Code language: CSS (css)

5秒の無音。タイミング検証やパディングのテストに。

サイン波(指定周波数のトーン)

sox -n sine440.wav synth 5 sine 440
Code language: CSS (css)

440Hzのサイン波を5秒。リサンプリングやフィルタの検証の定番

各種波形

sox -n square.wav synth 3 square 1000
sox -n saw.wav synth 3 sawtooth 200
sox -n noise.wav synth 3 whitenoise
Code language: CSS (css)

矩形波、ノコギリ波、ホワイトノイズなど。倍音やノイズ特性のテストに

スイープ(周波数掃引)

sox -n sweep.wav synth 10 sine 20-20000
Code language: CSS (css)

20Hzから20kHzまでのスイープ。周波数特性やエイリアシングの確認に便利

複数チャンネルやスペックを変えて生成

sox -n -r 48000 -c 2 -b 24 test.wav synth 5 sine 1000
Code language: CSS (css)

48kHz / ステレオ / 24bit といった条件を指定して、エッジケースの検証データを作れる

類似投稿