Subvox 项目概述

Subvox 是一款 macOS 原型应用,旨在验证 AirPods Pro 的头部运动数据(通过 CMHeadphoneMotionManager 获取)是否包含足够信息,以将无声默念的词语转化为文本。

该应用未使用大型语言模型,而是采用小词汇量模板识别器,并结合统计检验来判断信号的有效性。

构建与运行要求

系统要求:macOS 14 及以上版本;支持头部追踪功能的 AirPods Pro 或其他兼容耳机(需连接为 Mac 音频输出设备)。首次启动需授予运动传感器权限。麦克风及语音提示仅在录制麦克风输入时激活。

构建步骤:

brew install xcodegen # 仅需执行一次
xcodegen generate
open Subvox.xcodeproj # ⌘R 运行

或通过命令行执行:

xcodebuild -project Subvox.xcodeproj -scheme Subvox -derivedDataPath build -allowProvisioningUpdates build
open build/Build/Products/Debug/Subvox.app
xcodebuild -project Subvox.xcodeproj -scheme Subvox -derivedDataPath build test

界面功能说明

界面模块功能描述
Sensors(传感器)实时显示用户加速度、旋转速率和姿态变化图表;包括采样率监测、麦克风输入选择、电平表及实验会话记录功能。
Train(训练)选择单词,按住空格键默念后释放,每次尝试存储为模板。Evaluate(评估)功能运行留一法分类和 500 次标签置换检验,显示准确率、P 值及混淆矩阵。可通过特征复选框(加速度/旋转/姿态)测试各通道的信号有效性。
Decode(解码)将运动数据转换为文本。支持按住空格键或在校准噪声底噪后自动检测。每个片段通过动态时间规整(DTW)与模板匹配并转录,同时并行显示实时麦克风转录内容以供对比。

解码工作原理

  1. 分割(CaptureController):通过按住空格键,或当能量触发超过校准后的噪声底噪(含预卷和后延机制)启动。
  2. 特征提取(MotionFeatures):每帧数据包含用户加速度(3维)、旋转速率(3维)及自片段开始以来的姿态变化(3维)。各通道进行均值中心化,并裁剪安静的前导和后缀帧。
  3. 匹配(DTW, TemplateClassifier):训练集通道进行 Z 分数标准化。采用单字最近邻算法及带有 Sakoe–Chiba 带的动态时间规整技术。若最佳距离高于最大阈值或与次优结果差距低于最小置信度,则拒绝该片段。
  4. 信号真实性验证(Evaluation):比较留一法准确率与打乱标签后的结果。若 P 值小于 0.05,表明运动流区分词语的能力优于随机猜测。

实验协议与数据存储

使用工具栏或 Sensors 界面中的Record Session(记录会话)功能。录音文件保存于 ~/Documents/Subvox/Sessions/<timestamp>-<condition>/ 目录:

  • motion.csv:所有运动采样数据,t 为会话开始后的秒数。
  • audio.caf:麦克风音频(若麦克风运行中)。
  • events.csv:每个按住空格键的片段,含标签或预测结果。
  • meta.json:条件、提示语及用于对齐音频与运动数据的起始偏移量。

建议方案:在正常说话、低语和无声默念三种模式下,分别使用相同的 5 个单词脚本各重复 10 次,随后在 Train 界面比较不同特征集的评估结果。

训练数据集存储路径:~/Library/Application Support/Subvox/dataset.json。

已知局限性

  • 耳机运动数据处理频率较低(AirPods 上约为 25 Hz)。由于语音检测加速度计和内向式麦克风未对外暴露,应用捕捉的是下颌和头部运动,而非声带振动。
  • 模板具有用户和会话特异性。重新佩戴 AirPods 可能导致信号偏移。
  • 将 AirPods 选为麦克风输入设备会使其切换至蓝牙免提(HFP)配置文件。