语音转文本
Xime 的语音转文本功能通过在线 FunAsr 插件实现实时语音识别,将语音转换为文字输入。
权限声明
使用语音转文本功能需要以下权限:
- 录音权限(必需) - 录制语音用于识别
- 网络权限(必需) - 在线识别需要网络连接
首次使用时,系统会请求麦克风权限,请务必点击「允许」。如果拒绝权限,语音功能将无法使用。
功能定位
Xime 的语音转文本基于阿里百炼 FunAsr 在线识别。如果您追求更高的识别准确率、更快的响应速度或更丰富的功能(如语音命令、多语言混合识别等),建议使用商业输入法(如讯飞、百度、搜狗等)。
Xime 的语音功能适合以下场景:
- 需要便捷的语音转文字输入
- 对识别准确率有较高要求
- 已具备可用的网络连接
功能特点
- 在线实时识别 - 基于阿里百炼 FunAsr,实时流式识别
- 流式输出 - 识别结果实时显示;句子结束时(或长按松开时)一次性提交完整句子,整句连贯、不重复、不会因按键而丢失
- 自带标点 - FunAsr 识别结果自带标点,宿主不再重复追加(可选标点预测模型可进一步提升)
- 音量可视化 - 显示麦克风音量波动
- 预缓冲机制 - 按住空格键时立即开始录音,缓存音频数据,防止语音丢失(吃字)
- STT 开关 - 可在设置中启用或禁用语音转文字功能,禁用后长按空格键输出连续空格
在线 API 配置(阿里百炼 FunAsr)
在线 FunAsr 以插件形式提供,需单独安装 funasr-asr 插件包(.xipk)后使用。
获取 API Key
- 访问 阿里云百炼平台
- 登录/注册阿里云账号
- 在模型广场获取 API Key
配置步骤
- 安装
funasr-asr插件(.xipk) - 进入输入法设置 → 插件管理,确认 FunAsr 插件已启用(未被标记为版本不兼容)
- 进入「语音转文本」设置
- 选择「在线 ASR」标签页
- 点击「阿里百炼 FunAsr」进入详细设置
- 将 API Key 粘贴到输入框
- 点击保存按钮保存设置
- 授予麦克风权限
特点
- 自带标点符号,宿主不再重复追加,避免"。。"
- 实时流式识别,响应速度快
- 长按空格说话、松开即提交整句,识别结果连贯不重复
- 高准确率
标点预测模型
Xime 支持可选的标点预测模型,可在识别结果中添加/优化标点符号。
模型来源
标点预测模型基于 Transformer 架构训练,项目地址: https://github.com/ximeiorg/srf-punctuation
启用方法
- 进入「设置 → 语音转文本」
- 在「标点预测模型」区域点击下载模型
- 下载完成后开启「启用标点预测」开关
技术参数
- 模型:Transformer 标点预测模型
- 量化:int8 量化
- 输入:中文文本
- 输出:带标点符号的文本
- 支持标点:逗号、句号、问号、感叹号
使用方法
启用语音功能
在「设置 → 语音转文本」中开启语音转文字开关。如果关闭该开关,长按空格键将不会进入语音模式,而是连续输出空格字符。
启动语音输入
- 在输入状态下,长按空格键进入语音模式
- 或点击键盘上的麦克风图标
- 开始说话,识别结果会实时显示
预缓冲机制:长按空格键时,系统会立即开始录音并缓存音频数据,避免因录音启动延迟导致的语音丢失(吃字)。松开空格键后,缓存的音频会与后续录音一起发送给识别引擎。
结束语音输入
- 松开空格键:提交识别结果
- 点击发送按钮:提交结果并关闭语音模式
- 点击取消按钮:放弃结果并关闭语音模式
权限要求
语音转文本功能需要以下权限:
| 权限 | 用途 | 必需场景 | 如何授予 |
|---|---|---|---|
| 麦克风(RECORD_AUDIO) | 录制语音用于识别 | 所有场景必需 | 首次使用时弹窗请求,点击「允许」 |
| 网络(INTERNET) | 连接阿里云服务进行识别 | 必需 | 应用安装时自动授予 |
权限检查
如果语音功能无法使用,请检查权限设置:
- 进入「系统设置 → 应用 → Xime → 权限」
- 确保「麦克风」权限已开启
- 确保网络连接正常
提示
- 拒绝麦克风权限后,语音功能将完全无法使用
- 可以在系统设置中重新授予麦克风权限
技术细节
在线 API 技术参数
- 服务商:阿里云百炼平台
- 模型:qwen-audio-3.0-asr-flash-streaming(实时语音识别)
- 协议:WebSocket 实时通信
- 采样率:16000 Hz
- 格式:PCM 16-bit 单声道
相关文件
| 文件 | 说明 |
|---|---|
SpeechRecognitionManager.kt | 语音识别管理器 |
FunAsrWebSocketManager.kt(funasr 插件内) | FunAsr WebSocket 连接管理 |
FunAsrAsrBackend.kt(funasr 插件内) | FunAsr 后端实现 |
VoiceRecognitionHandler.kt | 语音识别 UI 处理 |
VoiceKeyboardLayout.kt | 语音模式键盘布局 |
PunctuationInference.kt | 标点预测推理引擎 |
PunctuationModelManager.kt | 标点预测模型下载管理 |
相关项目
| 项目 | 说明 |
|---|---|
| srf-punctuation | 标点预测模型训练与导出 |
识别状态
kotlin
enum class RecognitionState {
IDLE, // 空闲
LISTENING, // 正在监听
PROCESSING, // 处理中
ERROR // 错误
}常见问题
Q: 语音识别无反应?
检查以下几点:
- 是否已授予麦克风权限
- API Key 是否正确配置
- FunAsr 插件是否已安装并启用
- 网络连接是否正常
Q: 识别准确率低?
- 确保在安静环境下使用
- 说话清晰,语速适中
- 麦克风没有被遮挡
Q: 连接失败?
- 检查网络连接
- 确认 API Key 有效
- 稍后重试,可能是服务端临时故障
Q: 识别结果标点很多、句子被切碎?
已优化为整句提交:识别过程中的部分结果只做实时预览,句子结束(或长按松开)时才一次性提交完整句子,整句连贯、不重复。在线 FunAsr 自带标点,宿主不会再重复追加(避免"。。")。
Q: 语音输入时按其他键,已识别的内容消失了?
语音模式为长按触发:说话时部分结果实时上屏,松开空格键时会立即提交当前已识别内容并结束识别,不会因按其他键而丢失。如果仍遇到,请确认已更新到包含该修复的版本。
注意事项
- 语音识别需要联网使用
- API Key 请妥善保管,不要泄露
- 语音数据会上传至阿里云进行处理
- 建议在 WiFi 环境下使用,避免消耗移动数据流量