Android端末に任意のボイス・コマンドを追加したいと妄想

自分が現在所有するBluetoothヘッドセット3種---左よりMobifren GBH-S100p, BH-M20, WK-100

自分が現在所有するBluetoothヘッドセット3種—左よりMobifren GBH-S100p, BH-M20, WK-100

Android端末をボイス・コマンドで操作したい。しかも、予め用意されているものだけでなく、自分で任意に定義したい。

想定しているのは、Bluetoothヘッドセットのボタンを押してボイス・コマンドを与えるような形態。もちろんボタンを押す必要もなく、完全にハンズ・フリーでできれば理想的だが、そんなことをすれば常時待機させねばならず、バッテリ消費が半端なく、使える時間が極めて短くなってしまうだろう。

もともと標準で、ヘッドセットのcallボタンを押すと、実に野暮ったいボイス・ダイヤラ アプリが起動するようになっているのだが、これの代わりにGoogle Nowアプリ(最近ではGoogleアプリ)が起動してくれると嬉しい。端末本体でもホームボタンの長押しでGoogle Nowアプリ(正確にはボイス・アシスタンス・アプリ全般)が立ち上がるのでそれとも操作の統一が取れる。

Reassign Your Bluetooth ‘Phone’ Button to Open Google Now“を見つけたのでBluetooth Launchで実現。古い「一発芸」アプリで、UIにも配慮が全くないため、文字が凄まじく小さく表示されて老眼の自分にはきつかった。これでは任意のアクティビティを開始できるが、BT GNowはGoogle Nowに特化している(”Replace Android’s Voice Dialer with Google Now for Better Bluetooth Dialing « Android Gadget Hacks“)。いわば「一発芸中の一発芸」アプリだが、こちらは最近までメンテされているので、Android OSのバージョンが上がってBluetooth Launchに互換性の問題が出てきたらこちらも検討しよう。

更に細かくヘッドセットのボタンのリマッピングをしたいのなら、Smart Bluetooth Headset FREEが利用できよう。

ちなみに、今までそんな注意を払ったことがなかったが、ひとえにBluetoothヘッドセットと言っても用意されてるボタンに違いがある。Mobifren GBH-S100pにはメディア・開始/ストップボタンとは別にダイヤルキーがある。BH-M20、WK-100はそれがどうやら一つのボタンに集約されている模様。

さて、上述のようにBluetooth Launchで用は足りるはずだが、Automateも考慮した。これは後で述べるように、いずれにせよGoogle Nowが音声認識をした後の処理に使うつもりだが、Automate Media button アクションブロックを利用すれば、ボタンを押されたことをトリガーにGoogle Nowを立ち上げることもできるはず。しかし、実際テストしてみると、WK-100のボタンの押し下げを認識しなかったりしたので、Google Nowの立ち上げについては上の方法で済ませることにした。

任意のボイス・コマンドを追加する方法。Commandr for Google Nowは予め決められたボイス・コマンドを追加できるだけなので自分の用途には適さない。カスタム・ボイス・コマンドが設定できるものとしては、utter!, KLets, AutoVoiceがあるが、それに対するアクションとしてはごく単純なもの(アプリの起動等)を除くと、アクティビティーの起動、そしてそれ以上のものとしては結局Taskerのタスクとして定義したものでなくてはならない。

既にTaskerのユーザなら、特にボイス・コマンドで起動したいタスクを既にプログラムしているのならもうTasker一択だろうが、そうでない自分としてはよりとっつきやすそうなAutomateの方がよいような。Taskerでは音声認識の結果をもらうところを他のアプリに頼らないといけないが、Automateは自前でできる。ただ、外部アプリからTaskerのタスクを起動したいときにはAutomateでは対応できない。AutomateはTasker/Localeプラグインにも対応しているのだが。

さて、ボイス・コマンドが完全に定型のものではなく、いくらかの自由度があるのであれば原始的な形にしろパーズが必要になる。そこをコーディングしようとするとAutomate単独には荷が重い。なにせ正規表現すら扱えないTaskerは扱える)⇒”Automate Functions“には正規表現を使った関数がいくつか提示されている。ただし正規表現のシンタックスについての明示的説明はない。シェル・コマンドを起動することはできるので、ashで頑張るか(busyboxも併用して?)するしかないのかも。Lua等スクリプト言語を使用するにも、SL4Aは未だにアルファ状態でGoogleがこれから力を入れていくとは思いがたい(現在のリポジトリ。オリジナルにあった情報が落ちているらしく、オリジナルが閉鎖される前にフォークされたもの)。

余談:LuaでiOS/Android(WindowsやMac OSも将来的には)アプリを作成できるCorona SDK | Corona Labs

ちなみにWK-100をこの用途に使うことを想定していたが致命的欠陥が。音声入力がうまくいかない。今まで主に音楽やポッドキャストを聞いたり、あるいは運動時に自分の心拍数を聞くのにだけ使って通話に使うことがなかったので今の今まできづかなかった。

広告

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中