wavの波形をpng画像に変換する。

SoundCloudっぽく音源の波形を表示して、コメント付けたりキャッキャウフフしたい時に。

まんま、wav2pngというものがあるみたい。
http://code.google.com/p/wav2png/source/checkout



インスコしてみる。

svn checkout http://wav2png.googlecode.com/svn/trunk/
まずはSVNから拾ってくる。
Revisionは11だった。

ふむ、中を見るとどうやらWindows用のバイナリが沢山出てくる。
一瞬、アレこれもしかして駄目?と思ったけど、ソースはあるし、buildの下にLinux用のMakefile発見。

 cd trunk/build/linux


んじゃまー、なにも考えずにポチッとな。

 # make
 g++ -c -O2 -Wall -I../../lib/anyoption ../../lib/anyoption/anyoption.cpp
 ../../lib/anyoption/anyoption.cpp: In member function ‘void AnyOption::init(int, int)’:
 ../../lib/anyoption/anyoption.cpp:131: error: ‘strcpy’ was not declared in this scope
 〜中略〜
 make: *** [anyoption.o] エラー 1

怒られた。まーそうだと思ったよ!

../../lib/anyoption/anyoption.cppってファイルで怒られてる。
strcpyなんて知らねーと言わんばかりです。はい。
C言語とか、入社研修でさっわって以来やってないから、わからんつーに。


でもたしか、str*使うにはstring.hとかインクルード宣言しなきゃいけなかった気がする。
で、anyoption.cpp内で宣言してないようだ。

../../lib/anyoption/anyoption.cpp 一文追加。

 #include "string.h"

もっかいやってみる。

 # make
 g++ -c -O2 -Wall -I../../lib/anyoption ../../src/main.cpp
 ../../src/main.cpp:42:21: error: sndfile.h: そのようなファイルやディレクトリはありません
 ../../src/main.cpp: In function ‘void saveImage(std::string, gdImage*, bool, int)’:
 ../../src/main.cpp:78: warning: comparison between signed and unsigned integer expressions
 ../../src/main.cpp: In function ‘int main(int, char**)’:
 ../../src/main.cpp:570: error: ‘strcmp’ was not declared in this scope
 ../../src/main.cpp:586: error: ‘strcmp’ was not declared in this scope
 中略
 make: *** [main.o] エラー 1

strcmp…またお前か!
../../src/main.cppに同じように、インクルード文追加。

 #include "string.h"

あと、sndfileが無いようだ。
これは入れなきゃね。libsndfileインスコ

 # make
 g++ anyoption.o main.o -lgd -lsndfile -ljpeg -o wav2png

できた!


叩いてみる。

 # ./wav2png 

 Usage: wav2png --input wavefile.wav
         
        Additional options: --width 300 --height 151 --output image.jpg --linecolor ff00aa --backgroundcolor 002222 --zerocolor ff0000 --colorfile filename --padding 2 --verbose true --type jpeg --quality 85
        Short command line switches: -i -w -h -o -l -b -z -c -o
        
        width: width of PNG (default: 300)
        height: height of PNG (default: 151)
        output: output filename (default: input filename with '.png' appended)
        linecolor: color of waveform lines (default: 323232)
        backgroundcolor: color of background (default: FFFFFF)
        zerocolor: color of line through zero (default: 960000)
                colors are defined like HTML colors in hex
        colorfile: file with (samplePosition,value) pairs for coloring
        padding: padding around the edge
        verbose: true or false
        type: png or jpeg
        quality: jpeg quality between 0 and 100

おー、なんか色々出来そうだ。

# ./wav2png --input test.wav

test.wav.pngってファイルが出来た。