ストリーミングはほとんどのブラウザと
Developerアプリで視聴できます。
-
SiriKit Media Intentの紹介
iOS 13では、オーディオコンテンツを再生するためのさまざまな方法に新たに対応して、SiriKitを強化しています。このセッションでは、ハンズフリーで音楽、オーディオブック、Podcast、ラジオなどを再生できる素晴らしい体験を実現する方法について説明します。検索語句を処理するためのベストプラクティスや、再生スピードの調整機能、プレイリストへの追加機能、コンテンツを気に入ったかどうかを表明できる機能を実装して、充実した再生環境を提供する方法についてご確認ください。
リソース
関連ビデオ
WWDC20
Tech Talks
-
ダウンロード
(音楽)
(拍手) ダニー・マンデルです 本日はSiriKit Media Intentsを 紹介します SiriKitに追加した メディアドメインのサポート機能です
最初にSiriKit Media Intentsの 機能について話します その後 実装で使う際の 手順について説明します 最後は 最高のユーザ体験を もたらすための ベストプラクティスを 説明したいと思います
SiriKit Media Intentsは オーディオ操作を一新させます この新しい機能は 多くの人を魅了するでしょう 音声の再生や 嗜好プロファイルの更新に加え コレクションへの追加や検索も可能です “アプリケーションでカリードを再生” と言うだけで Siriが音声を認識し アプリケーションで音楽を再生できます
では 機能を詳しく見てみましょう
Intentは4つあります まずは INPlayMediaIntentです 例えば“Outer Peaceを再生” と指示して音楽を再生する機能です iOS 12では ショートカットによる 再生サポートを導入しましたが 今回は SiriKitを追加しました
次に INAddMediaIntentです プレイリストやライブラリに アイテムを追加する機能で “この曲をドライブ用のプレイリストに 追加”と指示できます
INUpdateMediaAffinityIntentでは アイテムの好みを表現できます “この曲 好き”と言うだけで 構いません
INSearchForMediaIntentは 特定のメディアの検索機能です “ビリー・アイリッシュを検索”と 指定できます
SiriKitがサポートするメディアは 多岐にわたります まずは音楽です 音楽は 曲名だけでなく アルバムやアーティスト名 プレイリスト ジャンルでも 検索することが可能です 詳細はINMediaSearchの ドキュメントに掲載されています 最高のユーザ体験のために 多数の検索方法を採用してください 再生機能にはシャッフルやリピート キューなどが含まれ アーティストやアルバムを指定しての シャッフルやキューへの追加も可能です
2つ目は Podcastです “Stuff You Should Knowを再生” とタイトルを言えば再生を開始します エピソードの再生順序や 速度もコントロールできます “最新のエピソード”と指定したり “倍速で再生”という指定も可能です
次に オーディオブックです 本のタイトルを指定して 再生の指示ができます Podcastと同様に 速度の調整も可能です
最後はラジオです 特定のラジオ局の指定が可能で 例えば“このアプリケーションで 89.1 FMを再生”とリクエストします
ご紹介した4つのメディア以外を扱う アプリケーションでも大丈夫です SiriKit Media Intentsを使って アイテムの検索と再生ができます 唯一の弱点は 解析程度が強いメディアです 例えば自然音の再生アプリケーションに “哺乳類”などと指定しても Siriは動物の種類を認識しません そのため 哺乳類の音の ストリングを作成する必要があります 他のメディアより非体系的ですが サポートはされています
では 操作方法を説明します
SiriKit Media Intentsは 他のSiriKitドメインと同じです つまり全てのリクエスト処理は Intents App Extensionで行われます 詳細は これまでのWWDCの講演で 説明したので リクエスト処理に関しては 講演とドキュメントを参照してください
ここで SiriKitの典型的な リクエストを見てみます “アプリケーションで カッコいい曲を再生”と指示すると Siriはこのリクエストを認識し Intents Extensionを起動します リクエストは“解明”“承認”“対処” の3ステップで処理されます
最初のステップは“解明”です メディアドメインにおける“解明”は 検索対象の獲得と アプリケーションでの 検索を指します 再生する具体的なアイテムが 1つ以上抽出されます 検索結果が0件やエラー発生の場合は エラーメッセージを表示するよう Siriに伝えます
次は“承認”のステップです メディアドメインでの使用は 推奨しません なぜなら アプリケーションの 使用状況から このステップで 再生を諦める ユーザが多いと分かったからです
最後のステップは“対処”です これは非常にシンプルです 応答コードにより バックグラウンドで アプリケーションが起動します
そして通常どおり アプリケーションで アイテムを再生します 画面にUIが表示されないので テストには注意が必要です CarPlayやヘッドホンなど さまざまな状況で試してください リクエスト処理の概要を 説明しました 次にアイテムの解明方法です パラメータは異なりますが ロジックは全てのIntentに共通です アプリケーションのカタログ内を 共通の方法で検索します
サポートされていない結果に初期化し 検索結果がない場合は エラーを出すようSiriに指示します
INMediaSearchは検索内容を含む Intentフィールドです Siriがサポートする 全ての音声関連のクエリであり この数多の可能性の中から 再生すべきアイテムを抽出します この例では まずINMediaSearchから mediaNameを読み込み
アプリケーションのカタログから アイテム一覧を取得
mediaNameのプロパティを そのアイテム一覧と比較しています ただし 詳細は後ほど説明しますが これは避けるべきでしょう
名前が一致し再生アイテムが見つかると その結果は成功となり 完了処理へと進みます
この場合 成功の応答を返すだけなので 非常に短い処理となります これによりバックグラウンドで 起動が開始します アプリケーションの 起動を見てみましょう
起動をサポートするために 使用するメソッドは applicationとhandle intent そしてcompletionHandlerです これもかなり短い実装法です Intentから 再生するメディアを読み込み 通常どおりの方法で再生します
最後に 成功の応答コードを使って completionHandlerを呼び出します
これらがどのように機能するのか 実際のアプリケーションで ライアン・クレムスが説明します (拍手) ありがとう
SiriKit Media Intentsの 追加は簡単です ここに既存の 音楽アプリケーションがありますが これにSiri Extensionターゲットと メソッドを追加するだけです Extensionを追加するには “File”“New”“Target”と進み
“Intents Extension”を選択し “Next”をクリック 名前を付けます
最後に“Finish”をクリック
これでハンドラが作成されました 次にアプリケーションに Siriの機能を追加します
Extensionを選択し サポートするIntentを追加します この例では INPlayMediaIntentと INAddMediaIntentの2つです
次に選ぶのはメディアタイプです そして Extensionを組み込むために メソッドを追加します
コード署名をオンにした後は Intentのハンドラに 操作手順のサポートを追加します
解明と対処のメソッドのために
スタブを導入しておきます 最初の例では サポートされていない 結果を返すことにします こうすることで Siriは 検出不可能と伝達します 試してみましょう 画面を表示します
このように Siriはアイテムを 検出できなかった事実を伝えます 続いて 既存の検索機能に 接続しようと思います
まずはユーザの検索内容を判断しますが この例では アーティストを検索します
このメソッドでは メディアのアイテムを解明します
アイテムを解明したら 対処メソッドに移り 応答コードを返し アプリケーションを 起動しなければなりません そのために デリゲートに切り替え handle intentメソッドを追加します これで 前のステップで解明した アイテムが抽出され再生されます 結果を見てみましょう
メディアアイテムが解明され アプリケーションが再生を開始しました 次はINAddMediaIntentサポートを 追加しましょう まずはINAddMediaIntentHandling プロトコルで拡張します
解明と対処のための メソッドを追加します 解明メソッドは INPlayMediaIntentと ほぼ同じに見えますね INAddMediaIntentには 解明デスティネーションもあり 追加先がライブラリか プレイリストかを判断します 指定されたプレイリストが ライブラリに存在しない場合 “リストが存在しません”と 返答すると良いでしょう
今度は アプリケーションに戻って 再生開始する理由はないので Extensionだけで全てを処理します アイテムが解明されたら メソッドを使って ライブラリかプレイリストに追加します ここではユーティリティを使って 追加します 結果を見てみましょう
指定したプレイリストに アイテムが追加されました このとおり サポートの追加は簡単です 活用を期待しています ありがとう (拍手) ダニー お願いします
ありがとうございました ライアンが説明したのは Intents Extensionを追加する方法と Intentとメディアタイプの 指定方法でした INPlayMediaIntentとINAddMediaIntent での解明と対処の具体例も紹介しました これで Siriを使った メディアの再生と追加が可能です
採用時に覚えておくべき ベストプラクティスを確認しましょう
メディア再生のショートカットが 導入されていれば朗報です 対処とアプリケーションの起動には 同じコードを使います ただし ショートカットと違い SiriKitには解明ステップが必要なので 解明のメソッドとハンドラの 追加が必要です Siriがコンテンツタイプを認識するよう Xcodeでメディアタイプを更新します Extensionの対処メソッドは 共通でなければなりません メディアアイテムに同じ識別子を 使う限り 起動も同様です これはショートカットの構造です 解明メソッド以外は SiriKitと同じなので 解明メソッドを追加するだけで ショートカットから移行できます
次は Apple Watchへの 導入方法です watchOSのアプリケーションは フォアグラウンドで起動するため Extensionの対処メソッドから 応答コードを返す方法をとります このコードが起動を開始し Intentを WKExtensionデリゲートに転送します
対処メソッドはiOSと似ています シグネチャは少し違いますが NSUserActivityの インタラクションから読み込みます そしてiOSと同様 アイテムを アプリケーションで再生開始します
解明メソッドではデバイス上の キャッシュを使うよう注意してください やむを得ない場合のみ ネットワークを経由します
“Awesome Songをかけて”と リクエストしたとします 最初のステップは 再生するアイテムの解明でした 先ほどの例では アイテム名を Intentのプロパティと照合し 完全一致しました 一致しない場合はどうでしょうか
大文字小文字の区別や句読点が 不一致の原因となる場合があります 例えば“hello”の場合 異なる文字列が考えられます 正しくは“HELLO!”で 大文字で感嘆符付きです しかし Siriの音声認識エンジンは 全て小文字や 感嘆符なしで 認識する可能性があります そのため 大文字と小文字や 句読点を無視することが必須です
一般的には省略される言葉が 含まれていたり 完全一致しないタイトルで 呼ばれている場合もあります 例えば バージョンが違う アルバムです 一般的にはバージョンを指定して リクエストはしません アルバムのバージョンは指定せず 単純にタイトルのみを指定します サウンドトラックも同様です “ロケットマンのサウンドトラック” とリクエストはしても “オリジナルサウンドトラック” とは指定しないでしょう ヒップホップのタイトルに多い “フィーチャーリング”の略語は 多くの場合は指定しないか “フィーチャーリング”と言います すると完全一致になりません
Podcastでも呼び名と正式名の 不一致が起こります 例えば“podcast”という単語を タイトルに含んでいる場合です “Stuff You Should Know Podcast” とリクエストすると SiriはPodcastを タイトルではなく メディアタイプと解析しかねません その結果 完全一致にならないのです さらに オーディオと映像の種別が タイトルに表示されるものもありますが SiriKit Mediaは主にオーディオを 再生するため あえて種別を指定する人はいません
加えて 音声認識装置を使う際は 表記の違いに注意が必要です “81st”というタイトルは “eighty-first”の可能性もあります “I Love You Son”を “Sun”と認識するかもしれません
Siriは正しいタイトルの抽出に 最善を尽くしますが 解明メソッドには 柔軟性が必要でしょう
Siriの返答は解明メソッドの オブジェクトでコントロールできます Special Disaster Teamの “Maybe Sometime”という曲を リクエストしました Siriはタイトルと アーティスト名を返答しました この曲のタイトルとアーティストの プロパティを持っていたことになります つまり 常にタイトルとアーティスト名 そして メディアタイプを 入力する必要があるのです なお 複数の応答があった場合 Siriは最初の項目を取り上げます
SiriKit Mediaでは エラーの適切な処理が重要です インテリジェントアシスタントを使うと 事象の理由が不明なこともありますが エラーを適切に処理することで ユーザに対して理由を明らかにできます 例えば リクエストの内容が 見つからない場合は サポートされていない という結果を返します 他にも多くのエラーがあります モバイルデータ通信を必要とする時に 通信がオフになっている場合や サブスクリプションが必要なものを 再生したい場合などです INPlayMediaMediaItem UnsupportedReasonにリストがあります 他のIntentでも 類似のリストの採用が必須です それでは Siriに対する さまざまなリクエストと それを適切に処理する方法を 説明しましょう
最も一般的なリクエストは “再生して”でしょう 何を再生したいのか不明な場合に 何が最適な対応なのか見極めるのは デベロッパの仕事です 単に 既にあるキューを 再生することもできます オーディオブックやPodcast以外では それが最も合理的です しかし 大胆な選択もできます お勧めのプレイリストや流行の音楽を 再生することもできます 選択はあなた次第です 検索の基準が指定されていない リクエストの場合 何を再生するか 聞けばいいと思うかもしれません しかし 承認ステップと同様 このアプローチはお勧めしません ダイアログを促されると 再生を中断する可能性が高いからです
リピート シャッフル 再開や キューへの追加なども可能ですが その場合は INPlayMediaIntentでも サポートが必要です 検索オプションからの コンテンツ再生も可能です 特に便利な検索オプションに 分類パラメータがあります これは“最新のエピソードを再生”と いうようなリクエストです アーティストの“ベストアルバム” というリクエストも可能です “お勧め”をリクエストすることも できます INMediaSortOrderで リストを確認してください
リファレンスという検索オプションは INAddMediaIntentと INUpdateMediaAffinityIntentでは 非常に便利です 再生中のアイテムをライブラリや プレイリストに簡単に追加できるほか 好きか嫌いかの好みを 伝えることもできます MPNowPlayingInfoCenterに 外部コンテンツの識別子を入れると INMediaSearchのプロパティに入るため 検索アイテムが正確に把握できます
ユーザの用途をSiriに伝えることが ユーザ体験の向上につながります
Siriにユーザの語彙を伝えれば 興味の対象の理解が容易になりますが 重要なのは 特に興味を持っている ものだけを選ぶことです 語彙は順序付けされているため 優先順位を考慮する必要があります メディアのタイプによって Siriへの伝達事項はさまざまです 音楽アプリケーションはプレイリストの タイトルとアーティスト名 オーディオブックは 本のタイトルと著者 Podcastは番組のタイトルです 全てのユーザに該当するものは グローバル語彙サポートを参照ください
本日は オーディオをコントロールする SiriKit Media Intentsを紹介しました 再生 追加 嗜好プロファイルの更新 メディア検索が可能になりました 最高の体験を提供するには 検索に柔軟性を持たせることが重要です ユーザは再生したいアイテムの名前を 正確に言うとは限りません エラーは適切に処理し 問題の原因を伝えましょう Siriと最高の会話ができるように オブジェクトを適切に構築してください そして Siriがユーザにとって 最良の選択をするよう 重要な言葉の情報を 与えなくてはなりません
オンラインでドキュメントを 確認してください SiriKit Media Intentsで 皆さんが何を構築するのか とても楽しみです ありがとうございました (拍手)
-
-
特定のトピックをお探しの場合は、上にトピックを入力すると、関連するトピックにすばやく移動できます。
クエリの送信中にエラーが発生しました。インターネット接続を確認して、もう一度お試しください。