Java Speech API (JSAPI) は、コマンドおよびコントロール認識装置、ディクテーション システム、音声合成装置をクロスプラットフォームでサポートするためのアプリケーション プログラミング インターフェイスです。JSAPI はインターフェイスのみを定義しますが、 FreeTTSなど、サードパーティによって作成された実装がいくつかあります。[引用が必要]
コア技術
Java Speech APIでは、音声合成と音声認識という2つのコア音声技術がサポートされています。[1]
音声合成
音声合成は、アプリケーション、アプレット、またはユーザーによって生成されたテキストから合成音声を生成する逆のプロセスを提供します。これは、テキスト読み上げテクノロジと呼ばれることがよくあります。
テキストから音声を生成する主な手順は次のとおりです。
- 構造分析: 入力テキストを処理して、段落、文、その他の構造の開始と終了を決定します。ほとんどの言語では、この段階で句読点と書式設定データが使用されます。
- テキスト前処理: 入力テキストを分析して、言語の特殊な構成を検出します。英語では、略語、頭字語、日付、時刻、数字、通貨金額、電子メール アドレス、およびその他の多くの形式に特別な処理が必要です。他の言語では、これらの形式に特別な処理が必要であり、ほとんどの言語にはその他の特殊な要件があります。
最初の 2 つのステップの結果は、書かれたテキストの音声形式です。以下は、書かれたテキストと話し言葉の違いの例です。
セント・マシュー病院はメインストリートにあります。 -> 「セントマシュー病院はメインストリートにあります」 口座番号55374に20ドルを追加します。 -> 「口座に20ドル追加してください。55、374。」
残りの手順では、話されたテキストを音声に変換します。
- テキストから音素への変換: 各単語を音素に変換します。音素は言語の音の基本単位です。
- 韻律分析: 文の構造、単語、音素を処理して、文に適切な韻律を決定します。
- 波形生成: 音素と韻律情報を使用して、各文のオーディオ波形を生成します。
音声合成装置は、上記の処理手順のいずれにおいてもエラーを起こす可能性があります。人間の耳はこれらのエラーを検出するようによく調整されていますが、開発者が注意深く作業することでエラーを最小限に抑え、音声出力の品質を向上させることができます。
音声認識
音声認識は、コンピューターに話し言葉を聞き、何が話されたかを判断する機能を提供します。つまり、音声を含むオーディオ入力をテキストに変換して処理します。
一般的な音声認識装置の主な手順は次のとおりです。
- 文法設計: ユーザーが話す可能性のある単語と、その単語が話されるパターンを定義します。
- 信号処理: 入力オーディオのスペクトル (つまり周波数) 特性を分析します。
- 音素認識: スペクトル パターンを、認識対象の言語の音素のパターンと比較します。
- 単語認識: 可能性のある音素のシーケンスを、アクティブな文法で指定された単語および単語のパターンと比較します。
- 結果生成: 認識エンジンが入力オーディオで検出した単語に関する情報をアプリケーションに提供します。
文法は、ユーザーが発話すると予想される単語と、それらの単語がどのようなパターンで出現するかを示す Java Speech API のオブジェクトです。文法は認識プロセスを制約するため、音声認識装置にとって重要です。これらの制約により、認識装置は奇妙な文をチェックする必要がなくなるため、認識がより高速かつ正確になります。
Java Speech API 1 は、ルール文法とディクテーション文法という 2 つの基本的な文法タイプをサポートしています。これらのタイプは、アプリケーションが文法を設定する方法、許可される文のタイプ、結果の提供方法、必要な計算リソースの量、アプリケーション設計での使用方法など、さまざまな点で異なります。ルール文法は、JSAPI 1 でJSGF (Java Speech Grammar Format) によって定義されています。
Java Speech APIのクラスとインターフェース
Java Speech API を構成するさまざまなクラスとインターフェースは、次の 3 つのパッケージにグループ化されています。
- javax.speech : 汎用音声エンジン用のクラスとインターフェースが含まれています。
- javax.speech.synthesis : 音声合成用のクラスとインターフェースが含まれています。
- javax.speech.recognition : 音声認識用のクラスとインターフェースが含まれています。
EngineManager クラスは、すべての Java Speech API アプリケーションで使用されるファクトリ クラスのようなものです。このクラスは、音声合成エンジンと音声認識エンジンへのアクセスを可能にする静的メソッドを提供します。Engine インターフェイスは、Java Speech API 準拠の音声エンジンが音声アプリケーションに提供する必要がある汎用操作をカプセル化します。
音声アプリケーションは、主にメソッドを使用して、音声エンジンのプロパティと状態の取得、音声エンジンのリソースの割り当てと割り当て解除などのアクションを実行できます。さらに、Engine インターフェイスは、音声エンジンによって生成または処理されたオーディオ ストリームを一時停止および再開するメカニズムを公開します。AudioManager はストリームを操作できます。Engine インターフェイスは、追加の音声合成および音声認識機能を定義する Synthesizer インターフェイスと Recognizer インターフェイスによってサブクラス化されます。Synthesizer インターフェイスは、音声アプリケーション用の Java Speech API 準拠の音声合成エンジンの操作をカプセル化します。
Java Speech API はイベント処理に基づいています。音声エンジンによって生成されたイベントは、必要に応じて識別および処理できます。音声イベントは、EngineListener インターフェース、具体的には RecognizerListener および SynthesizerListener を通じて処理できます。
関連仕様
Java Speech API は、Java Community Process (JCP) 以前に作成され、Java Platform, Standard Edition (Java SE) を対象としていました。その後、JCP の下で JSR 113 として Java Speech API 2 (JSAPI2) が作成されました。この API はJava Platform, Micro Edition (Java ME) を対象としていますが、Java SE にも準拠しています。
参考文献
- Sun/Oracle による Java Speech API FAQ
- JSAPI 1 の JavaDocs
- オープンソース JSAPI 2 ラッパー
- この技術はさまざまなセキュリティ目的で使用されています
