セレクター(APL for Audio)



セレクター(APL for Audio)

Selectorコンポーネントは、利用可能なクリップの配列の中から選択した1つのオーディオクリップをレンダリングします。Selectorは、各オーディオクリップを定義する子コンポーネントの配列とあわせて指定します。それにより、Selectorは、whenプロパティがtrueに評価された最初の子コンポーネントのオーディオをレンダリングします。

プロパティ

Selectorコンポーネントには基本コンポーネントプロパティのほかに次のプロパティがあります。

プロパティ デフォルト 説明
item/items コンポーネントの配列 なし 子コンポーネントの配列です。
data 配列 [ ] コンポーネントに対してマッピングするデータの配列です。
strategy 文字列 normal 子を選択するために使用する戦略です。有効な値は、normalrandomItemrandomDatarandomItemRandomDataです。

item/items

レンダリングする子コンポーネントです。コンポーネントを複数指定した場合は、whenプロパティで選択された最初のSelectorコンポーネントが使用されます。

data

反復処理され評価されるデータの配列です。

  1. data配列が空の場合、Selectitems配列でwhentrueと評価された最初のコンポーネントをレンダリングします。コンポーネントは、1つの子のみのインフレートを使用します。

  2. データ配列に複数の項目がある場合、Selectorコンポーネントはdata配列を反復処理し、items配列の各コンポーネントで、データ配列の各項目のwhenプロパティがtrueかどうかをチェックします。データバインディングコンテキストは、dataプロパティ、indexプロパティ、lengthプロパティを使って拡張されます。Selectorコンポーネントは、1つのコンポーネントを選択してレンダリングすると終了します。データ配列の反復処理を続行することはありません。

反復処理中に、データバインディングコンテキストは次のプロパティで拡張されます。

名前 説明
data データ配列のプロパティから割り当てられたデータです。
index 現在のデータ項目のゼロから始まるインデックスです。
length データ配列内のデータ項目の総数です。

これらのプロパティは、data配列プロパティに1つ以上の項目が含まれている場合に設定されます。

strategy

レンダリングする項目を決定する選択戦略です。指定された戦略によって、Selectorコンポーネントがレンダリングする項目をどう選択するかが決まります。

strategyの値により、次の動作がトリガーされます。

  • normalwhen句がtrueに評価された最初の項目をレンダリングします。
    • data配列が空の場合、Selectorコンポーネントは、items配列の項目のうち、when句がtrueの最初のコンポーネントを選択してレンダリングします。
    • data配列が空でない場合、Selectorコンポーネントは、components配列の各コンポーネントを順番にチェックし、data配列のwhen句がtrueの項目を探します。データバインディングコンテキストは、dataプロパティ、indexプロパティ、lengthプロパティをバインドすることで拡張されます。Selectorコンポーネントは、1つのコンポーネントをレンダリングすると終了し、データ配列の反復処理を停止します。
  • randomItemwhen句がtrueに評価されたランダムな項目をレンダリングします。
    • data配列が空の場合、Selectorコンポーネントはすべての子コンポーネントのwhen句を評価し、when句がtrueの項目を1つ選択してレンダリングします。
    • data配列が空でない場合、Selectorコンポーネントはデータ配列の項目を順に評価し、項目ごとに1回ずつランダム選択操作を行います。データバインディングコンテキストは、dataプロパティ、indexプロパティ、lengthプロパティをバインドすることにで拡張されます。Selectorコンポーネントは、1つのコンポーネントをレンダリングすると終了し、データ配列の反復処理を停止します。
  • randomDatawhen句がtrueに評価された最初の項目、data配列のランダムインデックスから選択された項目のいずれかをレンダリングします。
    • data配列が空の場合、Selectorコンポーネントは、items配列の項目のうち、when句がtrueの最初のコンポーネントを選択してレンダリングします。normal戦略と同様です。
    • data配列が空でない場合、Selectorコンポーネントはdata配列のランダムインデックスでnormal戦略を実行します。コンポーネントがレンダリングされない場合、Selectordata配列の別のランダムインデックスでnormal戦略を実行します。このプロセスは、1つのコンポーネントがレンダリングされるか、data配列のすべての項目を評価し終わるまで繰り返されます。
  • randomItemRandomData – 空のdata配列の場合はrandomItem戦略を使い、空でないdata配列の場合はrandomData戦略を使います。
    • data配列が空の場合、Selectorコンポーネントはすべての子コンポーネントのwhen句を評価し、when句がtrueの項目を1つ選択してレンダリングします。randomItem戦略と同様です。
    • data配列が空でない場合、Selectorコンポーネントはdata配列のランダムインデックスでnormal戦略を実行します。コンポーネントがレンダリングされない場合、Selectordata配列の別のランダムインデックスでnormal戦略を実行します。このプロセスは、1つのコンポーネントがレンダリングされるか、data配列のすべての項目を評価し終わるまで繰り返されます。randomData戦略と同様です。

基本のSelector

以下は、ドキュメント内の基本的なSelectorコンポーネントをデータソースにバインドする例です。${payload.myData.name}に空の文字列が含まれる場合、Selectorは最初のSpeechコンポーネントをレンダリングします。それ以外の場合、Selectorは、2つ目のSpeechコンポーネントをレンダリングします。このコンポーネントにもnameプロパティが含まれます。

クリップボードにコピーされました。

{
  "type": "Selector",
  "items": [
    {
      "type": "Speech",
      "when": "${payload.myData.name == ''}",
      "content": "こんにちは。 まだお名前を聞いていませんでした。"
    },
    {
      "type": "Speech",
      "content": "こんにちは、${payload.myData.name}さん。"
    }
  ]
}

たとえば、以下のデータソースの場合、Selectorは「こんにちは、太郎さん。」というオーディオクリップを作成します。

クリップボードにコピーされました。

{
  "myData": {
    "name": "太郎"
  }
}

以下のもう1つのデータソースは、「こんにちは。 まだお名前を聞いていませんでした。」というオーディオクリップを作成します。

クリップボードにコピーされました。

{
  "myData": {
    "name": ""
  }
}

ロケールセレクター

以下は、ユーザーのロケールを使って「hello」を英語、スペイン語のどちらで言うかを判断するSelectorの例です。

クリップボードにコピーされました。

{
  "type": "Selector",
  "items": [
    {
      "type": "Speech",
      "when": "${environment.alexaLocale == 'en-US'}",
      "contentType": "PlainText",
      "content": "Hello!"
    },
    {
      "type": "Speech",
      "when": "${environment.alexaLocale == 'es-ES'}",
      "contentType": "SSML",
      "content": "<speak><voice name='Conchita'>Hola!</voice></speak>"
    }
  ]
}

ユーザーのデバイスが英語(米国)ロケールを使用している場合、environment.alexaLocaleの値はen-USを返します。Selectorは、「Hello!」の音声を生成します。 ユーザーのデバイスがスペイン語(スペイン)ロケールを使用している場合、environment.alexaLocalees-ESを返し、Selectorは「Hola!」の音声を生成します。 この例の2つ目のSpeechコンポーネントでは、SSMLを使って、「Conchita」の声を使った音声をレンダリングしています。