当前位置: 首页 > article >正文

Android SoundTrigger架构学习

本文将个人针对Android SoundTrigger的学习做了简单总结,以方便后续查询和学习。

一、架构解析

1、Android SoundTrigger架构如下(简图)

1.1、简单介绍

1)SoundTriggerHelper

SoundTriggerHelper是一个应用辅助工具类,它是应用和服务(这里是SoundTriggerSerivice)之间的适配层,其内部封装了常用的API接口,供APP直接调用;SoundTriggerHelper与SoundTriggerService之间使用HIDL/AIDL 进行交互;

2)SoundTriggerService

它是SoundTrigger架构的服务核心,运行在system server进程下,负责SoundTrigger整个系统的调度;典型操作如下:

registerSoundModel()  // 模型注册
startRecognition()    // 启动识别
stopRecognition()     // 停止识别

SoundTriggerService向下调用SoundTriggerModule,实现与SoundTriggerHAL的交互。

3)SoundTriggerModule

它是与与SoundTrigger HAL直接交互的层,提供了硬件能力抽象层的作用,支持模块的多实例,典型操作接口如下:

loadSoundModel()   // 模型加载
unloadSoundModel() // 模型卸载
startRecognition() // 开启监听
stopRecognition()  // 停止监听
getParameter()     // 参数获取

4)SoundTrigger HAL

它是负责直接与硬件交互的层,向上承接SoundTriggerModule;SoundTrigger HAL的主要作用是在低功耗状态下处理声音识别,比如语音唤醒词检测;提供声学模型管理(加载或卸载),并可以与Audio HAL交互,实现语音唤醒后相关音频流的处理。

核心文件目录:

核心文件目录:
soundtrigger/
├── Android.bp                # 编译配置
├── SoundTriggerHw.cpp        # HAL实现主体
├── SoundTriggerHalHidl.cpp   # HIDL适配层
├── SoundTriggerHalAidl.cpp   # AIDL适配层 (Android 12+)
└── include/
    └── SoundTriggerHal.h     # 头文件

常用接口如下:

// 来自ISoundTriggerHw.hal主要接口
interface ISoundTriggerHw {
    getProperties() generates (SoundTriggerProperties properties);
    loadSoundModel(SoundModel soundModel) generates (int32_t ret, int32_t modelId);
    startRecognition(int32_t modelId) generates (int32_t ret);
    stopRecognition(int32_t modelId) generates (int32_t ret);
    unloadSoundModel(int32_t modelId) generates (int32_t ret);
};

1.2、代码路径说明

(1)SoundTriggerService代码路径最新路径如下:

frameworks/base/services/voiceinteraction/java/com/android/server/soundtrigger/SoundTriggerService.java

(2)SoundTrigger HAL代码路径

A) HIDL接口(Android8.0+):hardware/interfaces/soundtrigger/2.3/ISoundTriggerHw.hal

不同芯片在Google原生代码基础上做了适配,这里以Qualcomm和MTK当前两个芯片生产商为例:
Qualcomm:
vendor/qcom/opensource/audio-hal/primary-hal/hal/soundtrigger/

MTK:
vendor/mediatek/proprietary/hardware/audio/soundtrigger/


http://www.kler.cn/a/557471.html

相关文章:

  • 0基础学前端-----CSS DAY13
  • VR疗法的新突破——王博如何用技术帮助心理康复
  • STM32单片机芯片与内部95 STM32F429系列 架构 启动 供电 时钟
  • 14.5 Auto-GPT:基于Agent的AGI实验如何重新定义人工智能未来?
  • 阿里云ECS命名规则解析与规格选型实战指南
  • 番茄工作法html实现
  • 特征提取:如何从不同模态中获取有效信息?
  • Linux第十二节 — 进程概念详解 + 操作系统引入
  • 第二课 — 读取按钮状态用以控制LED闪烁
  • 【JavaScript进阶】构造函数数据常用函数
  • [ Vim ] 常用命令 and 配置
  • 从0开始:OpenCV入门教程【图像处理基础】
  • open webui 部署 以及解决,首屏加载缓慢,nginx反向代理访问404,WebSocket后端服务器链接失败等问题
  • 记录一下_treafik使用Gateway-APi使用的细节参数
  • [ComfyUI]Recraft贴图开源方案,实现服装印花自由
  • P2865 [USACO06NOV] Roadblocks G 与最短路的路径可重复的严格次短路
  • Spring Boot中整合Flink CDC 数据库变更监听器来实现对MySQL数据库
  • 工业级无人机手持地面站技术详解
  • 基于SpringBoot+vue+uniapp的智慧旅游小程序+LW示例参考
  • DirectX SDK(June 2010)安装报错:S1023