「sox」でできること

iPhoneの着信音、自分好みにしたいけれどiTunes Storeに欲しい曲はなし……というMacユーザは少なくないはず。しかも1曲250円、40秒なのにフルに購入する場合と価格があまり変わらないことに釈然としない部分もある。広く配布するわけでなし、あくまで個人利用だから手もとにある曲の一部を利用できればありがたい。

そこで利用したいのが「sox」。サウンドファイルの編集を得意とするオープンソースソフトウェアで、macOS向けにはコンパイル済のバイナリも提供されている。早い話が、soxと適当なサウンドファイルを用意すれば、Terminalで手早く着信音を作成できるのだ。

しかも作成できるのは着信音のみにあらず、通知音も含まれる。iPhoneの通知音に関心がないMacユーザも、自分好みの通知音を作成できるとなれば話は変わってくるに違いない。

soxのWEBサイト(リンク)からダウンロードしたZIPファイルは、手動で展開して/usr/local/binなどパスの通ったディレクトリへバイナリを直接コピーする。「play」コマンドで呼び出すと各種サウンドファイルの再生に使えるため(いわゆるハイレゾ再生も可能)、あわせてシンボリックリンクも作成しておこう。

$ unzip sox-14.4.2-macosx.zip
$ cd sox-14.4.2
$ sudo cp sox /usr/local/bin/
$ sudo ln -s /usr/local/bin/sox /usr/local/bin/play

※:/usr/local/binが存在しない場合は、「sudo mkdir /usr/local/bin」を実行
  • CDからリッピングした曲はもちろん、ハイレゾ音源(FLAC可)も再生できる

着信音を作成する

soxをオーディオフォーマットの変換に利用する場合、最初の引数に変換前、2番目の引数に変換後のファイル名を指定すればいい。着信音の作成はそのバリエーションで、オプションとして再生開始/終了の時間を指定すると考えればわかりやすいだろう。

ただし、soxのWEBサイトでmacOS向けに配布されているsoxバイナリはAACやMP3の再生/デコードに対応しない(対応フォーマットは「sox --help」で確認できる)。面倒でも、macOSに標準装備の「afconvert」コマンドを利用し、WAVに変換したうえで作業してほしい。

・soxコマンドの基本的な用法

$ sox 変換前ファイル 変換後ファイル [オプション...]


・AACファイル(*.m4a)をWAVに変換する

$ afconvert -f WAVE -d LEI16 in.m4a original.wav

WAVファイルを用意できたら、実際に聴いてみよう。ただ聴くだけではなく、着信音として切り出したあとのことを想定し、再生開始と終了のタイミングを指定したうえで再生するのだ。たとえば、以下のコマンドラインでは前段で作成した「original.wav」を対象に、曲の頭から5秒を始点とし15秒までの計10秒を再生している。曲の頭から10秒間であれば「trim 0 10」とすればいい。

$ play original.wav trim 5 15
  • 切り出し範囲の確認にはplayコマンド(実体はsoxのsymlink)が便利だ

曲の途中から切り出す予定であれば、いきなり指定時分から再生(切り出し)すると唐突な印象があるため、フェードインさせるのもひとつの方法だ。たとえば、先ほどの実行例(曲の頭から5秒を始点とし15秒まで)の最初の部分を0.5秒間かけてフェードインさせる場合、次のとおりplayコマンドを実行する。

$ play original.wav trim 5 15 fade 0.5

指定した範囲を繰り返し再生することもできる。たとえば、曲の頭から2秒までを4回繰り返す場合は、以下の要領でplayコマンドを実行する。繰り返し回数は「0」を1回としてカウントするため、希望する回数マイナス1を指定しよう。

$ play original.wav trim 0 2 repeat 3

これで満足という再生パターンを確認できたら、ファイルに書き出してみよう。作業はかんたん、実行するコマンドを「play」から「sox」に変更し、オリジナルファイルの次の引数に書き出すファイルを指定すればいい。指定したオプションをそのまま使えるため、シェルの扱いに慣れていればほぼ一瞬でsoxコマンドを実行できるはずだ。なお、以下の実行例では、頭から2秒間再生することを4回繰り返した「out.wav」を作成し、それを素材として先頭0.5秒をフェードイン処理した「out2.wav」を作成している。

$ sox original.wav out.wav trim 0 2 repeat 3
$ sox out.wav out2.wav fade 0.5

最後に、作成したWAVファイル(ここではout2.wav)をAACファイル(拡張子「.m4r」)に変換しよう。利用するのはM4AをWAVに変換したときに利用したafconvertコマンドで、実行例は以下のとおり(音質はあまり重要ではないため128kbpsにしている)。これで、着信音として使える「myring.m4r」をGETできる。

$ afconvert -f m4af -d aac -b 128000 -o myring.m4r out2.wav

着信音をiPhoneへ転送するにはiTunesを使うしかないが、こればかりは仕方ない。けれど、"コマンド一発"で着信音を作成できるsoxの利点は、じゅうぶん理解いただけたのではないかと思う。筆者の着信音は、Mike Oldfieldの「To France」の冒頭約10秒を3回繰り返すというものだが、soxの力を借りなければかなり手間がかかったはず。ふだんTerminalを使わないMacユーザにもお勧めしたいツールだ。

  • iPhoneへの転送にはiTunesを利用する。デバイスの「着信音」へドラッグ&ドロップすればOKだ

  • iPhoneでは設定→サウンドと触覚→着信音の順に画面を開き、iTunesから転送した着信音を選択する