APL1.5の新機能でより充実したオーディオとビジュアル体験を構築する

Austin Vach Nov 20, 2020
Share:
Launch Multimodal Game Skills
Blog_Header_Post_Img

※このブログはBuild Immersive Audio and Visual Alexa Skills with New Alexa Presentation Language (APL) Featuresを翻訳したものです。

 

Alexaスキルでより充実したレスポンスを構築できる新しいオーディオおよびビジュアル機能が発表されました。APL 1.5では、新しい応答コンポーネント、新しい画像フィルターと合成機能、AVGシャドウのサポート、新しいアクセシビリティ機能などが追加されました。APL for Audio 0.9(ベータ版)では、音声合成とリソース、名前付きコンポーネント構成とプロパティが追加、コンテンツの再利用が簡素化され、オーサリングツール機能が向上しています。開発を始めるには、APL 1.5およびAPL for Audio 0.9の技術文書をご覧ください。

新しいビジュアル機能

新しいレスポンシブ対応コンポーネント

APL 1.5には、直感的で自然なビジュアル応答をすばやく作成できる、次の応答コンポーネントが追加されています。

  • スワイプアクション:ユーザーがスワイプしてアクションを実行できる項目を表示します。
  • ラジオボタン:ユーザーがオン/オフを切り替えることができるラジオボタンを表示します。
  • チェックボックス:ユーザーがオン/オフを切り替えることができるチェックボックスを表示します。
  • スイッチ:ユーザーがオン/オフを切り替えることができるスライド式のスイッチを表示します。

新しい画像フィルターと合成機能

Imageコンポーネントがsourceプロパティの値の配列を受け入れるようになりました。新しい画像フィルターでは、画像を変更したり、さまざまな方法で画像を合成したりできるため、ビジュアル応答を作成するために必要なアセットの数を減らすことができます。たとえば、以下のようなことが可能です。

2つの画像を合成します。

Two ducks imposed on a lake image

画像を色またはグラデーションで合成します。

Two ducks in a purple gradient

彩度調整フィルターとグラースケールフィルターを適用します。

Two ducks in grayscale
Alexa Vector Graphicシャドウ

Alexa Vector Graphics(AVG)で影の適用がサポートされるようになりました。これにより、簡単な方法でビジュアルを見やすくできます。以下は、AVGテキスト項目の例です。

Copied to clipboard
{
    "type": "AVG",
    "version": "1.2",
    "height": 1000,
    "width": 1000,
    "items": {
        "type": "text",
        "fill": "orange",
        "fontWeight": "bold",
        "fontFamily": "amazon-ember, sans-serif",
        "fontSize": 120,
        "text": "5 o'clock",
        "x": 10,
        "y": 100,
        "filters": [
            {
                "type": "DropShadow",
                "color": "black",
                "horizontalOffset": 3,
                "radius": 3,
                "verticalOffset": 3
            }
        ]
    }
}
5 o'clock with a shadow
新しいアクセシビリティ機能

新しいアクセシビリティ機能を活用して、支援技術を利用しているユーザーのエクスペリエンスを向上させることができます。APL1.5では、新しいアクセシビリティプロパティがenvironmentオブジェクト(fontScale、screenMode、screenReader、timing)に追加され、actionsとroleプロパティが基本コンポーネントに追加されました。actionsプロパティを使用すると、ユーザーはプログラムでコンポーネントを呼び出すことができます。また、roleプロパティは、コンポーネントの目的について機械で読み取り可能な情報を提供します。この機能をスキルに組み込むことで、視覚の補助を必要とするユーザーは、画面上でのタップやスワイプなどの一般的なタッチ操作を、音声のみで実行できるようになります。 
注: Alexaのアクセシビリティ機能を使用してスキルをテストできます。

actionsプロパティを使用したサンプルコンポーネント

次のタッチ可能な要素は、押下と解放の単一操作を可能にする1つの標準アクション("activate")があります。

Copied to clipboard
{
    "type": "TouchWrapper",
    "actions": [
        {
            "name": "activate",
            "label": "Reply to user",
            "command": {
                "type": "SendEvent",
                "arguments": "Activated by action invocation"
            }
        }
    ]
}
新しい関数

  • 文字列関数: String.length(x)関数は、文字列の長さを返します。
  • 数学関数 Math.isFinite(x)Math.isInf(x)Math.isNaN(x)関数は、それぞれ数値が有限、無限、または非数(NaN)かどうかをテストします。
  • 配列関数: Array.indexOf(x, y)Array.range(x, y[, z])Array.slice(x, y[, z])関数を使用すると、配列を操作できます。

新しいオーディオ機能(ベータ版)

音声合成

音声合成機能を使うと、プリミティブコンポーネントを新しいカスタムコンポーネントに結合し、APLAドキュメントのメインテンプレートで何度も再利用できます。また、合成でリクエストされたパラメーターのみを提供できるため、ワークフローが簡素化します。

合成のサンプル
この音声合成には、 visitorと punchlineという2つのパラメーターがあります。パラメーターは、SSMLを使用して音声を生成するSpeechコンポーネントに渡されます。

Copied to clipboard
"compositions": {
    "KnockKnock": {
        "parameters": [
            {
                "name": "visitor",
                "type": "string"
            },
            {
                "name": "punchline",
                "type": "string"
            }
        ],
        "items": [
            {
                "type": "Sequencer",
                "items": [
                    {
                        "type": "Speech",
                        "contentType": "SSML",
                        "content": "knock knock."
                    },
                    {
                        "type": "Speech",
                        "contentType": "SSML",
                        "content": "Who's There"
                    },
                    {
                        "type": "Speech",
                        "contentType": "SSML",
                        "content": "${visitor}"
                    },
                    {
                        "type": "Speech",
                        "contentType": "SSML",
                        "content": "${visitor} who?"
                    },
                    {
                        "type": "Speech",
                        "contentType": "SSML",
                        "content": "${punchline}"
                    },
                    {
                        "type": "Silence",
                        "duration": "500"
                    }
                ]
            }
        ]
    }
}

KnockKnock合成を使用したレスポンスの例
レンダリングされると、次の応答は、3つのkock knockジョークすべてを順番に話します。

Copied to clipboard
"mainTemplate": {
    "parameters": [
        "payload"
    ],
    "item": {
        "type": "Sequencer",
        "items": [
            {
                "type": "KnockKnock",
                "visitor": "Cereal",
                "punchline": "Cereal pleasure to meet you."
            },
            {
                "type": "KnockKnock",
                "visitor": "Alpaca",
                "punchline": "Alpaca the trunk, you pack the suitcase."
            },
            {
                "type": "KnockKnock",
                "visitor": "Voodoo",
                "punchline": "Voodoo you think you are asking me so many questions?"
            }
        ]
    }
}
リソース

リソースは、データバインディングでアクセスできる名前付きエンティティです。APLAドキュメント内のブロックでリソースを定義し、environmentプロパティの値に基づいて条件付きリソースを作成します。

サンプルリソース
この例では、 volumeフィルター内で後にペアとして使用するために番号を付けることができます。数値をリソースとして定義することで、複数のロケーションにあるリソースを使用し、値を更新することで複数のコンポーネントのボリュームへの参照をすべて更新できます。

Copied to clipboard
"resources":[
    {
        "number": {
            "quiet": 0.5,
            "loud": 1.5
        }
    }
]

ドキュメントでリソースを使用するには、構文を使用します。

APLAリソースを使用したサンプルコンポーネント

Copied to clipboard
"mainTemplate": {
    "parameters": [
        "payload"
    ],
    "item": {
        "type": "Sequencer",
        "items": [
            {
                "type": "Speech",
                "content": "John Jacob Jingleheimer Schmidt, his name is my name too.",
                "filter":[
                    {
                        "type": "Volume",
                        "amount": "@quiet"
                    }
                ]
            },
            {
                "type": "Speech",
                "content": "Whenever I go out, the people always shout"
            },
            {
                "type": "Speech",
                "content": "There goes John Jacob Jingleheimer Schmidt!",
                "filter":[
                    {
                        "type": "Volume",
                        "amount": "@loud"
                    }
                ]
            },
            {
                "type": "Speech",
                "content": "Nanananananana",
                "filter":[
                    {
                        "type": "Volume",
                        "amount": "@quiet"
                    }
                ]
            }
        ]
    }
}
オーサリングツールの改善

開発中に、音声応答の特定のセグメントに集中したいと思ったことがあると思います。 更新されたAPLAオーサリングツールでは、タイムラインをクリックして応答のさまざまな箇所を聞いたり、再生するタイムラインの部分を選択したり、ループモードをオンにして応答全体または選択した部分だけを繰り返し再生したりできるようになりました。

エラー報告の改善

APLオーディオ処理中に発生したエラーを通知するエラーイベントを受信するようになりました。

開発を始めましょう

詳細についてはAPLAPL for Audio(ベータ版)を参照してください。また、質問があればTwitterでプロダクトマネージャーArunとAustin(@aruntalkstech@austinvach)にお問い合わせください。

Subscribe