ストリーミングはほとんどのブラウザと
Developerアプリで視聴できます。
-
Core Hapticsの紹介
Core Hapticsでは、音声に同期させて完全にカスタマイズしたHapticパターンを設計できます。このセッションでは、Hapticとオーディオを使用して、より夢中になれるAppやゲームを作成する例を紹介します。コンテンツの作成、再生、共有の方法と、どのようなときにCore Hapticsを他のオーディオおよびバイブレーションのAPIと併用するかについても理解していただけます。
リソース
- Core Haptics
- Human Interface Guidelines: Playing haptics
- Playing a Custom Haptic Pattern from a File
- Playing Collision-Based Haptic Patterns
- Updating Continuous and Transient Haptic Parameters in Real Time
- プレゼンテーションスライド(PDF)
関連ビデオ
WWDC21
WWDC19
-
ダウンロード
(音楽) (拍手) 双方向性ハプティクスチームの マイケル・ディウです iOS 13の進化した触覚技術 ハプティクスについてお話しします 今日のアジェンダです
最初はCore Hapticsが どこで使えるかです 他のオーディオAPIやハプティクAPIとの 適合方法も見ていきます
次にAPIの2つのクラスについて お話しします さらに触覚と音のコンテンツを 記述するための 基本的なディメンションと ディスクリプタを紹介します
コンテンツを展開する 基本的な方法も説明します
その次にダイナミックパラメータを 紹介します ダイナミックパラメータを使えば 再生時にハプティクパターンを カスタマイズできます ユーザやアプリケーションの 動きによって変えられます
最後に 表現 保存 シェアの 新たな方法を紹介します 皆さんのコンテンツで使える AHAPという新しい ファイルフォーマットです
では始めましょう
Core Hapticsとは?
これはイベントベースで 音と触覚をレンダリングするAPIです iPhoneに連動させるものです
他のオーディオやハプティクス フィードバックAPIも継続して使えます AVAudioPlayerやUIKitの UIFeedbackGeneratorなどが Core Hapticsと並行して使えます
どのiPhoneで使えるのでしょうか?
1つのAPI 1つのファイルフォーマットで Haptic Engine搭載の iPhone8以降の全機種で使えます 皆さんのハプティクパターンは すべての機種で同じように動きます 1機種でプロトタイプを作り リリースするだけで済むのです
また… iPhone8以降には古い一般的な アクチュエータではなく Appleが設計したTaptic Engineが 内蔵されています それによりユニークな組み合わせが 可能になります 力強さや広がり感を出すこともできれば 比類のない精度と制御 繊細さも 表現できます
次は すでにiPhoneでUIKitの フィードバックAPIを使って ハプティクスを採用している人に お伝えします
Core Hapticsは UIKitに代わるものではありません
UIFeedbackGeneratorを 使い続けたい人は多くいます UIKitでハプティクスを 加えている人は特にそうでしょう そのAPIでイベントに インテントを指示しているからです SelectionやImpact Notificationなどです 皆さんの代わりにAppleが そのボキャブラリを開発します また音と触覚とアニメーションのような モダリティを 正しく組み合わせます このAPIもiOS 13では改良されています 詳細は資料でご確認ください
一方 Core Hapticsが適しているのは 自分で音や触覚を デザインする場合です 独自のパターンを開発できます 使うタイミングなどを 自由に設計できるのです 他のAPIと連動することもできます Core Animationのアニメーションや AVAudioEngineの音声等とです もっと豊かな再生や 調整制御ができるのです UIKitはCore Hapticsの上に 作られているため レスポンスの速さはどちらも同じです これまでは…
ハプティクパターンの 設計には時間が必要でした しかし 今までできなかったことや アプリケーションの 差別化が可能となります 利用価値がありますよね 次は音の可能性について 触れさせてください
Core Hapticsは オーディオAPIでもあります ということは 皆さんの作る 短い合成音や独自の波長の音を ハプティクスと連動させられるのです 音と触覚の組み合わせは Apple独自のハプティクス体験です iPhone7のホームボタンに 採用されています
Apple Watch Series 4の Crownもです UIDatePickerの スクロールホイールで 日時やアラーム カレンダーを 選ぶ時にも使われています 音がしていることに 気づかない人もいるかもしれません ですが もしも音がなくなったら その動作に音が必須だったと 実感するでしょう 皆さんのアプリケーションでも Core Hapticsで同じことができます ある分野のアプリケーションでは 特にCore Hapticsを活用できるでしょう それはゲームです
あなたは今レース場にいます ターボモードに入ります いいですか? (エンジン音)
アプリケーションで このエンジン音と ハプティクスを連動させることを 想像してください ごう音が内蔵に響くような触覚を 伝えるのです
もう1つ非常に適している アプリケーションは 体を使って擬似体験するものです より現実感を与えられます 例えばテニスなどは― 音と触覚の要素を持っています 音の高さと触覚の強度を 融合させるのです スイングの速さや ラケットの中心に当たる感覚 打ったあとのラケットの ガットの揺れまで制御できます
もう1つCore Hapticsが有効なのは ARアプリケーションです
この分野で働いている方なら 高精細度の映像と3Dオーディオが 連動する効果については すでにご存じでしょう それ以上に 没入感を 味わえるようになります ユーザの動きに対して 独自の触覚フィードバックを行い
アプリケーションやデバイス ARオブジェクトイベントに呼応させます 例えば デバイスを回転させるのか― ユーザが動くのか考えます
今年はSwift Shotの サンプルコードを改良しました それに用いたハプティクスは パチンコを引く速さを基に 調整しました つまり スマホを引く速さです 後ろに引くと 張力が増すのを感じられます 放した時の音にも満足しています
動画をお見せしましょう ハプティクスの効果を 音に代弁してもらいます こんな音です (低い合成音) 次にすべてを一緒にお見せします 映像とハプティクス 規則的ではない音です (低い合成音)
これはハプティクスを使って― 触覚 音 映像を表した一例です すべてを連動させ AR体験を強化できます ただ ゲームやARはほんの一例であり この分野では触覚と音の連動は すでに進んでいます ぜひ 活用の分野を広げてください
次はCore Hapticsでの コンテンツの表現に移ります
Core Hapticsのクラスは 2つだけです 皆さんのコンテンツを表すクラスと そのコンテンツを再生するクラスです
コンテンツを詳しく見ていきましょう
Core Hapticsの 基本的な不可分コンテンツ要素は CHHapticEventと呼ばれます 各々のイベントには タイプと時間があり 任意で触覚を決められる パラメータもあります
これらのイベントが重なり合うと 混合され
すべてのイベントは パターンにグループ化されます 次にどのようなイベントのタイプが あるかを説明します
1つ目のタイプはHapticTransient HapticTransientは 小槌のようなものです 何かを打つ時のような 単発的で短い動きです 2つの継続的なタイプもあります HapticContinuousと AudioContinuousです 例えば弦楽器を 弾くようなイメージです HapticTransientより長いため 背景などに使うことができます さらに豊かな表現もあります 例えば反響を調節するなどです 最後はAudioCustomです AudioCustomは 先ほど説明しました 再生時に 独自の音を触覚と連動させて 提供することができます 次は任意のパラメータについてです
最初のイベントパラメータは HapticIntensityです すでにご存じかと思いますが 音の種類と音量を表します このパラメータで アウトプット0.0の状態から システムの最大値に近付けていくと 1.0に達します
次のパラメータは HapticSharpnessです これは新しい概念です 実体的な感覚や音の世界ではありません
実世界とは違う知覚空間を 想定してみてください ゼロに近いほど ほわっとした緩やかな感覚 1に近いほど 歯切れのいい明瞭な感覚です もう少し分かりやすいように iOS 12での例を挙げましょう
ロック画面のフラッシュライトボタンは 非常に鋭い触覚です
スワイプで表示される App スイッチャーは もっと柔らかく 鋭さの度合が低い触覚です
なぜ この2つの― 鋭さと柔らかさのタイプが 必要なのでしょう それはAudio Haptic Designの セッションで話されます
イベントパラメータには 他にもタイプがあります 音程や音の広がりなど 音に関するもの ハプティクスでは 反響を変化させるものなどです しかしこの強さと鋭さという 2つだけでも十分でしょう
次に ダイナミックレンジを広げ 強さと鋭さの精度を 高めたいと思います パレットという サンプルコードがあります これを使って ご自身で試すことができます タップしたり ドラッグしたりすることで 鋭さや強さの違いを 感じることができるのです さらに継続的 または単発的な 触覚も試せます これを使って 実感してみてください
ここまではCore Hapticsの使い方と コンテンツについて説明しました ここからは Core Hapticsの設計者 ダグ・スコットに Core Hapticsの再生を 始めてもらいます パターンの再生とアプリケーションへの 応用に関する話です ダグの登場です (拍手) ありがとう マイケル こんばんは Core HpticsのAPIを アプリケーションに 適用する話をさせてもらいます
デモでコードをお見せする前に アプリケーションにハプティクスの パターンを入れるところから説明します
最初にコンテンツを作りましょう 使い方を考える前に始められるからです この例ではNSDictionaryを ハプティクパターンにロードします アプリケーションに保存された ディクショナリはリソースとなります あとで見ますが パターンも 再生される直前に作られます アプリケーションの変更に対し 双方向性を持たせるためです
次にHaptic Engineの インスタンスを作ります アプリケーションがハプティクスの 使用を感知すると作られます
次はハプティクパターンのための ハプティクプレーヤーを作ります 各プレーヤーは1つのパターンと 独自の触覚エンジンで結びついています
Haptic Engineはパターンを作る 要求の準備をするため オーディオとハプティクハードウェアの 初期化を告げます
プレーヤーはアプリケーションが パターンを出す瞬間に起動 これには2つのモードがあります 1つ目は即時モードと呼ばれるもので パターンのレスポンスをなるべく速く 行うよう システムに指令します 2つ目は予定モードで 明白なタイムスタンプを渡し イベントを他のシステムと 連動させるよう 命じます 例えば他のオーディオプレーヤーや ゲームイベント等との連動です
パターンが終わるタイミングは Haptic Engineがコールバックで 通知してくれます プレーヤーが終わった時にです
これはコールバックしたところです アプリケーションは Haptic Engineを中止するか 次のハプティクパターンを 続けるか選択します
これが基本の動きです このシステムを使った例を 見てみましょう
その前にちょっとした お知らせがあります 触覚フィードバックのAPIで デモを行うには 特殊な問題が起きます 触覚は体感できません そこでハプティクイベントに相当する 音をアウトプットに加え ハプティクスを音で感じてもらいます
単純な物理エンジンを使って 画面上でボールを動かします 加速度計に呼応して作られています (ノック音) 画面の端に当たると触覚と 音をフィードバックします ユーザは ボールの音と共に 振動も感じられます 強く当たるほど 触覚は強く 音は大きくなります
このコードを見てみましょう Core Haptics APIは アプリケーションへどう取り入れられ 触覚と音を変える際 イベントパラメータはどう使われるのか コードはすべてサンプルコードですが 重要な点を説明するために 編集しました
まずCore Hapticsをインポートし 他に必要なモジュールもインポート
CHHapticEngineはViewControllerの メンバ変数として宣言されます 有効期間を制御しアプリケーションの 有効期間中 存在させるためです
先ほどフローチャートで説明したように 使う前にHaptic Engineを 準備しておきます ビューがロードされた時点で ヘルパーメソッドを呼び出します
ヘルパーメソッドでハプティク エンジンのインスタンスを作ります エンジンはメンバ変数へ 割り当てられます
これは任意ですがエンジンの stoppedHandlerプロパティに クロージャを命じるのに 非常に役立ちます アプリケーション以外の動作で エンジンが終了されると呼び出されます 可能性があるのは オーディオセッションの中断です またはアプリケーションの 一時停止です
Haptic Engineを動かしエラーを 確認したらメソッドを終了します エンジンはアプリケーションや 外部の動作で止まるまで動きます アプリケーションはエンジン再開の 必要があるかどうかを追跡します 通常は画面に触覚と 双方向性のあるビューがある限り エンジンはそのまま動き続けます
この単純な物理エンジンによる アプリケーションの中で 壁にぶつかるボールを表現します 触覚と音が ボールの速度と 双方向性を持つようにし 必要な時に パターンプレーヤーで パターンが作られるようにします
このメソッドはボールの衝突に呼応して パターンを作るのです ここでは2つのイベントで パターンを作ります 1つは触覚 もう1つは音です
触覚のイベントはhapticTransientの hapticEventを使います
そして鋭さや強さを設定する 2つのイベントパラメータを加えます 先ほどボールの速度によって 触覚を変えたパラメータです
次にaudioContinuousと 音量や音の終わり方を表す―
2つのイベントパラメータで 音のイベントを作ります これもボールの速さから測定されます この継続型のパラメータはイベントの 強さがゼロになると終了します イベントの長さによって 継続するものではありません
2つのイベントを含むパターンは 正確に連動します
そして このパターンの パターンプレーヤーを作り
衝突に呼応するメソッドに返します 最後にCHHapticTimeImmediateの パターンプレーヤーを動かします 最小限の待機時間で 再生する指示を出します
アプリケーションはプレーヤーの インスタンスを継続させません このパターンは動作が終わるまで 続くだけです アプリケーションは動作が終われば これを使いません
これがアプリケーションのコードに プログラムで書き込まれる― パターンを使ってコンテンツを動かす 基本的な方法です このアプリケーションは継続的な 双方向性を持ち ゲーム画面が消えるまで Haptic Engineは止まりません
次にCore Hapticsの持つ 最大の能力についてお話しします それはダイナミックパラメータです
これは進行中または今後発動する パターンのイベントに対し イベントパラメータ値の 増減を行えるものです
タイムスタンプで効力を発し 有効になり 同時に複数のパラメータを 調節できます どんな任意の時間関係についてもです
パターンを作る際に これを取り込むこともでき 再生中にリアルタイムで プレーヤーに送ることもできます
パターンをダイナミックに 調整することにより 1つのパターンで無数の 触覚と音のバリエーションが生まれます
例を見てみましょう 図の下部にあるのが デザインした触覚パターンです ハプティクイベントの強さは すべて最大値に設定しました 最初の半分は単発的なもの 残り半分は継続的なものです 一時的にゲームのハプティクスの 強さを弱めます 例えばゲームのキャラクターが 話している間等です
ダイナミックパラメータに 0.3の値の強度を送ります 有効時間は0.5秒とします その時間のイベントの強度が かなり下がりました 変更前の約3分の1です
最後に パターンの 別の作り方を説明します
AHAPとは一体何でしょう?
Apple Haptic Audio Patternは テキストフォーマットで Core Hpaticsのパターンを 書くものです これまでに 慣れ親しみのあるネスト化された― キーと値のペアのクラスで Core Haptics APIが作れます
JSON型ファイルの フォーマットを使うスキーマです 皆さんはすでにSwiftコードが使える ものも含め 読み込み 書き込み 編集のできる フレームワークを持っています
AHAPはハプティクパターンを シェアし編集しやすくします 多くのデベロッパが利用する フォーマットだからです
外部のAHAPファイルから ハプティクパターンをロードし アプリケーションのコードから コンテンツを分離させます
スライドを見るだけで 簡単なAHAPファイルが作れます
Versionの文字列から始めます どのシステムで パターンを設計するか指示します
次にディクショナリを並べる Patternのためのキーを加えます
Patternに最初の Eventディクショナリを加えます このイベントはキーと値という 必須のペアを持っています イベントは秒単位で起きます パターンの開始とイベントのタイプに 関連したタイミングで これは単発的なパターンが起こる HapticTransientイベント
このイベントのみに影響を与える イベントパラメータを加えます 各イベントの ディクショナリに格納されます
強さと鋭さを制御するパラメータも 加えます
2つ目のイベントも同じようにします これは最初から0.5秒後に始まり タイプはHapticContinuousです イベントパラメータは最初のイベントと 同じものを使います
HapticContinuousと AudioContinuousには 時間とタイプと共に イベントの継続時間が必要です 継続時間の値は常に秒で規定します
これは今作ったパターンを 表した図です TransientとContinuousという 2つのタイプのイベントがあります 後ろ半分のContinuousには 関連するタイミングと継続時間 強さと鋭さのパラメータ値があります
AHAPの簡単な説明でした これはAHAPの構造を まとめた図です イベントディクショナリの配列で 1つのパターンが構成されています 任意のダイナミックパラメータや ダイナミックパラメータの延長上にある 任意のパラメータ曲線の使用 それについては ウェブサイトで 詳細をご覧ください AHAPに関する詳細は セッション資料にあります
セッション資料には他にも AHAPファイルでのパターンの作り方や ロード 実装方法も書いてあります サンプルアプリケーションには 微妙な動きを表したものや 音と触覚の連動の パターンなどがあります Core Haptics APIでは それが可能なのです
ありがとう 再びマイケルに登場してもらいます (拍手) ありがとう ダグ 今日はいろいろ説明しましたが Core Hapticsでできることは まだまだあります 詳しくはオンライン資料をご覧ください
基本的なコンテンツを実装し 試してみれば 触覚と音を連動させる 設計上の原則も知りたくなるでしょう
ハプティクデザインに音声の規約や ガイドラインが適用されるのか? 気をつけるべき落とし穴は? その点についても音と触覚の 設計チームは長年調べています 彼らのアドバイスや指導が 役立つでしょう Human Interface Guidelinesもあります 今年のWWDCでは それについての話もあるので ぜひ参加を
では まとめます 新たな没入感を味わうために 触覚をどのように生かすか? アプリケーションを もっと簡単に双方向にするには? 音と触覚を連動させて 同時に表現することにより 非常に大きな効果が得られます それができるAPIは これまで ありませんでした iOS 13は 豊かでマルチモジュールな 体験を作り出すのに 必要な要素を備えています 触覚と音のイベントを記述する ボキャブラリがあるのです AHAPもあります 効率的なCore Hapticsという 新たなAPIは― レスポンスが速いリアルタイムの モジュレーションです
サンプルコードとサンプルパターン デザインガイドラインや Appleのサポートもあります 皆さんはすばらしい顧客と ハードウェアを持っています Core Hapticsを活用しましょう インストールできる Taptic Engineもあります それはパワフルで表現力豊かで 精密なハプティクスハードウェアです
ラボに遊びに来てくださったら 今日説明したCore Hapticsの サンプルをお見せできます 皆さんのアプリケーションの 話もしましょう ウェブサイトのセッションページで 参考資料も見られます
ハプティクパターンを作って使うのは 非常に楽しいことです 皆さんの感想を聞くのが楽しみです ありがとうございました (拍手)
-
-
特定のトピックをお探しの場合は、上にトピックを入力すると、関連するトピックにすばやく移動できます。
クエリの送信中にエラーが発生しました。インターネット接続を確認して、もう一度お試しください。