Flutter三方库适配OpenHarmony【flutter_speech】— 与其他 HarmonyOS Kit 的联动
欢迎加入开源鸿蒙跨平台社区:https://openharmonycrossplatform.csdn.net语音识别很少单独使用——它通常是更大交互链条中的一环。今天我们探讨flutter_speech如何与其他HarmonyOS Kit联动,构建更丰富的语音交互体验。自然语言处理(NLP)意图识别实体提取文本分类STT+TTS:构建语音对话闭环,注意音频焦点冲突:语音识别+意图分析,实现智能语
前言
欢迎加入开源鸿蒙跨平台社区:https://openharmonycrossplatform.csdn.net
语音识别很少单独使用——它通常是更大交互链条中的一环。今天我们探讨flutter_speech如何与其他HarmonyOS Kit联动,构建更丰富的语音交互体验。
一、Core Speech Kit 与 Text-to-Speech 的结合
1.1 语音交互闭环
用户说话 → [STT] → 文字 → 业务处理 → 回复文字 → [TTS] → 语音播报
1.2 TTS Kit基础用法
import { textToSpeech } from '@kit.CoreSpeechKit';
const ttsEngine = await textToSpeech.createEngine({
language: 'zh-CN',
person: 0,
online: 1
});
ttsEngine.speak('你好,今天天气晴朗', { requestId: '1' });
1.3 STT+TTS联动示例
// Dart层的语音对话实现
void onRecognitionComplete(String text) async {
// 1. 识别完成,获取用户输入
final userInput = text;
// 2. 业务处理(例如查询天气)
final response = await processCommand(userInput);
// 3. TTS播报结果
await _ttsPlugin.speak(response);
}
Future<String> processCommand(String input) async {
if (input.contains('天气')) return '今天天气晴朗,气温25度';
if (input.contains('时间')) return '现在是下午3点30分';
return '抱歉,我没有理解您的意思';
}
1.4 STT和TTS的冲突处理
STT和TTS不能同时工作——TTS播报时麦克风会采集到播报声音,导致STT误识别。
// 播报前停止识别
await _speech.cancel();
await _tts.speak(response);
// 播报完成后恢复识别
await _speech.listen();
| 状态 | STT | TTS | 说明 |
|---|---|---|---|
| 等待用户 | 监听中 | 静默 | 正常状态 |
| 用户说话 | 识别中 | 静默 | STT工作 |
| 系统回复 | 暂停 | 播报中 | TTS工作 |
| 回复完成 | 恢复监听 | 静默 | 回到等待 |
二、与 AI Framework Kit 的集成可能性
2.1 AI Framework Kit概述
AI Framework Kit提供了设备端AI推理能力,包括:
- 自然语言处理(NLP)
- 意图识别
- 实体提取
- 文本分类
2.2 语音识别+意图识别
用户说:"帮我订明天下午3点去北京的机票"
│
├── STT识别文字
│
└── AI Framework意图识别
├── 意图:订机票
├── 时间:明天下午3点
├── 目的地:北京
└── → 调用订票API
2.3 集成示例
// 原生端:STT结果传给AI Framework
onResult(sessionId, result) {
if (result.isLast) {
// 识别完成,进行意图分析
const intent = await aiFramework.analyzeIntent(result.result);
channel?.invokeMethod('speech.onIntent', JSON.stringify(intent));
}
}
// Dart层接收意图分析结果
case 'speech.onIntent':
final intent = jsonDecode(call.arguments);
handleIntent(intent);
break;
2.4 当前限制
AI Framework Kit的NLP能力目前还在发展中,功能不如云端AI服务丰富。对于复杂的意图识别,建议将文本发送到云端处理。
三、与 Audio Kit 的音频流协作
3.1 Audio Kit的作用
Audio Kit管理设备的音频输入输出,包括:
- 音频焦点管理
- 音频流路由
- 音量控制
- 音频录制
3.2 音频焦点冲突
当flutter_speech在使用麦克风时,如果其他App也请求麦克风,会产生焦点冲突:
| 场景 | 行为 | 影响 |
|---|---|---|
| 来电 | 系统抢占麦克风 | STT中断 |
| 其他App录音 | 可能被拒绝 | 不影响STT |
| 音乐播放 | 不冲突(不用麦克风) | 可能影响识别准确率 |
3.3 处理音频焦点变化
// 监听音频焦点变化(扩展方案)
import { audio } from '@kit.AudioKit';
audio.on('audioInterrupt', (event) => {
if (event.forceType === audio.InterruptForceType.INTERRUPT_FORCE) {
// 被系统强制中断(如来电)
if (plugin.isListening) {
plugin.isListening = false;
channel?.invokeMethod('speech.onError', -1);
}
}
});
3.4 降低背景噪音的影响
如果设备正在播放音乐,识别准确率会下降。可以在识别前降低媒体音量:
// 识别前降低媒体音量
void start() async {
await _audioManager.setMediaVolume(0.2); // 降低到20%
await _speech.listen();
}
void onRecognitionComplete(String text) {
_audioManager.restoreMediaVolume(); // 恢复音量
}
四、多模态交互:语音 + 手势 + 视觉
4.1 多模态交互场景
| 模态 | 输入方式 | Kit | 适用场景 |
|---|---|---|---|
| 语音 | 说话 | Core Speech Kit | 解放双手 |
| 手势 | 触摸/滑动 | 触摸事件 | 精确操作 |
| 视觉 | 摄像头 | Vision Kit | 图像识别 |
4.2 语音+手势的结合
// 按住说话(Push-to-Talk)
GestureDetector(
onLongPressStart: (_) {
_speech.listen();
setState(() => _isListening = true);
},
onLongPressEnd: (_) {
_speech.stop();
setState(() => _isListening = false);
},
child: Container(
decoration: BoxDecoration(
shape: BoxShape.circle,
color: _isListening ? Colors.red : Colors.blue,
),
padding: EdgeInsets.all(24),
child: Icon(Icons.mic, color: Colors.white, size: 48),
),
)
4.3 语音+视觉的结合
用户拍照 → Vision Kit识别物体 → "这是一个苹果"
用户说:"这个多少钱?"
→ STT识别文字
→ 结合视觉上下文:"苹果的价格是..."
→ TTS播报
4.4 多模态状态管理
class MultiModalState {
bool isListening = false; // 语音输入中
bool isSpeaking = false; // TTS播报中
bool isCameraActive = false; // 摄像头活跃
String? lastVisualContext; // 最近的视觉识别结果
bool get canListen => !isSpeaking && !isCameraActive;
bool get canSpeak => !isListening;
}
五、未来 Kit 能力扩展展望
5.1 期待的能力
| 能力 | 当前状态 | 期望 | 对flutter_speech的影响 |
|---|---|---|---|
| 多语言STT | 仅中文 | 英文、日文等 | 消除最大限制 |
| 离线STT优化 | 基础 | 高准确率离线 | 无网络也能用 |
| 说话人识别 | 无 | 区分不同说话人 | 多人对话场景 |
| 情感识别 | 无 | 识别语气情感 | 更智能的交互 |
| 实时翻译 | 无 | STT+翻译一体 | 跨语言交流 |
| 声纹认证 | 无 | 通过声音验证身份 | 安全场景 |
5.2 flutter_speech的扩展准备
当前的架构已经为未来扩展做好了准备:
Dart API层(不变)
│
├── activate(locale) → 未来支持更多语言
├── listen() → 未来支持更多参数
├── callbacks → 未来支持更多事件类型
│
MethodChannel(扩展方法名即可)
│
├── speech.activate → 不变
├── speech.listen → 可加参数
├── speech.onSpeaker → 新增:说话人识别
├── speech.onEmotion → 新增:情感识别
│
Native层(跟进Kit更新)
│
└── Core Speech Kit → 新API直接对接
5.3 保持向后兼容
扩展时要保持向后兼容:
- 新增的回调用可选参数
- 新增的方法不影响现有方法
- 新增的平台能力通过Feature Detection暴露
// 未来可能的API扩展
class SpeechRecognition {
// 现有方法不变
Future activate(String locale) => ...;
Future listen() => ...;
// 新增方法(可选)
Future<bool> isSpeakerRecognitionAvailable() => ...;
Future<List<String>> getSupportedLanguages() => ...;
}
总结
本文探讨了flutter_speech与其他HarmonyOS Kit的联动:
- STT+TTS:构建语音对话闭环,注意音频焦点冲突
- STT+AI Framework:语音识别+意图分析,实现智能语音助手
- STT+Audio Kit:音频焦点管理,处理中断和噪音
- 多模态交互:语音+手势+视觉的结合
- 未来展望:多语言、离线优化、说话人识别等能力
下一篇我们讲生产环境部署与发布——插件打包、版本管理、文档编写等实战话题。
如果这篇文章对你有帮助,欢迎点赞、收藏、关注,你的支持是我持续创作的动力!
相关资源:
更多推荐
所有评论(0)