はじめに
皆さんは,AirPods ProのSpatial Audioと呼ばれる空間オーディオ再現技術試しましたか?
臨場感がすごいですよね.
SpatialAudioは,AirPods Proに搭載されている加速度センサーやジャイロスコープを用いて音場をリマップして,,,
みたいなことをしているらしい.
iOS14からCoreMotionの中にCMHeadphoneMotionManagerが追加され
簡単に取ってこれることがわかったのでちょっと調べてみました.
2020/10/1 更新: 一部内容に誤りがあったため修正しました.
いるもの
Xcode : 12.0+
iOS : 14.0+
AirPods Pro
Info.plistに使用目的を記述
CoreMotionを使うのでInfo.plistにさくっと追加
実装
import UIKit
import CoreMotion
class ViewController: UIViewController, CMHeadphoneMotionManagerDelegate {
//AirPods Pro => APP :)
let APP = CMHeadphoneMotionManager()
override func viewDidLoad() {
super.viewDidLoad()
APP.delegate = self
guard APP.isDeviceMotionAvailable else { return }
APP.startDeviceMotionUpdates(to: OperationQueue.current!, withHandler: {[weak self] motion, error in
guard let motion = motion, error == nil else { return }
self?.printData(motion)
})
}
func printData(_ data: CMDeviceMotion) {
print(data.attitude) // 姿勢 pitch, roll, yaw
print(data.gravity) // 重力加速度
print(data.rotationRate) // 角速度
print(data.userAcceleration) // 加速度
print(data.magneticField) // 磁気フィールド 磁気ベクトルを返す
print(data.heading) // 方位角
}
}
上記のコードでは,AirPodsを繋いでいたり,何も接続していない時など諸々の処理をする必要がありますが,
実行すると標準出力に取得してきたデータが出てくることがわかります.
おわりに
今回は,AirPodsProの加速度センサの値を取得する方法を書きましたが,
今回取得できたデータを綺麗に整形してゴニョゴニョして使えば,頭の向きだけを使用したゲームが作れたりするんだろうなと感じました.
また,ARグラスを作っているなど噂もありますので今後どうなっていくのか期待ですね.
今回のプロジェクト+αをGitHubに上げておきました
さくっと試したい方はクローンして使ってみてください.
夜中に調べて作ったのでいろいろ間違いがあると思いますので,
間違いや改善点があればコメントで教えてください.
参考文献
- CMHeadphoneMotionManager | Apple Developer Documentation
https://developer.apple.com/documentation/coremotion/cmheadphonemotionmanager