オープンキャンパス発表会

8/19にあったオープンキャンパスでの学生発表会で"PiPoPaPoPi"を発表しました。
このプログラムは、電話の通信システムであるDTMFを使用して短縮URLの下5,6桁を送受信することによってURLを伝達するプログラムです。

開発動機

toneconnectというサービスが存在し、それを自分で作ってみたいなと以前から思ってました。android iOS Chrome拡張版が公開されてます。ニッポン放送の番組で音のQRコードとして開発がすすめられてました。
Tones connect the World. | Toneconnect

DTMFについて

DTMFとは、プッシュ方式の電話機などで、ボタンを押すたびに発信される音。プッシュ音、トーン信号と呼ばれることもある。1つのボタンを押すと2種類の高さの音が発信されるようになっており、交換局はこの信号音を元に電話番号を割り出す。高音系4種類と低音系4種類からそれぞれ1音ずつを組み合わせるため、「0」から「9」までの数字、「*」「#」、「A」から「D」までのアルファベットの、合わせて16種類を表現することができる。

引用サイト:DTMFとは|Dual Tone Multi-Frequency - 意味/解説/説明/定義 : IT用語辞典
今回は、0~9までの数字,A~Dのアルファベット、そして*,#をE,Fとして使用した。

送信側

URLを短縮URLに変換

google APIのURL Shortenerを使用して短縮URLを発行する。

DTMFに変換

短縮URLの下5,6桁の英数字をDMTFに変換するのに、小文字のaから大文字のXまでをアルファベット+数字の2音で表した。ただし、数字は1音。

DTMFの再生

一定間隔で音を再生する。
ただし、音量が大きすぎると、受信側が音割れを起こしてしまう。

受信側

マイクから拾った音をフーリエ変換

ここについてはしらん
とにかく、周りの一番大きい音の周波数と二番目に大きい音の周波数の二つを検出し、それがDTMFの周波数に一致してたら、0~9,A~Fに変換。

短縮URLの復元

受信した0~9,A~Fをもとのアルファベット+数字になおす。

open

この得られたアルファベット+数字の前にhttps:goo.gl/を加えてサイトを開く。
以上のような仕組みで組みました。

反省点

  • 読み取りの間違いによって期待したサイトと別のサイトが開くことがありプレゼンでデモをするのは非常に危険である。
  • 受信のデータから文字列を取り出す処理の例外処理が甘かった。
  • 短縮URLを発行してる時間が長い。(一回発行したものはローカルで保存しててもいいかも)

苦労した点

  • 初めてだったので短縮URLの発行のためのPOSTのやり方に苦戦した。
  • 二番目に大きい周波数の求めること。
  • 受信した連続的な文字列からデータを抽出すること。

高校時代から作ってみたい系の事が出来たのでよかったです。
今回も3846先輩(google API関係)とあと、KOGUCHI(フーリエ変換関係)に協力していただきました。
本当にありがとうございました。
今度はこれをwebブラウザ上で色々出来るようにやってみようと思います。後期期間中になるかもしれません。