サウンドファイルをコマンドラインで編集できる sox (Sound eXchange)
を利用できれば便利かなと思い,Cygwin の標準パッケージのものを入れてみると mp3 等のサポートが無い.ということで,今度は Windows 版を入れてみると,mp3 のサポートは追加の DLL が必要とのことで,結局自分でコンパイルしてみました.
まずはソースを取ってきて展開します.
$ cd /usr/local/src $ wget https://sourceforge.net/projects/sox/files/sox/14.4.2/sox-14.4.2.tar.gz $ tar -zxvf sox-14.4.2.tar.gz
展開した中にある INSTLL を見てみるとオプションとして利用可能なライブラリの一覧があります.今回は出来る限り対応する方針でいきます.SoX のホームページの冒頭に
the Swiss Army knife of sound processing programs.
とあったので,それを実現したかっただけなのですが,当然面倒な訳で,途中で止めとけば良かったと思ったのですが後の祭りです(笑).
OpencoreAMR-NB/WB
まずは,OpencoreAMR-NB/WB からです.通常通りの手順でコンパイルとインストールが可能です.ファイル名を見て分かる通り,これは aac codec 関係ですね.無いと不便です.
$ wget https://sourceforge.net/projects/opencore-amr/files/fdk-aac/fdk-aac-0.1.4.tar.gz $ cd fdk-aac-0.1.4 $ configure $ make $ make install
インストールされるファイルのリストは以下の通り.
/usr/local/bin/cygfdk-aac-1.dll /usr/local/include/fdk-aac /usr/local/include/fdk-aac/aacdecoder_lib.h /usr/local/include/fdk-aac/aacenc_lib.h /usr/local/include/fdk-aac/FDK_audio.h /usr/local/include/fdk-aac/genericStds.h /usr/local/include/fdk-aac/machine_type.h /usr/local/lib/libfdk-aac.a /usr/local/lib/libfdk-aac.dll.a /usr/local/lib/libfdk-aac.la /usr/local/lib/pkgconfig /usr/local/lib/pkgconfig/fdk-aac.pc
AMR-NB/WB
次は AMR-NB/WB です.AMR codec (ノキア等の音声関係コデックらしい)へ対応するためのものですね.これはたぶん使うことは無いなぁ…
$ cd /usr/local/src $ wget http://mirror.ffmpeginstaller.com/source/amrnb/amrnb-11.0.0.0.tar.bz2 $ wget http://mirror.ffmpeginstaller.com/source/amrwb/amrwb-11.0.0.0.tar.bz2 $ tar -jxvf amrnb-11.0.0.0.tar.bz2 $ tar -jxvf amrwb-11.0.0.0.tar.bz2 $ cd amrnb-11.0.0.0 $ ./configure $ make $ make install $ cd ../amrwb-11.0.0.0/ $ ./configure $ make $ make install
インストールされるファイルのリストは以下の通り.
# amrnb 関係 /usr/local/bin/amrnb-decoder-etsi.exe /usr/local/bin/amrnb-decoder-if2.exe /usr/local/bin/amrnb-decoder.exe /usr/local/bin/amrnb-encoder-etsi-vad2.exe /usr/local/bin/amrnb-encoder-etsi.exe /usr/local/bin/amrnb-encoder-if2-vad2.exe /usr/local/bin/amrnb-encoder-if2.exe /usr/local/bin/amrnb-encoder-vad2.exe /usr/local/bin/amrnb-encoder.exe /usr/local/bin/cygamrnb-3.dll /usr/local/include/amrnb /usr/local/include/amrnb/interf_dec.h /usr/local/include/amrnb/interf_enc.h /usr/local/include/amrnb/interf_rom.h /usr/local/include/amrnb/rom_dec.h /usr/local/include/amrnb/rom_enc.h /usr/local/include/amrnb/sp_dec.h /usr/local/include/amrnb/sp_enc.h /usr/local/include/amrnb/typedef.h /usr/local/lib/libamrnb.a /usr/local/lib/libamrnb.dll.a /usr/local/lib/libamrnb.la # amrwb 関係 /usr/local/bin/amrwb-decoder-if2.exe /usr/local/bin/amrwb-decoder.exe /usr/local/bin/amrwb-encoder-if2.exe /usr/local/bin/amrwb-encoder.exe /usr/local/bin/cygamrwb-3.dll /usr/local/include /usr/local/include/amrwb /usr/local/include/amrwb/dec.h /usr/local/include/amrwb/dec_acelp.h /usr/local/include/amrwb/dec_dtx.h /usr/local/include/amrwb/dec_gain.h /usr/local/include/amrwb/dec_if.h /usr/local/include/amrwb/dec_lpc.h /usr/local/include/amrwb/dec_main.h /usr/local/include/amrwb/dec_util.h /usr/local/include/amrwb/enc.h /usr/local/include/amrwb/enc_acelp.h /usr/local/include/amrwb/enc_dtx.h /usr/local/include/amrwb/enc_gain.h /usr/local/include/amrwb/enc_if.h /usr/local/include/amrwb/enc_lpc.h /usr/local/include/amrwb/enc_main.h /usr/local/include/amrwb/enc_util.h /usr/local/include/amrwb/if_rom.h /usr/local/include/amrwb/typedef.h /usr/local/lib/libamrwb.a /usr/local/lib/libamrwb.dll.a /usr/local/lib/libamrwb.la
ao
libao: a cross platform audio library だそうです.これは GPL なので,Cygwin の標準パッケージに含まれています.なので,以下の3つを setup.exe から入れました.
- libao
- libao-devel
- libao4
関連して libaudio0 なんかが一緒に入ってきますね.
flac
flac codec 関係.これも BSD ライセンスで Cygwin の標準パッケージに含まれています.従って以下の4つを setup.exe から入れました.
- flac
- flac-devel
- flac-docs
- libFLAC++6
- libFLAC8
関係して libogg が一緒に入ってきますね.
LADSPA
元ページが消滅しています.音声にエフェクトを入れたりするときに使うプラグインの規格のようです.LGPL ライセンスなので,Cygwin の標準パッケージにあるのではないかと探してみると…ありますね.プラグインはともかくとして,
- ladspa-sdk
のみ入れておくことにしました.
Lame MP3 encoder
これは LGPL ですが,Cygwin の標準パッケージにはありません.仕方ないのでコンパイルします.まず,vorbis 形式をサポートするためと高速化のため,以下の6つを setup.exe から追加します.
- libvorbis
- libvorbis-devel
- libvorbis0
- libvorbisenc2
- libvorbisfile3
- vorbis-tools
- nasm
何故か libspeex 等もインストールされます.あとはいつもの通り ./configure & make & make install なのですが,–with-vorbis は認識できないと出てくる.INSTALL ファイルの情報が古いのかなぁ….まぁどうせ sox のために必要になるので良いのですが….あと,build target を –build=x86_64-pc-cygwin のように指定しないと configure できません.
$ cd /usr/local/src $ wget https://sourceforge.net/projects/lame/files/lame/3.99/lame-3.99.5.tar.gz $ tar -zxvf lame-3.99.5.tar.gz $ cd lame-3.99.5 $ ./configure --build=x86_64-pc-cygwin --enable-nasm --disable-static --enable-shared $ make
途中で,
In file included from lametime.c:125:0: lametime.c: 関数 ‘lame_set_stream_binary_mode’ 内: lametime.c:139:25: エラー: ‘_O_BINARY’ が宣言されていません (この関数内での最初の使用) setmode(fileno(fp), _O_BINARY);
となりますが,
によると,
$ vi frontend/lametime.c #elif defined __CYGWIN__ //setmode(fileno(fp), _O_BINARY); setmode(fileno(fp), O_BINARY); // _を消します
のように修正して
$ make $ make install
で完了です.結果的に以下のファイルがインストールされました.
/usr/local/bin/cygmp3lame-0.dll /usr/local/bin/lame.exe /usr/local/include/lame /usr/local/include/lame/lame.h /usr/local/lib/libmp3lame.dll.a /usr/local/lib/libmp3lame.la /usr/local/share/doc/lame /usr/local/share/doc/lame/html /usr/local/share/doc/lame/html/about.html /usr/local/share/doc/lame/html/abr.html /usr/local/share/doc/lame/html/cbr.html /usr/local/share/doc/lame/html/contact.html /usr/local/share/doc/lame/html/contributors.html /usr/local/share/doc/lame/html/detailed.html /usr/local/share/doc/lame/html/history.html /usr/local/share/doc/lame/html/index.html /usr/local/share/doc/lame/html/introduction.html /usr/local/share/doc/lame/html/links.html /usr/local/share/doc/lame/html/list.html /usr/local/share/doc/lame/html/ms_stereo.html /usr/local/share/doc/lame/html/usage.html /usr/local/share/doc/lame/html/vbr.html /usr/local/share/man/man1/lame.1
Twolame MP2 enc.
mp2 用の encoder のようです.LGPL ですが,Cygwin の標準パッケージにはありませんので,ソースからコンパイルしますが,configure のメッセージから見る限り
- libsndfile-util
- libsndfile-devel
- libsndfile1
が必要そうなので,事前に setup.exe で入れておきます.また,DLL ファイルが作られるように,libtwolame/Makfile を書き換えます.
$ cd /usr/local/src $ wget https://sourceforge.net/projects/twolame/files/twolame/0.3.13/twolame-0.3.13.tar.gz $ tar -zxvf twolame-0.3.13.tar.gz $ cd twolame-0.3.13 $ ./configure $ vi libtwolame/Makefile ... # libtwolame_la_LDFLAGS = -export-dynamic -version-info 0:0:0 libtwolame_la_LDFLAGS = -export-dynamic -version-info 0:0:0 -no-undefined ... $ make $ make install
これで以下のファイルがインストールされます.
/usr/local/bin/cygtwolame-0.dll /usr/local/bin/twolame.exe /usr/local/include/twolame.h /usr/local/lib/libtwolame.la /usr/local/lib/pkgconfig/twolame.pc /usr/local/share/doc/twolame /usr/local/share/doc/twolame/api.txt /usr/local/share/doc/twolame/html /usr/local/share/doc/twolame/html/api.html /usr/local/share/doc/twolame/html/authors.html /usr/local/share/doc/twolame/html/changelog.html /usr/local/share/doc/twolame/html/doxygen.css /usr/local/share/doc/twolame/html/doxygen.png /usr/local/share/doc/twolame/html/index.html /usr/local/share/doc/twolame/html/nav_f.png /usr/local/share/doc/twolame/html/nav_h.png /usr/local/share/doc/twolame/html/psycho.html /usr/local/share/doc/twolame/html/readme.html /usr/local/share/doc/twolame/html/tabs.css /usr/local/share/doc/twolame/html/todo.html /usr/local/share/doc/twolame/html/twolame-manpage.css /usr/local/share/doc/twolame/html/twolame.1.html /usr/local/share/doc/twolame/html/twolame.css /usr/local/share/doc/twolame/html/twolame_8h.html /usr/local/share/doc/twolame/html/twolame_8h_source.html /usr/local/share/doc/twolame/html/vbr.html /usr/local/share/doc/twolame/psycho.txt /usr/local/share/doc/twolame/vbr.txt /usr/local/share/man/man1/twolame.1
libltdl
これはさすがに標準パッケージに入っているはずです.setup.exe から
- libtool
を入れて終了です.
MAD MP3 decoder/MP3 ID3 tags
GPL ですが libid3tag を除き Cygwin の標準パッケージとしては含まれていません.仕方ないのでコンパイルします.まずは libmad からです.
$ cd /usr/local/src $ wget https://sourceforge.net/projects/mad/files/libmad/0.15.1b/libmad-0.15.1b.tar.gz $ tar -zxvf libmad-0.15.1b.tar.gz $ cd libmad-0.15.1b $ ./configure --build=x86_64-pc-cygwin $ make
途中で
gcc: error: unrecognized command line option '-fforce-mem'
と怒られてしまいますが,このオプションは gcc ver 4.3 で削除されています.また,libmad の bug で DLL が作られないのを防ぐため,CFLAG=”-no-undefined” を追加します.
$ vi Makefile # CFLAGS = -Wall -g -O -fforce-mem -fforce-addr -fthread-jumps -fcse-follow-jumps -fcse-skip-blocks -fexpensive-optimizations -fregmove -fschedule-insns2 CFLAGS = -Wall -g -O -fforce-addr -fthread-jumps -fcse-follow-jumps -fcse-skip-blocks -fexpensive-optimizations -fregmove -fschedule-insns2 ... INSTALL_STRIP_PROGRAM = ${SHELL} $(install_sh) -c -s LDFLAGS = "-no-undefined"
のように Makefile を書き換え,
$ make $ make install
します.次は libid3tag ですが,これは標準パッケージとして含まれていますので,setup.exe で
- libid3tag-devel
- libid3tag0
を追加します.libmad でインストールされるファイルは以下の通りとなります.
# libmad ./usr/local/bin/cygmad-0.dll ./usr/local/include/mad.h ./usr/local/lib/libmad.dll.a ./usr/local/lib/libmad.la
Magic
“a file type guesser” だそうです.所謂 file コマンドのことです.当然 Cygwin の標準パッケージに含まれていますが,念のため,
- file-devel
のみ入れておきます.
Ogg Vorbis
lame を入れたときについでに入れたので何もやることはありません.
Opus
Opus codec です.フリーの PBX (sip server) の Asterisk 等で,高音質な codec として使えるのを見たことがあります.Cygwin の標準パッケージに含まれているので,setup.exe で
- libopus-devel
- libopus0
- libopusfile-devel
- libopusfile0
- libopus-doc
- libopusfile-doc
を入れて終わりです.
PNG
PNG(Portagle Network Graphics)形式に対応するためのライブラリ.もちろん Cygwin の標準パッケージに含まれていますが,どうも 1.2 と 1.6系列があるようです.とりあえず 1.6系列に対応する
- libpng-devel
- libpng16
- libpng16-devel
のみ setup.exe から入れました.
Sndfile
libsndfile ですね.これも Cygwin の標準パッケージに含まれていますし,この時点だと,上のどれかをインストールした際に依存関係からインストールされてしまうようです.従って何もする必要がありません.
WavPack
Cygwin の標準パッケージに含まれています.setup.exe から以下の3つのファイルをインストールします.
- wavpack
- libwavpack1
- libwavpack-devel
SOX
Optional のライブラリが全て揃いましたので,sox のコンパイルとインストールを行います.まずは,
- dos2unix
を setup.exe を用いて Cygwin の標準パッケージからインストールしてから,configure & make & make install という手順と言いたいところですが,これでは上手くいきません.代わりに cygbuild という cygwin 環境でビルドする専用のスクリプトが用意されています.
$ cd /usr/local/src/sox-14.4.2 $ ./cygbuild ... BUILD OPTIONS Debugging build............no Distro name ...............not specified! Dynamic loading support....yes Pkg-config location........$(libdir)/pkgconfig Play and rec symlinks......yes Symlinks enabled...........yes OPTIONAL DEVICE DRIVERS ao (Xiph)..................yes alsa (Linux)...............no coreaudio (Mac OS X).......no sndio (OpenBSD)............no oss........................yes pulseaudio.................no sunaudio...................no waveaudio (MS-Windows).....yes OPTIONAL FILE FORMATS amrnb......................yes dlopen amrnb..............yes amrwb......................yes dlopen amrwb..............yes flac.......................yes gsm........................yes (in-tree) lpc10......................yes (in-tree) mp2/mp3....................yes id3tag....................yes lame......................yes dlopen lame...............yes mad.......................yes dlopen mad................yes twolame...................yes dlopen twolame............no oggvorbis..................yes opus.......................yes sndfile....................yes dlopen sndfile............no wavpack....................yes OTHER OPTIONS ladspa effects.............yes magic support..............yes png support................yes OpenMP support.............yes, -fopenmp ... $ make install
で完了です.cygbuild の途中で表示される build option のリストより,ほぼ全ての機能が有効化されているいることも確認できます.インストールされるファイルは以下の通り.
/usr/local/bin/play.exe /usr/local/bin/rec.exe /usr/local/bin/sox.exe /usr/local/bin/soxi.exe /usr/local/include/sox.h /usr/local/lib/libsox.a /usr/local/lib/libsox.la /usr/local/lib/pkgconfig /usr/local/lib/pkgconfig/sox.pc /usr/local/share/man/man1/play.1 /usr/local/share/man/man1/rec.1 /usr/local/share/man/man1/sox.1 /usr/local/share/man/man1/soxi.1 /usr/local/share/man/man3/libsox.3 /usr/local/share/man/man7/soxeffect.7 /usr/local/share/man/man7/soxformat.7
なお,cygbuild の最後に,sox-14.4.2-cygwin32.zip というファイル名で sox を cygwin 環境下以外で動作させるために必要なファイルを纏めたものが作られます.ただし,ライセンスの関係か mp3 関係は除外されているようですね.mp3 のサポートを有効にするには
- cygmad-0.dll
- cygmp3lame-0.dll
をさらに追加します.
問題点
これで mp3 を含む様々なファイルに対応できたのですが,日本語を含むファイル名を持つファイルを読み込ませようとすると,
FAIL sox: glob: Invalid or incomplete multibyte or wide character
と表示され,エラーとなり止まります.う~ん.何が問題なのか今のところ分かっていません.どうしたものか….