tukuyo's blog

へっぽこマン

スポンサーリンク

AirPods Pro のモーションセンサの値を取得する.【iOS 14】

はじめに

iOS14が急遽発表され,開発者の皆さんは大慌てだったのでは無いでしょうか?
iOS14では,たくさんの変更点がありましたが,一番面白いと感じたのは,
AirPods Proで使用できる「Spatial audio」と呼ばれる空間オーディオ再現技術の追加です.
皆さんもう試しましたか?つけてるのにつけてないような感じで音が聞こえて非常に映画を見たりするのが楽しくなりますね.
そんな新たな技術を支えているのが,AirPods Proに内蔵されている加速度センサーを利用しているのです.

そして,その加速度センサーの値は簡単に取得できるんです. テンション上がりますね.

環境

XCode : 12.0
iOS : 14

実装方法

実装方法は簡単で,iPhoneの加速度センサーを使う時と同じく
Info.plistにNSMotionUsageDescriptionを追加し,CoreMotionをインポートするだけです.

あとは,使用したいViewControllerなどで以下のように記述するだけです.

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)             // 方位角
    }

}

おわりに

いかがだったでしょうか,意外にもこんなに簡単に取得できるなんてすごいなぁと思います.
やっぱりGAFAのエンジニアは桁違いにすごいと感じました.

サンプルプロジェクトも作ってみました.
よければご覧ください. ついでにスターもいただけると,,,

github.com

また,間違いなどありましたら教えていただけますと光栄です.

参考文献

1 Apple Developer Documentation

developer.apple.com

スポンサーリンク