search
LoginSignup
41

More than 1 year has passed since last update.

posted at

updated at

AirPods Proの加速度センサーの値を取得する【iOS14】

はじめに

皆さんは,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にさくっと追加
スクリーンショット 2020-09-23 0.58.11.png

実装

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を繋いでいたり,何も接続していない時など諸々の処理をする必要がありますが,
実行すると標準出力に取得してきたデータが出てくることがわかります.

A.gif

おわりに

今回は,AirPodsProの加速度センサの値を取得する方法を書きましたが,
今回取得できたデータを綺麗に整形してゴニョゴニョして使えば,頭の向きだけを使用したゲームが作れたりするんだろうなと感じました.
また,ARグラスを作っているなど噂もありますので今後どうなっていくのか期待ですね.

今回のプロジェクト+αをGitHubに上げておきました
さくっと試したい方はクローンして使ってみてください.

夜中に調べて作ったのでいろいろ間違いがあると思いますので,
間違いや改善点があればコメントで教えてください.

参考文献

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
What you can do with signing up
41