?
サポート

SpeechRecognizer インターフェース



概要

ユーザーのすべての発話はSpeechRecognizerを利用します。これは、Alexa Voice Service(AVS)のコアインターフェースです。ユーザーの音声をキャプチャし、Alexaが追加の音声入力を必要とする場合にクライアントにプロンプトを提示するためのディレクティブとイベントを提供します。

また、このインターフェースにより、クライアントは、Alexaがユーザー音声を理解して正しく応答できるように、Alexaとの対話がどのように開始されたか(押し続ける、タップしてリリースする、音声起動/ウェイクワードで起動するなど)をAVSに知らせ、製品に適したAutomatic Speech Recognition(ASR)プロファイルを選択できるようになります。

このページでは、以下のトピックを扱います。

  • SpeechRecognizerの状態ダイアグラム
  • SpeechRecognizerのディレクティブとイベント

状態ダイアグラム

以下のダイアグラムは、SpeechRecognizerコンポーネントによって制御される状態の変化を表しています。ボックスはSpeechRecognizerの状態、コネクターは状態の遷移を示します。

SpeechRecognizerには以下の状態があります。

IDLE: ユーザー音声をキャプチャする前、SpeechRecognizerはidle状態である必要があります。また、SpeechRecognizerは、AVSとの音声対話が完結した後もidle状態に戻る必要があります。これは、音声リクエストが正常に処理されたとき、またはExpectSpeechTimedOutイベントが発生したときに起こる可能性があります。

さらに、SpeechRecognizerが複数回にわたる対話中にidle状態に戻る場合があります。その場合、ユーザーからの追加の音声が必要になった時点で、ユーザーが新たな対話を開始しなくてもidle状態からexpecting speech状態に遷移する必要があります。

RECOGNIZING: ユーザーがクライアントとの対話を開始したとき、具体的にはキャプチャしたオーディオがAVSにストリーミングされたとき、SpeechRecognizerはidle状態からrecognizing state状態に遷移する必要があります。クライアントが音声の録音を停止(またはストリーミングを完了)するまではrecognizing状態を維持する必要があり、その時点でSpeechRecognizerコンポーネントはrecognizing状態からbusy状態に遷移する必要があります。

BUSY: 音声リクエストを処理する間、SpeechRecognizerはbusy状態にある必要があります。コンポーネントがbusy状態を脱するまで、別の音声リクエストを開始することはできません。SpeechRecognizerは、busy状態から、リクエストが正常に処理された(完了した)らidle状態に、また、Alexaがユーザーからの追加の音声を必要とするときにexpecting speech状態に、それぞれ遷移します。

EXPECTING SPEECH: SpeechRecognizerは、ユーザーからの追加のオーディオ入力を必要とするときにexpecting speech状態である必要があります。SpeechRecognizerは、ユーザーとの対話が発生したとき、またはユーザーの代わりに対話を自動的に開始したときにexpecting speech状態からrecognizing state状態に遷移する必要があります。指定されたタイムアウト期間内にユーザーとの対話がなかった場合は、idle状態に遷移する必要があります。

SpeechRecognizer State Diagram
クリックして拡大

Recognizeイベント

RecognizeイベントはAVSにユーザー音声を送信し、その音声を1つ以上のディレクティブに変換するのに使用されます。このイベントは、マルチパートのメッセージとして送信される必要があります。最初のパートはJSON形式のオブジェクト、2つ目のパートは製品のマイクでキャプチャされたバイナリオーディオです。キャプチャしたオーディオをAVSに送信する際は、レイテンシーを低減するためにストリーミング(チャンキング)することをお勧めします。ストリームには、チャンクごとに10ミリ秒のキャプチャしたオーディオ(320バイト)を含めるようにしてください。

profileパラメーターとinitiatorオブジェクトは、送信されているキャプチャしたオーディオを最もよく理解するにはどのASRプロファイルを使用すべきか、およびどのようにAlexaとの対話が開始されたかをAlexaに伝えます。

製品がウェイクワードによる起動に対応しており、ウェイクワード検証を使用している場合は、クライアントがクラウドベースのウェイクワード検証のストリーミング要件に従っていることを確認してください。

AVSに送信されるすべてのキャプチャされたオーディオは、以下のようにエンコードされる必要があります。

  • 16ビットのリニアPCM
  • 16kHzのサンプルレート
  • シングルチャネル
  • リトルエンディアンのバイトオーダー

プロトコルの具体例については、HTTP/2リクエストの構成を参照してください。

サンプルメッセージ

{
  "context": [
      {{...}}
  ],
  "event": {
    "header": {
      "namespace": "SpeechRecognizer",
      "name": "Recognize",
      "messageId": "{{STRING}}",
      "dialogRequestId": "{{STRING}}"
    },
    "payload": {
      "profile": "{{STRING}}",
      "format": "{{STRING}}",
      "initiator": {
        "type": "{{STRING}}",
        "payload": {
          "wakeWordIndices": {
            "startIndexInSamples": {{LONG}},
            "endIndexInSamples": {{LONG}}
          }
        }
      }
    }
  }
}

バイナリオーディオ添付ファイル

Recognizeイベントには、マルチパートのメッセージの一部として、対応するバイナリオーディオ添付ファイルが必要です。以下のヘッダーは、各バイナリオーディオ添付ファイルに必要です。

Content-Disposition: form-data; name="audio"
Content-Type: application/octet-stream

{{BINARY AUDIO ATTACHMENT}}

コンテキスト

Recognizeイベントは、クライアントにクライアントコンポーネントのステータスを送信するよう要求します。その他の情報については、コンテキストを参照してください。

ヘッダーのパラメーター

パラメーター 説明
messageId 特定のメッセージを表すのに使用される一意のID。 string
dialogRequestId Alexaに送信される各Recognizeイベントごとにクライアントが作成する必要のある一意の識別子。このパラメーターは、特定のRecognizeイベントの応答として送信されるディレクティブとの関連付けに使用されます。 string

ペイロードのパラメーター

パラメーター 説明
profile 製品に関連付けられたAutomatic Speech Recognition(ASR)プロファイルを示します。AVSでは、さまざまな距離からのユーザー音声に最適化された3つのASRプロファイルをサポートします。
有効な値は以下のとおりです。"CLOSE_TALK""NEAR_FIELD""FAR_FIELD"
string
format キャプチャされたオーディオの形式を示します。
有効な値は以下のとおりです。"AUDIO_L16_RATE_16000_CHANNELS_1"
string
initiator AVSとの対話がどのように開始されたかについての情報を含みます。
重要: initiator は次の場合に必要です。i) クラウドベースのウェイクワード検証を使用するウェイクワード対応の製品の場合。ii) ExpectSpeechディレクティブ内に含まれている場合。
object
initiator.type AVSへのオーディオのストリーミングを開始するためにユーザーによって実施されるアクションを表します。
有効な値は以下のとおりです。"PRESS_AND_HOLD""TAP"、および"WAKEWORD"
string
initiator.payload 種類、開始と終了のインデックスなどのinitiatorに関する情報を含みます。 object
initiator.payload.wakeWordIndices このオブジェクトは、クラウドベースのウェイクワード検証を使用するウェイクワード対応の製品にのみ必要です。
wakeWordIndices には、startIndexInSamplesendIndexInSamplesが含まれます。
object
initiator.payload.wakeWordIndices.startIndexInSamples ウェイクワードが開始するオーディオストリームのインデックスを(サンプル数で)表します。開始インデックスと検出されたウェイクワードとの誤差は、50ミリ秒以内である必要があります。 long
initiator.payload.wakeWordIndices.endIndexInSamples ウェイクワードが終了するオーディオストリームのインデックスを(サンプル数で)表します。終了インデックスと検出されたウェイクワードの終了との誤差は、150ミリ秒以内である必要があります。 long

Profiles

ASRプロファイルは、異なる製品、フォームファクター、音響環境、ユースケースに合わせて調整されます。profileパラメーターの有効な値の詳細については、後述の表を参照してください。

最適な聞き取り距離
CLOSE_TALK 0~2.5フィート
NEAR_FIELD 0~5フィート
FAR_FIELD 0~20フィート以上

Initiator

initiatorパラメーターは、Alexaとの対話がどのように開始されたかをAVSに伝え、このパラメーターにより次の2つのことが決定します。

  1. クラウド内で音声の終わりが検出されたときに、StopCaptureをクライアントに送信するかどうか。
  2. ストリーム上でクラウドベースのウェイクワード検証を実行するかどうか。

initiator は、各SpeechRecognizer.Recognizeイベントのペイロードに含まれる必要があります。有効な値は次のとおりです。

説明 サポートされるプロファイル(複数可) StopCaptureが有効かどうか ウェイクワード検証が有効かどうか ウェイクワードインデックスが必要かどうか
PRESS_AND_HOLD ボタン(物理またはGUI)を押すことにより開始され、リリースすることにより終了するオーディオストリーム。 CLOSE_TALK N N N
TAP ボタン(物理またはGUI)をタップしてリリースすることによって開始され、StopCaptureディレクティブを受信したときに終了するオーディオストリーム。 NEAR_FIELDFAR_FIELD Y N N
WAKEWORD ウェイクワードの使用によって開始され、StopCaptureディレクティブを受信したときに終了するオーディオストリーム。 NEAR_FIELDFAR_FIELD Y Y Y

StopCaptureディレクティブ

このディレクティブは、AVSがユーザーインテントを識別した後、または音声の終わりが検出されたときに、ユーザー音声のキャプチャを停止するよう、クライアントに指示します。このディレクティブを受信すると、クライアントは直ちにマイクをクローズし、ユーザー音声の聞き取りを停止する必要があります。

サンプルメッセージ

{
  "directive": {
        "header": {
            "namespace": "SpeechRecognizer",
            "name": "StopCapture",
            "messageId": "{{STRING}}",
            "dialogRequestId": "{{STRING}}"
        },
        "payload": {
        }
    }
}

ヘッダーのパラメーター

パラメーター 説明
messageId 特定のメッセージを表すのに使用される一意のID。 string
dialogRequestId 特定のRecognizeイベントの応答として送信されるディレクティブとの関連付けに使用される一意のID。

注: dialogRequestIdは、音声リクエストの応答としてのみ送信されます。dialogRequestId は、ダウンチャネルストリーム上のクライアントに送信されたディレクティブには含まれません
string

ExpectSpeechディレクティブ

ExpectSpeech は、Alexaがユーザーのリクエストに応えるために追加の情報を必要とする場合に送信されます。クライアントに、マイクを有効にし、ユーザー音声のストリーミングを開始するよう指示します。指定されたタイムアウト期間内にマイクが有効にならない場合、クライアントからAVSにExpectSpeechTimedOutイベントを送信する必要があります。

Alexaとの複数回に及ぶ対話中、デバイスは、クライアントにユーザー音声の聞き取りを開始するよう指示するSpeechRecognizer.ExpectSpeechディレクティブを1つ以上受信します。SpeechRecognizer.ExpectSpeechディレクティブのペイロードに含まれるinitiatorの値は、後続のSpeechRecognizer.Recognizeイベント内でinitiatorとして渡される必要があります。

オーディオの優先順位付けを管理するルールについては、対話モデルを確認してください。

サンプルメッセージ

{
  "directive": {
    "header": {
      "namespace": "SpeechRecognizer",
      "name": "ExpectSpeech",
      "messageId": "{{STRING}}",
      "dialogRequestId": "{{STRING}}"
    },
    "payload": {
      "timeoutInMilliseconds": {{LONG}},
      "initiator": "{{STRING}}"
    }
  }
}

ヘッダーのパラメーター

パラメーター 説明
messageId 特定のメッセージを表すのに使用される一意のID。 string
dialogRequestId 特定のRecognizeイベントの応答として送信されるディレクティブとの関連付けに使用される一意のID。 string

ペイロードのパラメーター

パラメーター 説明
timeoutInMilliseconds タイムアウトにする前にマイクを有効なままにする時間をミリ秒で指定します。 long
initiator AVSからクライアントに渡される参照値。この値は、後続のRecognizeイベントのinitiatorとして、AVSに返信する必要があります。 string

ExpectSpeechTimedOutイベント

このイベントは、ExpectSpeechディレクティブを受信したが、指定されたタイムアウト期間内ではなかった場合に、AVSに送信される必要があります。

サンプルメッセージ

{
  "event": {
        "header": {
            "namespace": "SpeechRecognizer",
            "name": "ExpectSpeechTimedOut",
            "messageId": "{{STRING}}",
        },
        "payload": {
        }
    }
}

ヘッダーのパラメーター

パラメーター 説明
messageId 特定のメッセージを表すのに使用される一意のID。 string

ペイロードのパラメーター

なし

その他のインターフェース

このドキュメントの最初に戻り、右側のサイドバーから、その他のインターフェースを参照してください。

リソース