サウンドスペクトログラムに画像を埋め込む
Pythonで音声信号処理(2011/05/14)
今回は、スペクトログラムを使って遊んでみました。サウンドスペクトログラムって何って人はこちらへ。Pythonでサウンドスペクトログラム(2011/10/1)。
なんとスペクトログラムに任意の画像を埋め込んだ音声が作れるとのこと。こんなふうに。
Aphex TwinというミュージシャンのEquationという曲に埋め込まれた画像だそうです。こんな風に画像をスペクトログラムに簡単に埋め込むツールをいくつか見つけたので遊んでみます。
Coagula
Coagulaというツールで画像をスペクトログラムに埋め込んだ音声が作れます。Coagulaを起動したらキャンバスが出てくるのでそこに任意の絵を描きます。F5キーで画像をスペクトログラムに変換し、FileメニューのSave Sound As...でWAVEファイルとして音声を保存できます。WAVEファイルのデフォルトの設定は、
チャンネル数: 2(ステレオ) サンプル幅: 2 サンプリング周波数: 22050
だったので前回作ったPython版のプログラムは動きません。前に使ったffmpegで音声をモノラルに変換します。
ffmpeg -i sample.wav -ac 1 -ar 22050 sample.wav
できた音声がこれ。
なんか気持ち悪いなぁ(笑)前回(2011/10/1)作ったPythonスクリプトでスペクトログラムを表示すると下のようになります。
Image to Spectrogram
Coagulaは、文字とか簡単な記号だったらちゃんと埋め込まれたのですが、写真みたいな複雑な画像は無理でした(工夫すればできる?)もっと複雑な画像を埋め込みたかったので別のツールを探してみたところImage to Spectrogramなるものを見つけました。こっちはアルゴリズムが公開されており、Perlのスクリプトも公開されているので中身を知ることもできます。Perl以外にAudio::WavとGDというライブラリが必要なのでCPANからインストール。PerlのGDはさらにgd、libgd-devel、libpng、zlibが必要なのでcygwinのsetup.exeでインストール。これで動かせる。
perl imageSpectrogram.pl sample.png sample.wav
とするとsample.wavというのができます。各ピクセルごとに処理しているらしく、画像のサイズによっては数時間くらいかかりました。いくつかの画像を埋め込んだ音声を作成してPythonとsoxでスペクトログラムを表示してみます。上がPythonのspecgram()、下がsoxです。設定によるのかもしれないけどsoxのほうが鮮明でした。