先日、Googleが『Google Tone』というChromeの拡張機能を発表しました。

Google トーンの特長
Google トーンを使用すると、パソコン同士が会話できるようになります。Google トーンは Chrome ブラウザの拡張機能です。パソコンのスピーカーを使って特別な音声信号を発信することができ、他のパソコンのマイクでその音声信号を拾うことができます。受信側のパソコンではその音声信号が URL として認識されます。

Google Tone

簡単な使用方法はこちら。とてもシンプルなので見ずとも使える。

どうやらGoogle Toneを入れるとボタン一つで近くのPCに音でURLを送信できるようになるようです。元々はGoogle社の人が昼休みにリックロールという日本のネット用語でいえば『釣り』にあたることをするために作ったものだったようですが、徐々にその有用性に気が付きこのようにリリースされるに至ったようです。

Google Tone使用イメージ図

image by

Google

Rick Astley – Never Gonna Give You Up

イギリスのシンガーソングライター、リック・アストリーの1987年発表の大ヒット曲。興味を惹くタイトルと共にこの動画のURLを貼るという『釣り』行為が英語圏の画像掲示板『4chan』を中心に流行した。

なんだか先進的なのか一周回ってレトロフューチャーなのか判断しかねる仕組みですが、生まれた経緯も踏まえて面白そうな機能です。一体どのようにして音でURLを共有しているのか、どのような変換がおこなわれているのかと様々な興味が湧いてきます。

と、そのようなわけで今回このGoogle Toneを使って少し遊んでみたのですが、いくらか意外な事実が浮かび上がってきました

変換方法の予測

ひとまずどのようにして音でURLを送信しているのか予測を立ててみます。

音から文字に変換する一番単純な方法は、まぁ、実際は文字を声に出して読むことなのですが、コンピュータ同士であれば音階の連なりを文字に対応させる、つまり『ド→A』『レ→B』……というような方法が思いつきます。Google Toneはこの方法を使ってURLを送っている、と考えるのがシンプルです。

イメージ図

image by

SIGN

簡単な予測を立てたところで、実際にGoogle Toneがどのようなものか聴いてみましょう。

なるほど。

だいたい6か7種類の音が、13個ほど連続して鳴っているようです。ちょうど『ドレミファソラシ』と1オクターブに収まるメジャースケールが7音階なのでGoogle Toneで使われる音の数の種類も7とすると、7の13乗で96889010407通り(約千億)の音声を鳴らすことができます。Googleの短縮URL機能を使うとアルファベット大文字小文字52種と数字10種が6文字、(52+10)の6乗で56800235584通り(約六百億)にURLの種類を制限できるのでこの方法を採用している可能性が非常に高そうです。

実験

では、実際にPCを複数台用意してこの予測が間違いないのか試してみます。

まずは普通に送信。

ボタンを押して送信すると

送りたいURLを開いた状態でボタンを押すと

image by

SIGN

きちんとURLが受信された。

音を拾ったPCにURLが届く。

image by

SIGN

ボタンを押さずに音だけを鳴らす

予測が正しければ音さえ聞き取れば受信が可能なはずです。では次に、ボタンを押さずにあらかじめ録音しておいた音声データを再生してみます。

無反応……。

音を受け取った(はず)にも関わらずエラーメッセージすら表示されない。

image by

SIGN

どうやら音声だけでは、送受信できない仕組みのようです。なにやらGoogle Toneのボタン押すことが必須のようです。

考えられるのは、送信には音声を有効化するような、すなわち鍵のようなものが必要であり、Google Toneのボタンを押すことでそれが与えられる、というものです。あるいはボタンを押すことで短縮URLが生成されるといった可能性もあります。

ボタンを押すことでGoogleから鍵が送られる?

image by

SIGN

ボタンを押すと短縮URLが与えられ、それを音にして送信する?

image by

SIGN

ミュートしたPCでボタンを押して、あらかじめ録音した音声を鳴らす

次に、Chromeの音量をミュートした状態でボタンを押してみます。受信側には何も表示されませんでした。音でURLを送ると言っているのに音を鳴らさずともURLが届いたらおかしな話なので、当たり前といえば当たり前です。

では、それを確認した上で、次はGoogle Toneを騙しにかかってみましょう。ボタンを押すと同時に、先ほど録音した音声データを再生してみます。受信側には録音した音声しか聴こえないはずです。Google Toneは録音か生音かを聴き分けられるのでしょうか。

出た

ブラウザはミュートにしている。

image by

SIGN

きちんと通知されました。意外と簡単にGoogle Toneを騙すことができました。

別のURLから生成した音声を流す

ここで少しひねくれた実験をしてみます。ボタンを押した時に開いているサイトと、音声が示しているサイトに不一致を起こしてみましょう。具体的には以下のようなことをしてみます。

このサイト、『http://sign.jp』を開いた状態でボタンを押下するとほぼ同時に、あらかじめ録音した音声(https://www.google.com)を再生します。

SIGNを開いた状態で、Google Toneのボタンを押す。

ブラウザの音声はミュートしている。

image by

SIGN

なぜかSIGNのURLが届いた。

googleのトップページを送信した時の録音データを鳴らしたはずだが。

image by

SIGN

困った事態になりました。受信側に通知されたのはSIGN、つまり音声のURLではなく、ボタンを押した時に開いていたサイトでした。このボタンが鍵という考え方なら音声が運んでいるのはGoogleのURLのはずで、短縮URLをGoogleに生成してもらっているという考え方なら何も表示されないはずです。どうやら決定的な何かを間違えているようです。

『音声信号がURLとして認識され』ていない?

導き出される結論は恐らく一つ。どうやらGoogle Toneは音声でURLを運んでいるわけではないようです。

それではここで、Googleの説明文を参照してみましょう。

受信側のパソコンではその音声信号が URL として認識されます。

……きっと日本語にローカライズするプロセスで、都合よく解釈してしまったのかもしれません。念のため、英語版のGoogle Toneの説明文から上記に該当する部分も確認してみます。

It’s a browser extension that lets Chrome use your computer’s speakers to produce a special sound signature for other computers’ microphones to identify as a URL.

記者はそこまで和訳に自信はないのですが、『sound signature(音声信号)でURLをidentify(見極める)』というようなことが書いてあるように読めます。少なくとも『音とURLは関係がない』というようには読めません。どうやら事実と説明が食い違っているようです。

それでは音声信号が送っているものは一体なんなのか、あらたに仮説を立ててみます。

音で送られているのはGoogleアカウント情報?

そもそもこの拡張機能を使用するにはGoogleアカウントのログインが必要です。もしかすると送られているのはGoogleアカウントIDかもしれません。

仮説に則りながら検証をおこなってみましょう。ボタンを押した時に開いているアカウントと音声が示しているアカウントに不一致を起こしてみます。具体的には以下の通りです。

Googleアカウントをもう一つ用意し(ユーザ名:Yamamoto Yousuke)、そのアカウントにログインした状態でボタンを押し、録音しておいた音(ユーザ名:山本 陽介)を再生します。

結果

音とは関係なくボタンを押した人(Yousuke Yamamoto)からURLが届いた。

image by

SIGN

アカウントも違う……

出たのはYamamoto Yousukeでした。つまりボタンを押した方です。音によってアカウントIDが送られるのならば出てくるとしたら山本陽介のはずです。ということは音で運ばれているのはIDでもないようです

ならば次の仮説です。今までは送信側のPCは一台だけでした。インストール時に付与されたIDなどを用いて音はPCごとに分けられている、という可能性があります。ならばPCをもう一台用意してボタンを押し、元々のPCから録音した音を再生します。

PC、でもない……

結果だけを述べると、受信側に表示されたのは先ほどと同じくボタンを押したブラウザがログインしているアカウントおよびその時開いていたURLの通知でした。先ほどから送信されるURLとアカウント情報は音に関わらず、全てボタンを押した時に開いているページ、アカウントに依存しています

PCがダメなら回線だ

と、回線を変えてみましたが、結果は同じく、通知されたのはボタンを押したアカウントとURLだったので略します。

ただのON/OFFスイッチ?

ここまで来ると単にGoogle Toneから発せられる音はただの受信のON/OFFスイッチでしかないような気がしてきます。

だとしたら常に受信をONにしておけば、つまりPCに常にGoogle Toneの音を聴かせ続けていれば知らない人からURLの通知が届くのではないかと考え、録音した音をループで鳴らし続けてみましたが一時間待っても何処の誰からも何の通知もありませんでした。

ここまでのまとめ

ひとまずここまでわかったことを、挙げ損ねたことも加えて箇条書きにしてまとめます。

・Google Toneは音でURLを送っているわけではない
・Google Toneは音で短縮URLを送っているわけではない
・Google Toneは音でGoogleアカウント情報を送っているわけではない
・Google Toneは音でPCを識別しているわけではない
・Google Toneは音で回線を識別しているわけではない
・Google Toneの音を聴くことで受信がONになる鍵のように見えるがそれだけというわけでもない
・Google Toneが発する音は録音すると30分ほど鍵として有効に働くがそれ以降は使えなくなる。
・Google Toneはよく不具合を起こす。何度試しても使えない時はPCそのものを再起動をするとよい。
・Google Toneは受信、送信側のどちらもネットに繋がっている時だけ使える。
・Google Toneはたまに最初の二音ほどでURLを受信する。
・Google Toneは不必要に長いURLを送ると認識されない。
・Google Toneは二つ同時に同じくらいの音量で鳴らすと認識されない。
・Google Toneを使うと使用後しばらくして不定期に突然全てのアプリケーションの音量が突然下がることがある。再起動すると直る。

Google Copresence

一通りの実験を終えたところで、Google Toneのソースコードを確認してみると、どうやら送受信の仕組みに関してはGoogleのデータ共有・転送の仕組みである『CopresenceManager』に一任しているということが見えてきました。このCopresenceというのは未だに正式な提供はされていないようですが、どうやらBluetoothやLANなど複数の手段を用いて自身の周辺にいるユーザを取得して通信をおこなう機能のようです。

それならば、Copresenceの説明に則った書き方をするならGoogle Toneは自身の周辺にいるユーザ(アカウント)を音で判別していると考えられます。仮説に則って実験をおこなってみましょう。

Copresenceによって関連付けられていないユーザの音を鳴らす

さて、先ほどまで用意したアカウントは実は事前に送受信のテストを何度かおこなっていたので、全てCopresenceにより周辺にいるアカウントと判断され、同じグループに入れられたユーザとなっていました。今度はテストを一度もおこなっていない、どのユーザとも関連付けられていないアカウント(やまもと ようすけ)を用意します。

送信側(山本 陽介)はブラウザをミュートした状態でボタンを押し、受信側はあらかじめ録音していた自分自身の音をスピーカーとマイクをつなげて自分自身だけに聴かせます。

結果

無反応

これで反応が出たらもうお手上げだった。

image by

SIGN

受信側に何も表示されませんでした。箇条書きにした項目にあるようにGoogle Toneはよく不具合を起こすので受信に失敗しているだけかと思い、何度か再起動を交えながら試しましたが受信されることはありませんでした。

では、次は『やまもと ようすけ』と『山本 陽介』の二つのアカウントを通常のGoogle Toneの利用方法によってURLの送受信をおこない関連付けさせ、その状態で上記と同じテストをおこなってみます。

結果

出た

関連を付けさせた途端に。

image by

SIGN

先ほどまでの沈黙が嘘のように一回で出ました。この実験と今までの実験を総合するとGoogle Toneの仕組みは以下のようになります。

結論

Google Toneは送受信が一度おこなわれるとユーザが関連付けられ同じグループに入れられる。発せられる音に含まれているのは自分が所属しているグループ化に必要な情報であり、ボタンを押したアカウントのグループと受信した音のグループが同じ時にのみURLが受信される。

あるいは、Copresenceという機能に主眼を置くのならばこのように述べることもできます。

CopresenceはOSを問わず位置情報やBluetoothによって自身の周辺にいるユーザをグループ化しファイルの共有などを容易にする機能だが、位置情報は正確さに欠け範囲が広すぎ、Bluetoothは搭載されているデバイスが限られている。Google Toneはほぼどんなデバイスにも付いているマイクとスピーカーを使い『音の聴こえる範囲』という、より確実に周辺のユーザを決定することを可能としたCopresenceの一機能である。

Google ToneはPCにしか入れられないですが、CopresenceはAndroidやiOSなどで利用できる予定のようです。ということは、街を歩いていれば突然リックロールされる未来が来る、ということでしょうか。

なんだか先進的なのか一周回ってレトロフューチャーなのか判断しかねる未来ですが、なんだか楽しそうです。

REFERENCE:

Google トーン – Chrome ウェブストア