人工知能に関する断創録

このブログでは人工知能のさまざまな分野について調査したことをまとめています(更新停止: 2019年12月31日)

サウンドスペクトログラムに画像を埋め込む

Pythonで音声信号処理(2011/05/14)

今回は、スペクトログラムを使って遊んでみました。サウンドスペクトログラムって何って人はこちらへ。Pythonでサウンドスペクトログラム(2011/10/1)。

なんとスペクトログラムに任意の画像を埋め込んだ音声が作れるとのこと。こんなふうに。

f:id:aidiary:20111009150826p:plain

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スクリプトでスペクトログラムを表示すると下のようになります。

f:id:aidiary:20111009151327p:plain

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のほうが鮮明でした。

ブログタイトル



マンデルブロ集合



スティーブ・ジョブズ



くうちゃん


画像を音声に変換するという発想が面白かった。今回、試したみたいに適当に埋め込むと雑音になっちゃうけど、ちゃんとした曲になってればもっと面白いかも。