macOS アクセシビリティ API は、あるアプリケーションが他のアプリケーションのキーボード入力を送信して、その内容を読み取ることを可能にするフレームワークです。音声入力の場合、トランスクリプションエンジンが生成したテキストをあなたが作業していたアプリに直接入力できます。クリップボードを経由したり、合成キーストロークを使わずにすみます。
音声入力アプリがどのように使うか
プッシュ・トゥ・トークキーを持ったまま話すと、音声入力アプリは3つのステップを実行します:
- 音声をテキストにトランスクライブする。
- テキストが着地する場所を決定する。 この決定はキーを放すときではなく、キーを押した瞬間に行われます。言葉を持つ前にアプリはどのウィンドウに入力するかを知っておく必要があるからです。
- アクセシビリティ API を使ってテキストを入力する。ターゲットアプリが対応していない場合はペーストにフォールバック。
アクセシビリティ API は直接ルートです。これは macOS に「これらの言葉をフォーカスのあるテキストフィールドに入力してください」と指示します。実際のキーストロークではありません(キーボード設定を通さず、キーボードショートカットをトリガーしません)。またクリップボード操作でもありません(クリップボードを変更しないでペーストが必要な場合は元の内容を復元します)。
ペーストにフォールバックするとき
一部のアプリケーションはアクセシビリティ API をサポートしていません。これには以下が含まれます:
- パスワードフィールド。ほとんどのアプリがセキュリティ上の理由からペーストをブロック。
- 非常に古い、または署名されていないアプリ。システムにテキスト入力インターフェースを公開していないかもしれません。
- 一部のターミナルエミュレータと Unix ツール。実際のキーストロークではなく高レベルのテキスト挿入を期待します。
- サンドボックス化されたアプリ。入力のまわりに権限制限がある場合があります。
アプリがアクセシビリティ API テキスト入力をサポートしていない場合、音声入力アプリはフォールバック:テキストをクリップボードにコピーして、シミュレート ⌘V を送信し、ペースト前のクリップボード内容を復元します。これはほぼすべてのアプリで機能しますが、遅く、すでにコピーしていたものは失われてから復元する必要があります。パスワードフィールドでは特殊なルールが適用されており、このシステム制限を理解することが重要です。
権限について
アクセシビリティ API を使用するには、アプリはシステムに権限をリクエストする必要があります。macOS はカーネルレベルでこれを強制します。ユーザーが明示的に許可しない限り、プロセスは API を使用できません。システム設定の「プライバシーとセキュリティ」に権限が表示されます。いつでも取り消すことができます。取り消すとアプリが完全に壊れてしまい、他のアプリに入力する方法がありません。
これはスクリーンリーダーが使う権限と同じもので、Sticky Keys と Voice Control が依存している権限です。音声入力アプリに限った権限ではありません。
これが重要な理由
音声入力ツールはこのシステム境界の上に構築されています。どんな音声入力アプリの速度、信頼性、動作は、このアクセシビリティフレームワークが提供するものと各オペレーティングシステムのバージョンが強制するものに依存しています。これが、音声入力ツールが正確にこのアクセシビリティフレームワークが許可する機能のみを約束できる理由です。あなたの実際のキーボードへの本当のアクセスや隠れたバックグラウンドリスナーが必要な機能は不可能なのです。