SoX(Sound eXchange)でMP3を扱う

前の関連記事:SoX(Sound eXchange)で音声ファイルの長さの差をとる


SoX(Sound eXchange)で音声感知録音:その1で書いたようにSoXのデフォルトインストールではライセンスの関係でMP3関係のファイルはインストールされません。

linuxBeanのSoXでMP3を扱えるようにするのは簡単

pq@linuxBean:~$ sox -d 1.mp3
sox FAIL formats: no handler for file extension `mp3'
デフォルトインストールではこういわれてmp3の録音ができません。

Synapticパッケージマネージャからlibsox-fmt-allをインストールします。


libsox-fmt-ao
libsox-fmt-ffmpeg
libsox-fmt-mp3
libsox-fmt-oss
libsox-fmt-pulse

libsox-fmt-allをインストールすると、これらがまとめてインストールされます。

あとはwavファイルのときと同じようにしてwavをmp3と書き換えてコマンドを実行するだけで録音も再生もできました。

WindowsのSoXでMP3を扱えるようにする


Windowsの場合はlinuxBeanのように簡単にはいきませんでした。

C:\>sox -d 1.mp3
sox FAIL util: Unable to load LAME encoder library (libmp3lame).
sox FAIL formats: can't open output file `1.mp3':

libmp3lameが必要、といわれるので検索してRareWaresからlibmp3lame 3.99.5をダウンロードして解凍してでてきたファイルすべてをSoXのインストールフォルダにコピーしました。

Windows7 64bitであってもx64-Win64ではなく、x86-Win32の方をインストールしないと動きませんでした。

これでMP3で録音できるようになりました。

C:\>sox 1.mp3 -d
sox FAIL util: Unable to load MAD decoder library (libmad).
sox FAIL formats: can't open input file `1.mp3':

ところが再生ができません。

libmadがないといわれます。

windows - sox FAIL util: Unable to load MAD decoder library (libmad) function "mad_stream_buffer" - Stack Overflow

ここに答えが書いてありました。
(2016.6.26追記。Google Codeの終了に伴ってリンクが切れており現在の入手先は不明です。)

ossbuild - Revision 1012: /trunk/Shared/Build/Windows/Win32/binからlibmad-0.dllとlibmp3lame-0.dllをダウンロードしてSoXフォルダにいれるだけです。

これはossbuild - Open Source Software Build Environment - Google Project Hostingというオーブンソースビルド集のWindows 32bit版バイナリ集のフォルダです。

こんな便利なものがあるとは。

これだけでMP3の録音再生ともにできるようになりました。

MP3の圧縮率を指定する


録音するときはMP3の圧縮率をデフォルト値以外に変更したいときがあります。

圧縮率の指定は-C, --compressionで行います。

指定方法の解説は.mp3にあります。

-Cオプションは出力先の前に指定します。

正の整数を指定した場合は固定ビットレートになります。

-C 128 とすると128kbps固定ビットレートになります。

-Cオプションを指定しない場合はこの128kbps固定ビットレートで録音されるようです。

MP3の圧縮パラメータにはビットレート以外にもう一つ品質というパラメータがあり、このパラメータはビットレート指定の小数点以下の数字で指定します。

デフォルトでは5になっているそうです。

ということでCオプションを指定しない場合は、-C 128.5 というパラメータで圧縮されていることになります。

品質は数値が小さくなるほどよくなりますが、圧縮速度が遅くなります。

128.01、128.1、128.2、128.3、128.4、128.5、128.6、128.7、128.8、128.9

固定ビットレート128kbpの場合、この順に品質が落ちていきます。

規定値は5ですが、推奨値は2だそうです。

-Cオプションで負号をつけて指定すると可変ビットレートになる


可変ビットレートにすると固定ビットレートよりもよりよい品質になるそうです。

可変ビットレートの指定は固定ビットレートと区別するために負号をつけて行います。

可変ビットレートの品質(圧縮速度に反映される小数点以下の品質と異なり、ビットレートに反映される)は0から9までの段階があり0が最高品質になります。

圧縮の品質の指定を小数点以下で行うのは固定ビットレートの場合と同じです。

-C -4.5 と指定すると、可変ビットレートの品質が4、圧縮速度の品質が5ということになります。


mp3ファイルを扱えるAudacityで音声感知録音のAudacityでのパネル表示をみると可変ビットレートの品質した場合のビットレートの目安はこのようになるようです。


AudacityのMP3オプションパネルはこのようになっています。

「ビットレートモード」の、「可変」は可変ビットレート、「一定」は固定ビットレートに該当すると思いますが、「プリセット」と「平均」はSoXの-Cオプションで指定できるものに該当するものがわかりませんでした。

「品質」については先に書いた通りです。

「可変スピード」についてはAudacityでは「高速」と「標準」が選択できます。

これもSoXの-Cオプションのどの段階に該当するかわかりませんでした。

チャネルモードもSoXでの指定の仕方はわかりません。

とりあえずモノラルマイクからの録音では、-c 1 -C 8.2 のオプションでよいかと思いました。

-c 1 はモノラルの指定です。

m4aファイルはffmpegでwavに変換してから扱う


2016.7.15追記。

iPod touchのボイスメモはm4a形式です。

m4a形式はSoXではうまく扱えないのでffmpegでまずwavに変換します。

WindowsではWindowsで長時間音声ファイルからの話声抽出でやりました。

linuxBean14.04ではUbuntu 14.04にffmpegをインストールしてWinFFに設定する | Ubuntuアプリのいいところで紹介されていたPPAを使いました。

sudo add-apt-repository ppa:mc3man/trusty-media

まずこれでリポジトリを追加します。

このままでは公開鍵がないといわれるので豆ボタン→設定→linuxBean設定ウィザード。

「PPAの公開鍵を取得」にチェックをつけて公開鍵を取得します。

sudo apt-get install ffmpeg

あとはこれでインストール完了です。

ffmpeg -i input.m4a output.wav

これでm4aファイルをwavファイルに変換できました。

参考にしたサイト


RareWares
libmp3lame 3.99.5をインストールするとMP3の録音はできましたが再生はできません。

windows - sox FAIL util: Unable to load MAD decoder library (libmad) function "mad_stream_buffer" - Stack Overflow
WindowsのSoXでMP3を使えるようにする方法。

ossbuild - Open Source Software Build Environment - Google Project Hosting
オープンソースビルド集。

/trunk - ossbuild - Open Source Software Build Environment - Google Project Hosting
上記のオープンソースビルド集のうちWindows 32bitのバイナリファイル集一覧。

ossbuild - Revision 1012: /trunk/Shared/Build/Windows/Win32/bin
上記のフォルダの内容。libmad-0.dllとlibmp3lame-0.dllがありました。

SoX, SoXI, soxformat マニュアルページ日本語訳
SoXのマニュアルを日本語訳されています。

Ubuntu 14.04にffmpegをインストールしてWinFFに設定する | Ubuntuアプリのいいところ
ffmpegは公式リポジトリからの提供はなくなったそうです。

次の関連記事:SoX(Sound eXchange)で音声感知録音:その2

PR

0 件のコメント:

コメントを投稿