从没有磁力计的设备获取音调

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 的文档