Appearance
如何构建 EarLLM:开发 Android 蓝牙耳机语音 LLM 助手
本文提供 EarLLM One 项目的完整开发指南,解决在 Android 端通过 Kotlin/Compose 实现蓝牙音频采集、语音转文字(STT)、LLM 交互及文字转语音(TTS)回传的复杂技术链路。
为什么需要这个技能
开发一个将蓝牙耳机与 AI 结合的语音助手面临诸多底层挑战:Android 版本的音频路由差异、蓝牙 SCO 协议的带宽限制、前台服务的权限管理以及语音管线(Voice Pipeline)的状态同步。
EarLLM 提供了一套经过验证的模块化架构,将蓝牙控制、音频采集、语音处理和 LLM 接口解耦,使开发者能够快速构建一个可实际运行的“耳机 AI 助手”,而无需从零开始处理繁琐的 Android 硬件兼容性问题。
适用场景
- 构建一个可以通过蓝牙耳机快捷键触发、通过语音与 AI 对话的 Android 应用。
- 研究 Android 14+ 版本的
FOREGROUND_SERVICE_MICROPHONE权限及前台服务实现。 - 需要实现蓝牙 SCO/BLE Audio 切换、回声消除(AEC)等底层音频路由控制。
- 开发需要集成 OpenAI 兼容接口的移动端语音交互应用。
核心工作流
EarLLM 采用了多模块依赖架构:app voice audio core-logging。其核心交互链路如下:
- 触发采集:通过
HeadsetButtonController监听耳机按键 触发VoicePipeline切换录音状态。 - 音频处理:
VoiceCaptureController以 16kHz 单声道采集 PCM 数据SpeechToTextController将其转译为文本。 - AI 推理:
LlmClient调用 OpenAI 兼容 API 获取文本响应。 - 语音回传:
TextToSpeechController将响应转为语音,通过 A2DP 协议发送至耳机。
关键技术要点
- 音频路由:在 Android 12+ 中,应弃用
startBluetoothSco(),改用AudioManager.setCommunicationDevice()。 - 回声消除:必须使用
VOICE_COMMUNICATION音频源以启用 AEC,防止 TTS 输出被 STT 重新录入。 - 状态管理:严格遵循
StateFlow模式,通过MainViewModel同步 UI 状态。
构建与测试
生成构建产物
在项目根目录下执行以下 PowerShell 命令以打包项目:
powershell
powershell -Command "Remove-Item 'EarLLM_One_v1.0.zip' -Force -ErrorAction SilentlyContinue; Compress-Archive -Path (Get-ChildItem -Exclude '*.zip','_zip_verify','.git') -DestinationPath 'EarLLM_One_v1.0.zip' -Force"运行测试
bash
./gradlew test --stacktrace # 运行单元测试
./gradlew connectedAndroidTest # 运行设备端集成测试下载和安装
解压后将目录放入你的 AI 工具 skills 文件夹,重启工具后即可使用。具体路径参考内附的 USAGE.zh.md。
你可能还需要
暂无推荐