SoX (Sound eXchange) 備忘録

Environment
Photo by hyt.

サウンドファイルをコマンドラインで編集できる sox (Sound eXchange)

SoX - Sound eXchange
Download SoX - Sound eXchange for free. SoX is the Swiss Army Knife of sound processing utilities. It can convert audio ...

を利用できれば便利かなと思い,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 関係ですね.無いと不便です.

opencore-amr
Download opencore-amr for free. Audio codecs extracted from Android Open Source Project. Library of OpenCORE Framework i...
$ 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 (ノキア等の音声関係コデックらしい)へ対応するためのものですね.これはたぶん使うことは無いなぁ…

http://www.penguin.cz/~utx/amr
$ 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

Xiph.org: libao: a cross platform audio library

libao: a cross platform audio library だそうです.これは GPL なので,Cygwin の標準パッケージに含まれています.なので,以下の3つを setup.exe から入れました.

  • libao
  • libao-devel
  • libao4

関連して libaudio0 なんかが一緒に入ってきますね.

flac

FLAC - What is FLAC?
A free, open source codec for lossless audio compression and decompression

flac codec 関係.これも BSD ライセンスで Cygwin の標準パッケージに含まれています.従って以下の4つを setup.exe から入れました.

  • flac
  • flac-devel
  • flac-docs
  • libFLAC++6
  • libFLAC8

関係して libogg が一緒に入ってきますね.

LADSPA

元ページが消滅しています.音声にエフェクトを入れたりするときに使うプラグインの規格のようです.LGPL ライセンスなので,Cygwin の標準パッケージにあるのではないかと探してみると…ありますね.プラグインはともかくとして,

  • ladspa-sdk

のみ入れておくことにしました.

Lame MP3 encoder

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);

となりますが,

Windows(Cygwin)でも mpd + ncmpcppを使いたい - Qiita
mpdとは、音楽ファイルやプレイリストを管理するサーバーです。mpdは単体だけでは動きません。操作するクライアント(ncmpcpp等)が必要になります。今回紹介するのはmpdとncmpcppをCyg…

によると,

$ 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.

TwoLAME - MPEG Audio Layer 2 Encoder

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

Libtool - GNU Project - Free Software Foundation

これはさすがに標準パッケージに入っているはずです.setup.exe から

  • libtool

を入れて終了です.

MAD MP3 decoder/MP3 ID3 tags

Underbit: MAD (MPEG Audio Decoder)

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

Ian Darwin's Fine Free File Command

“a file type guesser” だそうです.所謂 file コマンドのことです.当然 Cygwin の標準パッケージに含まれていますが,念のため,

  • file-devel

のみ入れておきます.

Ogg Vorbis

Xiph.org

lame を入れたときについでに入れたので何もやることはありません.

Opus

Opus Codec
Opus, the open standard, high quality codec. Presentation, documentation, comparison with other formats, download links,...

Opus codec です.フリーの PBX (sip server) の Asterisk 等で,高音質な codec として使えるのを見たことがあります.Cygwin の標準パッケージに含まれているので,setup.exe で

  • libopus-devel
  • libopus0
  • libopusfile-devel
  • libopusfile0
  • libopus-doc
  • libopusfile-doc

を入れて終わりです.

PNG

PNG (Portable Network Graphics) Home Site

PNG(Portagle Network Graphics)形式に対応するためのライブラリ.もちろん Cygwin の標準パッケージに含まれていますが,どうも 1.2 と 1.6系列があるようです.とりあえず 1.6系列に対応する

  • libpng-devel
  • libpng16
  • libpng16-devel

のみ setup.exe から入れました.

Sndfile

libsndfile
The libsndfile Home Page

libsndfile ですね.これも Cygwin の標準パッケージに含まれていますし,この時点だと,上のどれかをインストールした際に依存関係からインストールされてしまうようです.従って何もする必要がありません.

WavPack

WavPack Audio Compression

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

と表示され,エラーとなり止まります.う~ん.何が問題なのか今のところ分かっていません.どうしたものか….

Environment
スポンサーリンク
Following hyt!
タイトルとURLをコピーしました