直接回答
验证外接麦克风的离线翻译,应从第一次选择输入开始,而不是只看耳机图标或最终译文。Android 可以列出当前已连接的输入设备,AudioRecord 在支持的接口上可以请求首选设备,但首选不一定等于实际录音路由。分别记录三个事实:系统发现了什么、应用请求了什么、录音开始后实际观察到什么。它们能帮助定位输入选择问题,不能被合并成一个“外接设备已支持”的标签。 先核对系统 API 级别、具体录音对象和封装是否暴露所需接口。AudioRecord.setPreferredDevice 在 API 23 加入,用来指定首选输入;返回成功不等于声学输入已验证,也不保证偏好设备最终成为活动路由。AudioManager.getDevices(GET_DEVICES_INPUTS) 是设备清单,不是录音选择接口。如果当前对象或系统不支持选择,应明确显示系统默认输入或证据未知,不能把内置麦克风标成用户选择的外接设备。 getPreferredDevice 反映偏好请求,getRoutedDevice 则只在 AudioRecord 正在录音时提供当前路由信息。录音尚未开始时返回空值,不应立即当成配件故障。按照接口契约在正确时机采集证据,保留首选请求的返回结果和实际设备身份。如果偏好请求失败或路由不符,先让用户了解当前输入并选择继续或改用默认输入,再解释采集或翻译结果。不要让失败选择静默进入后面的质量判断。 本文关注录音开始前的输入选择与录音后的核实,不重复配件中途断连、片段拼接和恢复策略。权限仍应在用户发起的录音流程中请求,并说明会录制一段短句、提供明确停止控制;拒绝后不得开始采集。本地推理不会改变 Android 的录音权限要求。这里提供验证方法,不声称 Cove Travel 或 Cove Voice 目前已经提供外接麦克风选择界面。 使用由用户控制的人声对照。保持录音配置不变,分别用内置和候选外接输入录制同一句短话,包含清楚起音、两个易区分词、一处数字和短暂停顿。通过本地播放预览,确认可辨识内容以及明显静音或噪声,再与路由证据比对。人工听见短句只是采集对照,不是 ASR 准确率测量,也不能代替活动路由查询。样例应是合成或获准公开的内容,测试后按记录的保留规则处理临时音频。 每次尝试记录 Android 版本和 API、设备与配件身份、录音 API、初始化状态、请求设备、请求结果、录音中的实际路由、配置格式、实际读到的帧或字节以及人工检查结果。将格式、路由、声音可听性和模型任务分开。只有确认本次输入路径后,才执行固定源短句和目标语言方向的翻译样例。比较配件时保持模型、提示词、语言方向及播放输出一致,不把输入差异误写成模型差异。 转写、翻译和语音播放应分别记录成功与失败。如果要核查离线能力,在受控环境中关闭网络,观察设置、模型访问、转写、翻译和播放是否都仍可用;应用自身的统计、账户、购买或下载请求还需另查。本地模型只说明某一步推理位置,不证明所有功能没有网络依赖。如果受测构建必须调用远端翻译服务,不能把这次运行计为完整离线通过。 最后报告准确受测组合:配件、设备、系统、应用构建、录音实现、首选和实际输入、格式、样例、语言方向及模型运行时,并保留所有失败。一次正确路由查询加可理解的录音,只能支持关于该组合的有限结论。兼容清单、识别率、延迟、耗电或所有 Android 路由行为需要单独的重复原始记录,不能从本方法推测。
开始录音前选择已连接的 USB 麦克风
用户进入离线翻译界面时 USB 麦克风已连接,并希望使用它代替内置输入。系统列出了配件,但应用尚未核对录音对象是否支持选择、首选请求是否成功、活动路由或测试短句是否真的被采集。
决策
先记录发现和请求结果,再启动用户控制的短句录音,查询活动路由并进行可听对照;确认输入后才评价翻译。
预期结果
测试能分清发现、选择、实际采集和翻译阶段,失败时明确展示默认输入或未知状态,不发布未经验证的普遍兼容承诺。
需要收集的证据
只有将以下证据与同一模型文件和测试运行关联起来,结论才可复核:
- ANDROID-AUDIO-01:录音输入管线和格式须有实际证据。
- BENCHMARK-01:配件和设备结论需要受测组合的原始记录。
- AudioManager 与 AudioRecord 的发现、首选设备和活动路由文档。
发布结论只对所记录的配置和验收集有效;扩大适用范围需要更多记录。
实施流程
- 固定录音对象与接口. 记录 Android/API 版本、录音封装、配件身份和格式配置,确认是否暴露 setPreferredDevice 与 getRoutedDevice。界面选项不能替代实际接口证据。
- 列出输入候选. 使用录音管线支持的设备清单发现候选,并区分设备类型、身份和用户选择。AudioManager 枚举成功不能证明当前录音已从这个配件读取。
- 先请求再观察路由. 在支持时请求选定 AudioDeviceInfo 并记录结果,开始录音后按契约查询活动设备。偏好设备不保证等于路由,录音前空路由也不表示外设损坏。
- 完成可听短句对照. 用相同录音配置分别采集内置和外接输入,提供本地播放和明确停止控制。核对可辨识词、数字及静音噪声,并与活动路由证据一起记录。
- 单独验证翻译任务. 确认输入后固定短句、语言方向、模型、提示词和播放设置,分别记录转写、翻译与播放结果。关闭网络后重试,以真实受测流程判断离线是否通过。
- 报告回退和结论范围. 请求失败、路由不符或证据不可得时,明确提示默认输入或未知状态。报告准确设备配件与构建,并保留失败,不用一次样例推出兼容或准确率。
让每个阶段的状态都可观察。失败信息应指出阶段、模型、运行时和恢复动作,同时避免记录用户私密内容。
验收标准
- 设备发现、首选请求及录音中的活动路由分别记录,不能互相替代。
- 人声对照在用户控制下进行,路由不符或权限拒绝时有清楚状态。
- 转写、翻译、播放和离线结果分别记录,结论只适用于受测组合。
决策对照表
| 维度 | 选择或证据 | 解读方式 |
|---|---|---|
| 设备发现 | AudioManager 列出已连接输入 | 只能给出候选,不能说明活动录音使用哪个设备,也不是录音选择接口。 |
| 首选请求 | AudioRecord.setPreferredDevice | 请求特定录音对象使用首选输入,成功返回不能代替实际路由或声音检查。 |
| 活动路由 | 录音时查询 getRoutedDevice | 在接口规定的状态下观察实际设备,再用短句采集补充证据,仍不构成翻译质量评价。 |
需要避免的失败模式
- 把连接图标或设备清单当成已选择的活动输入。
- 录音前查询路由为空就断定外设失败。
- 用一次可听录音承诺普遍兼容或识别准确率。
还要避免静默回退、版本未固定、缺少取消处理,以及把不同配置的结果混在一起下结论。失败运行也应与成功记录一并保存。
最小复现记录
| 层级 | 记录内容 |
|---|---|
| 设备 | 厂商、型号、芯片、内存档位、操作系统版本 |
| 软件 | 应用版本和 Git 提交号 |
| 模型 | 系列、变体、版本、格式、文件长度、摘要、量化方式 |
| 运行时 | 名称、版本、请求后端及实际后端证据 |
| 工作负载 | 样例版本、输入摘要、提示词摘要、输出策略 |
| 结果 | 完成、失败、取消、回退及保护隐私的诊断信息 |
发布检查表
- ☐ 主要搜索问题已回答,且没有未经支持的数字。
- ☐ 所有模型文件和运行时版本均已固定。
- ☐ 代表性任务和失败处理策略均有说明。
- ☐ 生命周期、取消、清理和回退均已测试。
- ☐ 用户内容与网络边界均有说明。
- ☐ 结论只适用于被记录的配置。
- ☐ 新增测试结果时链接到原始方法或证据。
来源与相关证据
- Cove 基准测试方法
- Android AudioManager:输入设备清单
- Android AudioDeviceCallback:设备发现事件
- Android AudioRecord:首选设备与实际录音路由
- Android:音视频采集概览
中文部署与排错专题见。奇连 AI 端侧专题。
常见问题
请求首选设备成功就等于外接麦克风正在录音吗?
不是。返回结果说明请求的设备对该录音对象有效,实际路由仍可能不同。录音开始后要查询活动设备,并进行用户控制的人声采集对照,不能只看接口返回或连接图标。
录音前 getRoutedDevice 返回空值是否表示配件失败?
不能这样判断。该接口的有效信息与正在录音的状态有关,应按文档在正确时机查询。将录音对象、请求结果和当前状态一起记录,再区分未开始、路由不符和真正采集失败。
一台手机和一个外设通过后能公布普遍支持或准确率吗?
不能。一次验证只提供受测设备、配件、接口、格式和样例的证据。其他组合、识别或翻译质量、耗电与持续性能需要另行重复测试和原始记录,不应从输入选择结果推断。