フューチャーホームコントローラーを支えなかった技術 DTMF


フューチャーホームコントローラーの技術解説を書いてます。
フューチャーホームコントローラーは、声でしゃべるだけで様々な家電を操作できる未来的ガジェットです。(写真の手前にあるのは名刺のです。)
http://rti-giken.jp/


今回は、フューチャーホームコントローラー用の初期化用に検討したものの、精度の問題がでて利用しなかった、DTMFを説明します。

DTMF

DTMFというのは、ピポパとかの音で通信するやつです。
電話を押した時とかにピポパとか鳴るやつです(たぶん)。

2つの周波数帯に 0123456789ABCDEF と16個のコードが割り振らていて、
情報を音に変えて、送信するみたいです。
(あんまり詳しくないから違うかもしれん)

情報 --> 音に変換 (ピポパ)--> 音を受信 --> 情報に変換

ディスプレイがないネットワークデバイスでのランデブー

FHCには、ディスプレイやキーボードがありません。
そして、ネットワークデバイスです。

と、いうことは、なんとかしてLANに接続しなければいけません。
大抵の人の家ではルーターに付属してくるDHCPサーバがありますが、
そうでないところもあります。
そーゆーところで、イカにしてLANに接続するか?ってゆーのはとても大きな課題です。

FHCの初期化方法を考えていた時に、音声認識でマイクが付くんだからDTMFで初期化信号を送ってキャッチすればよくね?って考えました。

DTMFで自由に使えそうなライセンスのライブラリがいくつかあります。

初期化音を聴かせると、端末を初期化するとか、なんかSFチックでわくわくします。
スペースコブラを始め、エロゲを含めてSFには、ピアノ型コンピュータという謎のものが登場しています。
なんか、ピアノをじゃーんと引くと、処理が行われます。
なんでピアノなのか謎の部分もありますが、音で情報をやり取りしていると考えれば納得がいきます。

初期化音を聴かせると、初期化するなんて、素敵じゃないですか。
HTML5とかでwebブラウザで音が鳴らせるんですから、
ユーザには、専用のページをPC等で開いていただいて、そこで設定すると、初期化音が鳴って、FHCが初期化されるとかすれば、
ネットワークの設定もブラウザでできるし、超クールと思いました。

ただ、、

ケーブル直繋ぎじゃないと精度がでない

ただ、、残念ながら、フリーで公開されているDTMFのライブラリでは精度がでませんでした。
ライブラリによっては、ラインケーブルで直繋ぎして音を送信すると正しく認識したりしますが、
空気を挟む、つまりスピーカーと、その横においたマイクでやってみると、データが化けまくってしまいました。

ラインケーブルを付属するという案もありましたが、結局コスト増になってしまうため、
DTMFで初期化音を送信するという案は消えてなくなりました。
1週間ほど格闘したのですが、どうすることもできませんでした。

なんかもっとチューニングされた商用のライブラリとかだともっと精度がでるとかいう話も聞いたことがありますが、、、
ただでさえ予算がないプロジェクトなので、コスト増はさけたいところでして・・・

ソースコード

DtmfDetector.cpp とか、

/** Author:       Plyashkevich Viatcheslav <plyashkevich@yandex.ru> 
 *
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU Lesser General Public License 
 * All rights reserved. 
 */


dtmf.cppとか、

/*
 * ----------------------------------------------------------------------------
 * "THE BEER-WARE LICENSE" (Revision 42):
 * <phk@FreeBSD.org> wrote this file.  As long as you retain this notice you
 * can do whatever you want with this stuff. If we meet some day, and you think
 * this stuff is worth it, you can buy me a beer in return.   Poul-Henning Kamp
 * ----------------------------------------------------------------------------
 *
 * Extract DTMF signals from 16 bit PCM audio
 *
 * Originally written by Poul-Henning Kamp <phk@freebsd.org>
 * Made into a C++ class by Roger Hardiman <roger@freebsd.org>, January 2002
 *
 * $Revision: 23725 $
 * $Author: rjongbloed $
 * $Date: 2009-10-28 22:11:42 -0500 (Wed, 28 Oct 2009) $
 */

を、使ってみるといいと思います。
全部入れると長くなるので、テストで作った超いい加減なソースコードをzipしてみました。
それぞれのライブラリのライセンスに従って利用してください。
http://rtilabs.net/files/2013_02_17/dtmf.zip