从没有磁力计的设备获取音调
Getting pitch from devices that dont have magnetometer
我需要获取设备的方向(具体是间距),
我正在使用一种涉及实现 SensorEventListener 加速度计和磁力计的方法
问题是有些设备没有磁力计(我偶然发现了三星 J7 和 J5,但假设还有更多),我测试的所有其他设备都很好用。现在我知道这些设备没有磁力计,所以我尝试注册已弃用的 "TYPE_ORIENTATION" 事件和 "TYPE_ROTATION_VECTOR" 事件,但 none 有效。
我在这些设备上得到的只是来自加速度计的事件。
我知道这是可能的,因为我已经在这些 phone 上下载了气泡级别应用程序并且它们可以工作(罗盘 dosent)
谢谢
编辑:
我需要通过倾斜 phone 来滚动视图,所以我需要校准一次然后知道间距是大于还是小于初始校准
您需要对加速度计进行低通滤波以获得重力矢量。
float[] gravity = low pass filter accelerometer
计算重力范数
float gravityNorm = calculate the norm of gravity.
那么音高就是
(float) Math.asin(-gravity[1] / gravityNorm))
对于上面的公式,请阅读我的项目 https://github.com/hoananguyen/dsensor
中 class DSensor 中 TYPE_PITCH 的文档
我需要获取设备的方向(具体是间距), 我正在使用一种涉及实现 SensorEventListener 加速度计和磁力计的方法
问题是有些设备没有磁力计(我偶然发现了三星 J7 和 J5,但假设还有更多),我测试的所有其他设备都很好用。现在我知道这些设备没有磁力计,所以我尝试注册已弃用的 "TYPE_ORIENTATION" 事件和 "TYPE_ROTATION_VECTOR" 事件,但 none 有效。
我在这些设备上得到的只是来自加速度计的事件。
我知道这是可能的,因为我已经在这些 phone 上下载了气泡级别应用程序并且它们可以工作(罗盘 dosent) 谢谢
编辑: 我需要通过倾斜 phone 来滚动视图,所以我需要校准一次然后知道间距是大于还是小于初始校准
您需要对加速度计进行低通滤波以获得重力矢量。
float[] gravity = low pass filter accelerometer
计算重力范数
float gravityNorm = calculate the norm of gravity.
那么音高就是
(float) Math.asin(-gravity[1] / gravityNorm))
对于上面的公式,请阅读我的项目 https://github.com/hoananguyen/dsensor
中 class DSensor 中 TYPE_PITCH 的文档