2013年8月13日火曜日

超音波通信ライブラリ「sonicnet.js」を試してみた

音でデータ通信をしていた時代

その昔、音響カプラでデータ通信をしている時代があった。

すごくアナログな通信方法で、デジタルデータをスピーカーで音にして電話回線で送信し、受信側はマイクでその音を受け取ってデジタルデータに変換するというものだ。

つまり、音で立派にデータ通信をすることができるわけだ。


超音波通信?

しかし、通信中ずーっと音が鳴っていたのではうるさい。ならば、人間の耳には聞こえない超音波で通信したらどうだろう?と考えたことがあった。

誰かやってるかも知れないな…と思ってそのままになっていたが、やっぱりやってる人がいた!Boris Smusさんだ。

Ultrasonic Networking on the Web | Boris Smus


githubでサンプルを公開してくれているので、早速試してみることにした。

borismus/sonicnet.js


環境

この実験は環境が重要なので、使用したハードウェアとソフトウェアを予め書いておく。

・iMac + スピーカー(結構大きいやつ) + Chrome(28.0.1500.95)
・MacBookAir + Chrome(28.0.1500.95)
・Nexus7  + Chrome Beta(29.0.1547.49、デフォルトでインストールされてないやつ)


デモ「emoticons」

アーカイブをダウンロードして解凍して、とりあえずビデオにあった「emoticons」というデモのindex.htmlを開いてみたが、正常に動作しなかった。

そこでローカルでWebサーバーを立ててデモを放り込んでhttp経由で開いてやると正常に動作した。正常に動作するかどうかは、ブラウザがマイクアクセスを求めてくるかどうかで分かる。

教訓:http経由で開け

残念ながら、このデモでは超音波による通信はどの場合でも確認できなかった。ただ、ページの上にある「Audible Range」をチェックして人間が聞こえる音にしてやると通信が確認できる場合があった。


送受信結果:

iMac > MBA,N7 : MBAは受信、N7は受信せず
MBA > iMac, N7 : iMacは受信、N7は受信せず
N7 > iMac, MBA : 両方受信

N7がまったく受信しないのは、Chrome Betaがリアルタイム音声入力に対応していないからだそうだ。


デモ「chat」

もうひとつ、「chat」というデモも試してみた。

送受信の結果は「emoticons」の時と全く同様だったが、「chat」の場合は超音波による通信を確認した!

ただ、超音波と言っても自分には「プツプツ」程度の音が聞こえた。聞こえない人もいるのかもしれないけれど。

通信はかなり不安定だ。4回「junkoro」と送信して正常に受信できたのは2回。成功率は50%。感覚的にはもっと低い感じだ。


それでも、超音波でデータのやり取りが実際にできるということに感動した!


問題点

全体的に問題点をまとめてみると。。。

・不安定(エラー訂正が必要)
・それなりのハードウェアが必要(スピーカー、マイク)
・それなりの出力・音量が必要(音量が小さいと受信できない)
・ノイズに弱い(音楽が鳴ってると受信確率が大幅に下る)
・超音波と言っても完全に無音ではない(プチブチいう)
・ブラウザがいちいちマイクアクセスを聞いてきてうざい

というところだろうか。


可能性

確かに現状では問題があるが、解決可能な点も多い。もしこれらの問題を解決できれば、大きな可能性がある技術だと思う。

第一に、BlutoothやTCP/IPではそれぞれの端末同士が通信するにはそれなりの設定が必要になる。しかし、超音波通信なら通信するための設定が必要ない

第二に、NFCなら設定は必要ないが、1対1の通信が基本だ。しかし、超音波通信ならデータを「放送」できる。

現状でも文字が送れているので、画像だろうとPDFファイルだろうとBase64で文字列にエンコードして送信すれば一度に多くの人の端末にバイナリファイルを送信(放送)できるようになる。

こういった特性から、例えば、学校の授業や会社の会議なんかで配布資料をパッと送ったりするのに使えるだろう。

今後、さらにコードの中味を見て行きたい。