Cats and Dogs

現像ノートSeason 6STIL.HUB第 4 話 / 全 6 話

現像ノート

iPhone で話して、Mac で打つ ── 頼むのを、やめた

手元のボタンひとつで、Mac の音声入力を立ち上げたい。最初の計画は、それだけでした。ところが、どう頼んでも Mac は聞いてくれない。粘った末に、頼むのをやめました。Mac に聞かせるのではなく、iPhone が聞けばいい。回り道の先に、このアプリでいちばん気に入っている機能ができた話です。

iPhone で話して、Mac で打つ ── 頼むのを、やめた

前回は、返事を確かめる話でした。今日は、頼み方そのものを変えた話です。

最初の計画は、ささやかだった

やりたかったことは、ささやかでした。Mac には、キーを二度押しすると音声入力が立ち上がる仕組みがあります。あれを、手元のボタンから起こしたい。デッキに「音声入力」ボタンを置いて、押したら Mac がマイクを開いて、あとは話すだけ ── そういう計画です。

STIL.HUB はキー操作を Mac に送れるので、その「二度押し」を送ればいい。簡単なはず、でした。

Mac は、聞いてくれない

送ってみると、何も起きません。ログの上では、キーは届いて、実行されている。でも、音声入力は立ち上がらない。

調べると、修飾キー(control など)を単体で送るには、通常のキー操作とは別の、専用の送り方が要ると分かりました。そこを直して、たしかにキーは正しく届くようになった。それでも、立ち上がらない。今度は、二度押しの検出そのものが、どうやら物理のキーボードの層で行われているらしく、ソフトウェアで合成したキーには反応しないのです。

さらに悪いことに、実機では「音声入力を有効にしますか」という確認の窓が、押すたびに何度も出てくる状態になりました。立ち上がりはしないのに、確認だけが積み上がっていく。こじ開けようとするほど、泥沼になっていく手応えがありました。

頼むのを、やめた

そこで、前提を疑うことにしました。そもそも、なぜ Mac に聞かせようとしているのか。

マイクなら、手元の iPhone にも付いています。それも、いつも口元の近くにある。声を文字にする仕組みも、iPhone は端末の中に持っています。だったら、Mac の音声入力を遠隔でこじ開けるのではなく、iPhone が聞いて、文字にして、その文字を Mac に打ち込めばいい。

Mac 側から見れば、届くのはただの文字入力です。特別な許可も、こじ開ける対象も、確認の窓もない。キー操作を送る道は最初からあるのだから、その道に、音声認識の結果を流すだけ。方針を変えてからは、驚くほどまっすぐに進みました。文字はクリップボードを経由せずに打ち込むので、Mac 側のコピー履歴も汚しません。日本語の文章を打ち込んで、保存して、読み戻して一字も違わないことを確かめました。

もうひとつの回り道

実は、この機能にはもうひとつ小さな回り道があります。最初は、iPhone のキーボードに付いているマイク(音声入力キー)を使ってもらう設計でした。ところが、キーボードの音声入力は、認識する言語がキーボードの言語に引きずられて、日本語と英語のキーボードを併用していると、日本語のつもりが英語で認識されることがある。

なので、アプリの中に音声認識を持たせました。端末の言語で、端末の中で認識する。ボタンを押して、話して、送る。ここで使っているのは、声のアプリ NOTE と同じ、iPhone の中の音声認識です。家族の中で、技術が合流した瞬間でした。

土俵を、変える

この一件で覚えたことは、こうまとめられます。相手の仕組みをこじ開けられないときは、土俵を変える。「Mac の機能を遠隔で起こすには」という問いに粘っていましたが、答えは「起こさなくていい」でした。

マイクは口元にあるほうがいい。認識は端末の中でやればいい。Mac には、結果の文字だけ渡せばいい。いま STIL.HUB でいちばん気に入っている機能は、諦めた計画の跡地に建っています。

次回

こんどは、コードの外の話です。App Store に提出したら、サブタイトルの「iPhone を、」という言葉が使えないと指摘されました。言葉を差し替えて回った話をします。

STIL.HUB は App Store で公開しています。

App Store で STIL.HUB を入手