RealityKitのAudio Component
はじめに
2024年にAppleからVision Proというヘッドマウントディスプレイ(以下、HMD)が発売されます。そのVision Proに搭載されているのがvisionOSです。
ここではvisionOSで開発を行うために必要な情報をまとめていきます。
なお、書いている内容はAppleから公開されているWorld Wide Developer Conference(以下、WWDC)の動画や、Design Guidelinesに書かれている内容を参考にしています。ページの最後に参考にしたWebページのURLを貼っています。詳しく知りたい方は参考先のURLも見てみてください。
さて、ここではRealityKitが持っている様々なAudio Componentについて説明します。主に、Spacial Audio、Ambient Audiot、Channel Audioの3つが存在しています。
Spatial Audio
Spatial AudioはvisionOSらしいサウンド体験で、3Dモデル自体から音を鳴らすことが可能です。例えば鳥の3Dモデルから鳥の鳴き声を発したい場合などに便利です。Spatial Audioは、3Dモデルと連動するため、例えば鳥が飛び回ればその方向から音が聞こえ、遠ざかれば音は減衰され小さくなります。
let entity = Entity()
let resource = try AudioFileResource.load(named: "AudioFile")
resource.spatialAudio = SpatialAudioComponent()
entity.playAudio(resource)
設定するのはとても簡単で、3DモデルにAudioファイルをplayAudioで追加するだけです。ただし、Spacial Audioはモノラルのみです。もしも、ステレオのファイルを設定した場合にもモノラルにミックスダウンされます。不要なミックスダウンを避けるために、Audioファイルは事前にモノラルにしておく方が良いでしょう。
Ambient Audio
Ambient Audioは音とユーザーの相対的な方向だけが考慮され位置は考慮さずリバーブも適用されません。つまり、音が鳴っている方向に近づいても音が大きくなったりはしません。例えばFull Spaceで森に囲まれたアプリで環境音を鳴らし、まるで森の中に居る様な感覚を体験してもらう場合などに適しています。
let entity = Entity()
let resource = try AudioFileResource.load(named: "AudioFile")
entity.ambientAudio = AmbientAudioComponent()
entity.playAudio(resource)
こちらも設定はシンプルで、Spacial Audioとほとんど同じです。Ambient Audioの音は、ユーザーが正面を向いた状態から、フロントチャンネル(モノラル、センターなど)は奥側(-Z)で、リアチャンネルは手前側(+Z)、左チャンネルは左側(-X)、右チャンネルはは右側(+X)から鳴ります。
Channel Audio
Channel Audioは音の方向も位置もリバーブも適用されません。つまり、ユーザーが移動しても、首を横に振っても左の音は左側から、右の音は右側から聞こえ近づいても音量は変わりません。これは、ヘッドフォンをして音楽を聴いている状態と考えるとイメージしやすいかもしれません。視覚要素に関連付けられない音の再生に適しています。
let entity = Entity()
let resource = try AudioFileResource.load(named: "AudioFile")
entity.channelAudio = ChannelAudioComponent()
entity.playAudio(resource)
こちらも設定はシンプルで、Spacial Audio、Ambient Audioと異なるのはhannelAudioのプロパティ設定のみです。
まとめ
この様にReality Kitには3種類のAudio Componentが準備されています。特にSpacial AudioはvisionOSならでは体験が得られるでしょう。しかし、Vision Pro Simulatorでは音の鳴り方を確認するのは難しいので、どの様に音が鳴るのかを確認するにはApple Vision Proの実機で確認するのが良さそうです。
あとがき
visionOSについて現時点で書ける範囲での本を書きました。2023/11/12(日)の技術書典15で販売するのでよろしければ。
visionOSの開発をみんなで勉強するためのvisionOS Developer Communityを始めました!