SpeakListコマンド
Sequenceなど、共通のコンテナー内にある項目のコンテンツを読み上げます。各項目は、Alexaがその項目を読み上げる前に表示領域にスクロールされます。各項目のspeechプロパティは再生する音声を定義します。項目にspeechプロパティが設定されていない場合、項目は音声なしでスクロール表示されます。
プロパティ
SpeakListコマンドには、共通のコマンドプロパティに加えて、以下の表に示すプロパティがあります。typeプロパティはSpeakListに設定します。
コマンドを実行するために値が必要なプロパティの場合、以下の表の「デフォルト」列に「必須」と表示されています。それ以外の場合はデフォルト値が表示されますが、デフォルト値がないこともあります。
| プロパティ | 型 | デフォルト | 説明 |
|---|---|---|---|
|
|
|
|
項目の配置です。デフォルトは |
|
|
|
読み上げる項目のリストを含む親コンポーネントです。 | |
|
|
整数 |
必須 |
読み取る子の数です。 |
|
|
数値 |
0 |
項目をハイライトする最小時間(ミリ秒)です。デフォルトは0です。 |
|
|
整数 |
必須 |
読み取りを開始する項目のインデックスです。 |
次の例では、リストから3つのコンポーネントが読み上げられ、それぞれが画面の中央に表示されます。
{
"type": "SpeakList",
"componentId": "movieList",
"start": 3,
"count": 3,
"minimumDwellTime": 700,
"align": "center"
}
コンポーネントのkaraoke状態は各コンポーネントの発話中にtrueに設定され、発話の終了後、falseに再設定されます。
以下のSpeakListコマンドの特性に注意してください。
SpeakListコマンドは発話中、コンテンツをスクロールしません。たとえば、コンポーネントがコンポーネントのスクロールコンテナーより大きい場合、スクロールした後でも見えないコンテナーからはみ出した部分は、隠れたままになります。- 円形画面ではコンポーネントを中央揃え(
center)にする必要があります。そうしない場合、表示されないコンテンツの部分が多くなってしまいます。 SpeakListは、発話中はテキストの個々の単語や行をハイライトしません。- スクロールして項目を表示するには、コンポーネント階層を上の方向に検索し、スクロール可能な最初の上位コンポーネントを見つけます。
- 項目をスクロールして表示するアルゴリズムは、スクロールするコンポーネントが1つのみであることを想定しています。SpeakListは、入れ子構造のスクロールコンポーネントには対応していません。
- speechプロパティのないコンポーネントもスクロールして表示します。
- speechプロパティがなく、正の
minimumDwellTime値があるコンポーネントは、その間はkaraoke状態に設定されます。 - speechプロパティがなく、正の
minimumDwellTime値もないコンポーネントは、karaoke状態に設定されません。
SpeakListコマンドは、高速モードでは無視されます。
align
スクロール後かつ発話前の画面における項目の配置です。配置の列挙値には次のオプションがあります。
| 配置 | 説明 |
|---|---|
first |
項目の左上がスクロールコンテナーの左上に配置されます。 |
center |
項目の中央がコンテナーの中央に配置されます。 |
last |
項目の右下がスクロールコンテナーの右下に配置されます。 |
visible |
項目全体を表示するのに必要な分だけ移動します。 |
componentId
読み上げる子項目を含む親コンポーネントを識別するセレクターです。次のコンポーネントタイプをターゲットにできます。
指定しない場合は、デフォルトで:sourceになります。:sourceセレクターは、SpeakListコマンドを発行したコンポーネントをターゲットにします。
count
発話する項目の数です。数が1に満たない場合、このコマンドは実行されず、スクロールも発話も行われません。数がコンテナーの残り項目数を超える場合、開始点から発話できる最大項目数に減らされます。
minimumDwellTime
項目をハイライト(karaoke状態をtrueに設定)する最小時間(ミリ秒)です。デフォルトは0です。
minimumDwellTimeを使用すると、タイトルの短い項目の読み上げが早くなりすぎないようにすることができます。たとえば、「ヴェノム」、「フェンス」、「ウィンストン・チャーチル/ ヒトラーから世界を救った男」といった映画のタイトルが並んでいる場合、最初の2つの項目では、わずかな休止時間を置くと聞こえやすくなります。
start
スクロールして表示・発話するための、親コンテナー内の最初の子項目の0から始まるインデックスです。負の値の場合は、親コンテナーの末尾から数えます。次の例では、リストの最後の3つの項目が読み上げられます。
{
"type": "SpeakList",
"start": -3,
"count": 3
}
複数子コンポーネントの場合、SpeakListコマンドはfirstItemおよびlastItemのプロパティも読み上げることができます。コンポーネントにfirstItemが定義されている場合、firstItemのインデックスは0となり、itemsの子コンポーネントのインデックスは1から開始されます。コンポーネントにfirstItemが定義されていない場合、itemsの子コンポーネントのインデックスは0から開始されます。
次のアルゴリズムは読み上げの実行方法を概略的に示したものです。
let first = start < 0 ? start + children.length : start;
let last = Math.min(first + count, children.length – 1);
first = Math.max(0, first);
for (let index = first ; index <= last ; index++) {
let child = children[index];
scrollIntoView(child);
if (child.speech) {
child.setState("karaoke", true);
speakChildWithMinimumDwell(child, minimumDwellTime);
child.setState("karaoke", false);
}
else if (minimumDwellTime > 0) {
child.setState("karaoke", true);
waitForTimeout(minimumDwellTime);
child.setState("karaoke", false);
}
}
環境が音声をサポートしていることを確認する
環境によっては、音声などのダイアログは使用できません。環境プロパティのdisallowDialogを使って、デバイスと設定が音声関連のコマンドをサポートしているかどうかを判断します。
たとえば、ウィジェットはSpeakListコマンドをサポートしていません。
再インフレート時の処理方針
Reinflateコマンドを実行すると、Alexaがドキュメントを再インフレートした後でSpeakListコマンドを再開できます。コマンドは、ReinflateのpreservedSequencers配列で指定されたsequencerで実行されている場合に再開されます。このシナリオでは、Reinflateコマンドはオーディオ再生を中断しません。このコマンドでは、現在読み上げられているインデックス、minimumDwellTime、読み上げる残りの項目の数が保存されます。
ターゲットコンポーネントが再インフレートされた階層にない場合、またはこのコマンドの適切なターゲットではない場合、オーディオは停止し、それ以上項目は読み上げられません。
ターゲットコンポーネントが再インフレートされた階層内にある場合、再インフレート後に次の処理が行われます。
- ターゲットコンポーネントがスクロールして表示されます。
- コンポーネントの
karaoke状態がtrueに更新されます。
その後、Alexaはcountで指定された残りの数の項目を読み上げます。
SpeakListコマンドを保存する場合、再インフレートされた階層内に一致するコンポーネント(項目の数と順序が同じで音声バインディングも同一)が含まれていると、エクスペリエンスは最適に機能します。それ以外の場合では、SpeakListコマンドはユーザーが予期しないコンポーネントを読み上げる可能性があります。
関連トピック
最終更新日: 2025 年 12 月 12 日