前言

欢迎加入开源鸿蒙跨平台社区: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的联动:

  1. STT+TTS:构建语音对话闭环,注意音频焦点冲突
  2. STT+AI Framework:语音识别+意图分析,实现智能语音助手
  3. STT+Audio Kit:音频焦点管理,处理中断和噪音
  4. 多模态交互:语音+手势+视觉的结合
  5. 未来展望:多语言、离线优化、说话人识别等能力

下一篇我们讲生产环境部署与发布——插件打包、版本管理、文档编写等实战话题。

如果这篇文章对你有帮助,欢迎点赞、收藏、关注,你的支持是我持续创作的动力!


相关资源:

Logo

开源鸿蒙跨平台开发社区汇聚开发者与厂商,共建“一次开发,多端部署”的开源生态,致力于降低跨端开发门槛,推动万物智联创新。

更多推荐