やりたいことの半分も出来てないけど、連休終わってしまうので出来たところまでDemo。Webサーバーのアクセスログをリアルタイムで監視して、リアルタイムで音にして聴いてみよう、しかも音楽的な感じで、という試みです。



https://github.com/aklaswad/statechno

ビデオにキャプションつけるやりかた分からなかったので、何をやっているかわかりづらいかもしれませんが、以下のような流れのデモです。


  1. 起動するよ

  2. 音が出るよ

  3. アクセスが増えると盛り上がるよ

  4. エラーも拾うよ

  5. アタックされると多分こんな感じだよ

  6. upstreamが死ぬと多分こんな感じだよ

  7. 監視サーバーごと死ぬと多分こんな感じだよ

  8. Pdのパッチだよ

  9. アクセスが減ると寂しいよ



基本的にtechno_nekoさんと話してた流れで「perlで音楽で遊びたい」->「だがperlでオーディオそのものをいじるのはしんどい」->「オーディオ部分はOSC経由でPdにまかせてしまったほうが良い。最近Pdが熱い。」->「だったらperl側はperlが得意な領域で頑張ると面白いのでは」ということで、アクセスログをOSC経由でストリームして、なんかアクセスガンガン増えてるとツマミ右に回していくような感じでどうかな、ということで作ってみました。

構成としてはPerlスクリプトがログファイルというか標準入力をリアルタイムで監視して、1step(120msくらい)ごとにまとめてOSCで送信、Pdで受け取ってシンセサイズする、という流れになってます。

以下、本当にただの雑感



ガチで1step(16分音符)毎にハートビートを送って、再生側ではそれを受け取る端からシンセサイズしているだけなので、不安定になるかなと思ったけどローカルのMBAで結構余裕で捌けてたので、ありなのかもしれない。AnyEventのtimerが結構ちゃんとしてて感心した。

OSCはただのUDPで基本的に一方通行なので、現在の構成だと監視サーバー=音の出る場所を一箇所に決めてそこにサーバー側から繋ぎに行く形になるので実用性がない。ただ、Proxy的なものを挟めばなんとかなるとは思ってる。

WebSocket+WebAudioで作れば気軽に誰でも使えるようになって、それはそれで面白かったかもしれないが、今回はあえてしなかった。だってPerlで書きたかったの。(とはいえキモとなる部分はPdのパッチ側にあるのだが)

Pdは10年ぶりくらいに触ったけどオブジェクトが全然増えてなくてワロタ。でもパッチ書くの楽しくてよかった。

正味三日でここまで来たが、実は今日は殆ど何も進んでいない。基本的な部分は昨日までで出来ていて、今日はサーバーの状態を音楽的に表現する試み(例えばレスポンスタイムをそのままショートディレイに突っ込んだり)を幾つか試したが、殆ど失敗した。やっぱり機械に音楽やらせるのって難しいです。

YAPC会場でずっとコレやってたのでトーク一つも聞けなかったけど後悔はしていない。