ストリーミングはほとんどのブラウザと
Developerアプリで視聴できます。
-
Core Hapticsで知覚体験を拡張する
Core Hapticsを活用すると、iPhoneのオーディオに同期する独自のHapticを設計することができます。2つのパートから成るこのセッションでは、音声およびHapticの基本的な設計原則と、人間の幅広い感覚に訴える有益で楽しい体験を生み出すためのコンセプトを紹介します。Taptic Engineを使用してビジュアル、オーディオ、Hapticを組み合わせることで新たなレベルの臨場感を生み出し、Appやゲームのフィードバックを向上させる方法についてご確認ください。コンテンツの作成および再生方法と、どのようなときにCore Hapticsを他のオーディオおよびHapticのAPIと併用するかについても理解していただけます。
リソース
- Apple Design Site
- Core Haptics
- Human Interface Guidelines: Playing haptics
- Playing a Custom Haptic Pattern from a File
- Playing Collision-Based Haptic Patterns
- SwiftShot: Creating a Game for Augmented Reality
- Updating Continuous and Transient Haptic Parameters in Real Time
- プレゼンテーションスライド(PDF)
関連ビデオ
WWDC20
WWDC19
WWDC17
-
ダウンロード
(音楽)
(拍手) ようこそ
音は アプリケーション作りに 多大な貢献をしてきました ゲームの雰囲気を 演出するためのBGMや 注意を引くための警告音などもあります 今後はここに 触覚という 別の側面も加えられます 本セッションは 前半が設計 後半が開発の話です まず ヒューゴとカミーユの 2人が登場し アプリケーションの触覚体験を 向上させる方法について話します
(拍手)
(iPhoneのバイブレーションの音) 聞き慣れた音ですね もはや生活の一部です この体験を改善させる時です 私はインタラクションデザイナーの カミーユ・ムセ 私はサウンドデザイナーの ヒューゴ・フェルヴァイです サウンドと触覚の設計について お話しします このセッションで インスピレーションと サウンドと触覚を使った設計の 実用的なアイデアを得てください 正しく使えば 斬新なアプリケーションが作れます
私たちが話すトピックは3つです まず サウンドと触覚の体験の 基礎について 次に その体験を設計する際の原則を 3つ紹介します 最後に サウンドと触覚の 効果的な組み合わせの― 事例や コツを紹介します
サウンドと触覚を使った設計とは? まず音を聞いてみましょう
(高音再生) この音を低くします (音再生) もっと低くすると… (音再生) 低すぎて聞こえなくなりました 人の耳には聞こえない音域です しかし スピーカーに指を当てれば 振動を感じます
Taptic Engineの目的は 触覚でしか知覚できない低音域を 再生することです これがiPhoneのTaptic Engineで 隣はスピーカーモジュールです
Taptic Engineが伝える触覚は スピーカーが発する音と同期しています
その結果 生まれるのが 聴覚と触覚が結びつく体験です 触覚は体感するものですが 今はスクリーンで見せるしかないので 想像力を働かせながら 話を聞いてください 触覚を伝えたい時は このようなイメージをお見せします
または触覚に似た こういう音を再生します (低いノックの音) 音に合わせ 視覚イメージも表示します また カミーユから “予告”の設計についてもお話しします
iOS 13から 触覚をカスタムで 設計できるAPIが導入されました Core Haptics APIです
このAPIで iPhoneのTaptic Engineを フル活用できます
Taptic Engineは 幅広い体験を演出できます カスタムのバイブレーションも作れます 例えば こういうサウンドと触覚です (ブーンという音)
今日は こういう波形と音で 触覚を表現します ヒューゴが言ったように これは触覚だと思ってください 聞く音でなく 感じる音です
こういう継続的な触覚の他に― 短く 詰まった触覚も作れます
波形1回分の いわば単発的な体験です 先ほどの触覚より瞬間的で 打撃やタップのような感じです
(マイクをたたく音) 瞬間的ですね この2種だけでなく― さらに複雑な触覚も作れます 触覚パターンの表現には 波形以外も使います 単発的な体験は長方形で表します Taptic Engineは秀逸な部品なので 様々な調節が利きます まず 振幅 つまり強さを調節できます
丸みのある 柔らかい感覚を作ることも可能ですし
歯切れのいい 明瞭な感覚も作れます 全部 Taptic Engineでできます
以上 サウンドと触覚の体験と Core Haptics APIの 基礎についてお伝えしました まず 強さという尺度が調節可能で 触覚的な鋭さという側面も 設計によって制御できます 継続的か単発的かという区別もあります
次に 触覚体験を設計する際の原則を 3つ紹介します
第1に因果関係 第2に調和性 第3に実用性です この3つの原則を基にして―
Appleでは設計を行います 皆さんのアプリケーションにも 役立つと思うので 例を挙げながら 私たちの考え方を説明します では始めます
まず因果関係 何によって事象が起きたか 明確でなければ無意味です
例えばサッカー選手がボールを蹴る時 得られるのは どんな体験でしょう? (鋭い打音) この複数の知覚情報には 明らかな因果関係があります ボールに当たる足が見え 音が聞こえ 振動を感じるからです 音や触覚などの総合的な体験は この出来事に関わる事柄の 性質によって決まります 靴やボールの素材にもよりますし―
蹴りが強いか弱いかという 動きの力学的な側面も関係します スタジアムやフィールドの音響という 環境要因もあります この自然な組み合わせに 慣れているので 音が違ったりすると ひどい違和感を覚えます 極端な話 このような音なら?
(ガラスが割れる音) ものすごく変ですね フィードバックを設計する時は それらしい触覚と音にしてください 想像し得る限り 自然な感じにするのです
Apple Payの決済体験を作った時 チェックマークの動きと完璧に合う サウンドと触覚を追求しました
まず考えたのは― 支払い行為から連想する音です お金のサウンドとは? また Apple Payを使った支払いに 関することでは 画面のチェックマークの動きも 大事です 決済が成功したという 肯定的な感覚が欲しいです
決済音と触覚の試作例を いくつか紹介します
1つ目は…(高音) 陽気ですが やや能天気すぎて不真面目です 2つ目はチェックマークの動きに ピッタリでした (ベルのような響き) しかし音質が 少しキツいように感じたのです そして最終的に選んだのが 皆さんもご存じの こちら 真面目すぎず 明らかに完了した感じです (ガラスのような響き) これでサウンドは完成したので 次は触覚です 最初は 音の波形を模倣すれば 完全に適合すると考えました しかし いくつか試した結果 軽いタップ2回が好印象でした
この作業は 2つの音を使う ささやかな作曲だと考えます 聞こえる音と感じる音です この2つは 性質が異なっても 構いませんが 再生のテンポは一致すべきです 低音が触覚だと想像しながら 聞いてください (ガラスのような響き)
では チェックマークの動きと 一緒に見ましょう 手に響く触覚を 想像しながら見てください
(ガラスのような響き)
次は第2の原則 調和性についての話です ここで言う調和性とは 触覚 視覚 聴覚の一致のことです
実世界では―
聴覚 触覚 視覚が おのずと調和しています 因果関係があれば調和するのです
デジタルの世界では これを人為的に調和させます 追加的なプロセスで 新しい体験を作るわけです
インプットとアウトプットを デベロッパが設計せねばなりません 例えば こういう 単純な視覚インターフェイスがあります
球体が落ちてきて 画面の下辺に当たりました
これに音を追加しましょう
(こもった 弾む音) この音も設計しました 弾む球体にふさわしい音を 選んだのです 短く明瞭で 歯切れのいい音を― 下を打つ速度に合う強さにしました
さらに3つ目の 触覚フィードバックを足します
(こもった 弾む音) 手に響く触覚も 一緒に想像しましたか? 画面の下辺を打つ球体と調和するように 触覚を設計します 単発的で 比較的鋭いイベントを選び 弾む速度に合った強さに調整します そして 仕上げに―
3つの感覚を同時に刺激するよう 設計することが大事です
3つが同期することで 弾むボールを見たかのような 錯覚が起こるのです このルールを破り 視覚だけ 早めた例をお見せしましょう (こもった 弾む音) 調和が崩れたので 弾むボールを 見た気にはなりません 厳密に設計しないと 調和は損なわれます しかし丁寧に作れば 魔法のような効果が生まれます
視覚 聴覚 触覚の相互作用や 全体の振る舞いが調和した例を いくつかご紹介します この緑色の円を これから動かします どういうサウンドや触覚が合うか 考えてみてください
素早い鼓動や― ゆっくりした明滅
それぞれ どんな音や触覚が 合うでしょうか または 大きな円だったら― 小さな円の時と 違う音がするでしょうか
動作や エネルギーの状態が 違ったらどうでしょう? 注意を喚起するような 切迫した脈動をしているなら― 音や触覚を変えましょう 心拍のように落ち着いた動きなら 別のフィードバックが妥当です 動きのペースや エネルギー状態や アプリケーションの 他の要素も考慮してください 一貫性のある 統一的な フィードバックを設計するのです
Apple WatchのDigital Crownの サウンドと触覚を設計する際に 調和性を生かした経験を紹介します 誰もがスマートフォンの バイブレーションに慣れたあとに Taptic Engine搭載の Apple Watchが発売されました サウンドと触覚を厳密に合わせられる 初のデバイスでした Series 4では Digital Crownを回すと 触覚と かすかな音が発生します
カミーユが冒頭で紹介した 鋭い触覚は― Crownの回転で使ったものです しかしCrownが小さいので 振幅を弱めて 手首でなく Crownを回す指にだけ 触覚が伝わるようにしました
サウンドは 伝統的な腕時計の製造法に ヒントを得ようと あらゆる腕時計の音を聞き 録音しました こういう すてきな音もありました (速いチクタク音) 他に 実世界にある機械音も いくつか集めました 例えば自転車のハブの音です (速いカチカチ音) Apple Watchらしいサウンドを 見つけるためです 音を作り始める前に こうしてヒントを集めました
結果的に作ったこの音は 非常に静かで いかにも腕時計らしくできました (規則的なクリック音)
サウンドと触覚が 絶妙に呼応していて 竜頭を回している気になれます
アニメーションを設計するチームも この機械のような感覚を採用し 画面の回り方が サウンドと触覚に合うように変えました (速いクリック音) 触覚を視覚化した Crown部分にご注目を (速いクリック音)
明瞭で機械らしい触覚が生まれ 視覚や聴覚とも 完璧に調和した体験となります
そして3つ目の原則は 実用性についてです 聴覚と触覚のフィードバックを 追加するのは アプリケーション体験が 確実に向上する時だけにすべきです
節度を守り むやみに追加してはいけません
この点を説明する ARKitアプリケーションを作りました
バーチャルなタイマーの アプリケーションで 対象物との距離により インタラクションが変わります まずは見てください
(速いチクタク音)
(速いチクタク音)
ARインタラクションと ユーザ体験を補足するように フィードバックが設計されています タイマーが寄ったり離れたりすると 聴覚と触覚の体験が変わる仕組みです 3つの知覚に 一貫性と統一感があります 他の効果音や触覚は 追加しませんでした 他の要素とのインタラクションは 省いたのです
サウンドと触覚が余分な時も よくあります まずアプリケーションで フィードバックが欲しい箇所を探し 体験を高めたり 重要なことを 伝えたりする要素にだけ使うのです いろいろ足したくても控えましょう やりすぎるとユーザは圧倒されますし 要点がかすみます
改めて 体験を設計する際の原則を まとめます まず因果関係です サウンドと触覚を結びつけるのです サウンドと触覚と見た目が 調和すると すばらしい体験が生まれます そして 実用性です アプリケーションを使う 人間の視点から 体験を考えるのです
次は 実用的な事例やコツを 紹介します サウンドと触覚を組み合わせ いい体験を作り出すのです
第1に Core Haptics APIで使う 基本要素の話です
基本要素の選択肢は2つ まず 単発的な体験です 鋭く詰まった触覚体験で 打撃またはタップのような感じです または 継続的で持続的な 体験も選べます 持続時間は任意に決められます
単発体験の中で デベロッパは 2側面を制御できます 強さと鋭さという2つの側面です 鋭さを抑えれば 丸く柔らかい感覚になります 逆にすれば 機械らしく明瞭で 歯切れがよくなります 強さを変えれば 体験の振幅が変わります
継続体験でも 同様の2側面について設計します 鋭さと強さの2つです 有機的で不規則な感触が続くような 継続体験も作れます 鋭さの値を上げれば 機械らしく明瞭になります
Core Haptics APIでは 他にもいろいろできるので オンラインドキュメンテーションを 見てください
サウンドは 触覚に一番合うものを 作ってください 鋭く単発的な触覚には 短いチャイムの打音が合います (チャイムの打音) しかし なめらかなサウンドには 同じ触覚を使わない方がいいでしょう (ゆっくりした和音再生) こういう音には― 緩やかに増減する触覚が合います (ゆっくりした和音再生) 厳密なルールはないので いろいろ試す余地はあります たまに 第一印象と正反対の触覚が 適している場合もあります Apple Watchのアラームは まさにそんなケースでした (ベル音のアラーム再生) このサウンドには― 同じような触覚を加えると 合いそうです
(ベル音のアラーム再生) これでいいですか? 試しに タイミングを逆にしたら どうでしょう
(ベル音のアラーム再生) 何かを予感させるように 触覚を徐々に強めて切り 直後に音を再生します するとサウンドが触覚への応答となり 因果関係ができます
Apple Watchのアラームの 成功例でした
次は 連続して起こる複数のイベントが 様々な体験を伝えるケースです 例えば こういう単発的な 4つの触覚体験では たまに1つ目を感じない人がいます 自覚しないのです
(打音4回再生) 彼らは 今の4タップが 3タップに感じると言います これは意外と チャンスかもしれません 無意識にしか感じていない1つ目を “予告”として使えるからです
watchOS向けに 他社が作ったアラートで このようなサウンドと触覚がありました (アラーム再生) 重要な通知なので ユーザが確実に はっきり気づくようにしたいものです 私たちなら 触覚が意識されない現象を 逆手に取り― 呼び水を与えます 触覚で注意を喚起し 本体のアラートに備えさせるのです 聞いてみましょう
(アラームと打音再生)
こうすることで 重要な通知を明確に提示し ユーザに確実に伝えます
よく似た体験を 触覚で区別することもできます
watchOSのナビゲーションで 左を示すサウンドは このような音です
(木製風鈴の音再生)
調和性の原則に従って― サウンドに合いそうな触覚を 組み合わせました 2回のタップとサウンドを合わせると こうなります (木製風鈴の音再生)
そして右を示すサウンドは― 左と似ていますが 少し違います (木製風鈴の音再生) 左と右のわずかな違いに 聴覚では気づけますね しかし 調和性の原則に従うなら― 左右で 同じ触覚パターンを 使うことになります そこで私たちが どうしたかというと― 右は 触覚の回数を倍にしました これで左右がはっきり区別できます 右を示すサウンドと触覚を 再生しましょう (木製風鈴の音再生) よく似た聴覚体験ながら 左右を区別できました
独自の体験を作る手段が だいぶ増えたと思います 締めくくりにもう1つ 例を見せます メッセージの フルスクリーンエフェクトです (急降下の音再生) (花火の効果音) サウンドと触覚が アニメーションと同期し 心躍る瞬間が生まれます もう1回 見ましょう (急降下の音再生) (花火の効果音) まだ試していないなら― ご自分のiPhoneで 触覚つきで体験してください
最後に 今日話した原則に加えて いくつか考慮すべき点をお伝えします
聴覚 触覚 視覚の設計を 連携させてこそ 最高の効果が生まれます 動きを作る人は― サウンドインタラクションデザイナーと 協力してください 統一的な体験を生むためです
あなたのアプリケーションを 初めて使うユーザに 何を聞き 感じてほしいですか 100回使ったあとでも― そのサウンドと触覚が 役立ちますか? むしろ余計ですか?
自分で体験し― 不必要なものや無益なものは 外しましょう
積極的に実験して プロトタイプを作ってください 新しいことを試せば すばらしい体験にも出会えます
皆さんのアプリケーションを 視覚 聴覚 触覚で 味わう日が楽しみです セッションの詳細はこのURLで (拍手) 2人とも どうもありがとう 触覚体験の設計について 概要を理解できましたね 次は 今の原則に従って開発を行う 実践的な話です マイケルとダグが話すのは 新しいCore Haptic APIの活用方法です では まずマイケルからどうぞ
(拍手) 双方向性ハプティクスチームの マイケル・ディウです 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の サンプルをお見せできます 皆さんのアプリケーションの 話もしましょう ウェブサイトのセッションページで 参考資料も見られます
ハプティクパターンを作って使うのは 非常に楽しいことです 皆さんの感想を聞くのが楽しみです ありがとうございました (拍手)
-
-
特定のトピックをお探しの場合は、上にトピックを入力すると、関連するトピックにすばやく移動できます。
クエリの送信中にエラーが発生しました。インターネット接続を確認して、もう一度お試しください。