hogeとはワイルドカードのようなものです。日々起こった、さまざまなこと −すなわちワイルドカード− を取り上げて日記を書く、という意味で名付けたのかというとそうでもありません。適当に決めたらこんな理由が浮かんできました。
11/26/2011 ふむ [長年日記]
■ [小ネタ] Visualization & Sonification/Auralization
うんこを流す計画その 4.
こないだ Web Audio API をいじって遊んでいたのは,別に MML もどきを作りたくてのことではなくて,巷に溢れている適当なデータを感覚器に訴える何かに変換したかったから.
「可視化」は語るに及ばずだけれど,「可聴化」というのも情報工学的な研究分野として 10 年以上前から存在する. 可視化は Visualization と言うけれど,可聴化は Sonification とか Auralization とか言う. 可視化に比べて可聴化がマイナーなのは,視覚情報よりも聴覚情報のほうが更に曖昧だとか難しいとか効果を測定しづらいとかそういう理由で注目されにくいからかなぁと個人的には思う. 聴覚情報はどちらかというと主に感情に訴える情報のように思えるし.
公開できるような状態にないのでコードやサービスを公開してはいないけれど,実は以前,遊びで ネットワーク可視化を HTML5 canvas の上でやってみた ことがある. これは単純に libpcap でキャプチャしたデータを WebSocket 経由で随時配信し,クライアント (ブラウザ) サイドでリアルタイムにグラフ化していく. こんな感じ にサーバサイドでキャプチャしたデータをクライアントに送りつける形になっていて,サーバがそのまま WebSocket クライアントになることもできるのでツリー型の分散構成を取ることも (ブラウザから直接到達性のないネットワークの可視化も) できる. まあ,要は EtherApe の Web 版,分散版だ.
そんでまあ課題はいくつかあるものの一通り意図通りグリグリ動くところまで出来たのだけれど,だんだんグリグリ動くだけなのに飽きてきたので,今度は音でも鳴らしてやろうかと思ってしまった次第. それが 以前の日記 の元だったわけです.
Sonification/Auralization をまとも (?) に実装したのは初めてで方法論的なものが全く分からないので,とりあえず,
- IPv4 アドレスをオクテット単位に分割
- 各オクテットを 6 倍する (つまり 0 〜 1530 になる)
- プロトコル番号 6 (TCP) であれば音色を弾くような,それ以外なら笛のような音に設定
- 2. で作った 4 つの数値を周波数に見立て,波を作り,和音として合成
- IPv4 ヘッダの total_len フィールドを使い,ゲインを log(total_len+1) / 7 に設定 (つまり 0 〜 1.6 くらい,データリンクがイーサなら 1.1 以下になる)
こんな感じで作った波を src → dst で繋げて鳴らしてみた.
結果はというと,音なので直接さっくり伝えることができないのがもどかしいのだけれど,まあ酷いもんで,とにかくうるさくてしょうがない. サーバにログインして top とかしてると 2 秒毎にソナー音. 動画サイトにでも行こうものなら,src/dst が同じパケットが大量に現れるので,なかなかの耳レイプっぷりを発揮する.
その昔 ネットワーク監視を音楽で行う という研究があったようだけれど,この域に達するにはまだまだ考慮が足りないなあという感じ (この研究も実用域なのかどうかは知らんけど) でしたとさ.
というところで,ネットワークを Visualization & Sonification/Auralization して遊ぶのも飽きてきたので,次は別のデータを扱おうと画策している次第. ネタはとりあえずいくつかあるのでまあ何かまとまったらまた何か書くかも.