Android SoundTrigger架构学习

news/2025/2/24 1:57:27

本文将个人针对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.niftyadmin.cn/n/5863922.html

相关文章

MySQL后端返回给前端的时间变了(时区问题)

问题:MySQL里的时间例如为2025-01-10 21:19:30,但是返回到前端就变成了2025-01-10 13:19:30,会出现小时不一样或日期变成隔日的问题 一般来说设计字段时会使用datetime字段类型,这是一种用于时间的字段类型,而这个类型…

安卓系统远程控制电脑方法,手机远控教程,ToDesk工具

不知道大家有没有觉得手机、平板虽然很好用,却也仍存在有很多替代不了电脑的地方。就比如说撰写文档、做数据报表啥的就不如PC端操作般方便,就跟别说PS修图、AE视频剪辑等需高性能设备来带动才易用的了。 好在也是有对策可解决,装个ToDesk远程…

【人工智能】用Python迈向轻量化深度学习——模型压缩与量化实战指南

《Python OpenCV从菜鸟到高手》带你进入图像处理与计算机视觉的大门! 解锁Python编程的无限可能:《奇妙的Python》带你漫游代码世界 随着移动端与嵌入式设备对深度学习推理需求的不断提升,模型的体积和推理效率成为关注重点。本文系统介绍了模型压缩与量化技术,详细阐述了…

Linux内核,slub分配流程

我们根据上面的流程图,依次看下slub是如何分配的 首先从kmem_cache_cpu中分配,如果没有则从kmem_cache_cpu的partial链表分配,如果还没有则从kmem_cache_node中分配,如果kmem_cache_node中也没有,则需要向伙伴系统申请…

使用pyinstaller对gradio和chromadb进行打包

解决gradio和chromadb的打包问题 背景问题gradio和gradio_client模块chromadb模块 解决 背景 python项目里包含了gradio和chromadb模块,使用pyinstaller后总有模块找不到,这里分享一个办法一招解决。 问题 gradio和gradio_client模块 gradio在被打进…

【Redis】基础知识入门

文章目录 Redis 入门SQL && NoSQLRedis 介绍 Redis 常见命令Redis数据结构介绍通用命令String 类型基本内容介绍常见的命令key 的结构 Hash类型基本内容介绍常见命令 List类型基本内容介绍常见命令 Set类型基本内容介绍常见命令 SortedSet 类型基本内容介绍常见命令 Re…

迪威模型:引领 3D 模型轻量化技术革新

在数字化时代,3D 模型的应用领域愈发广泛,从影视制作、游戏开发到工业设计、建筑仿真等,都离不开 3D 模型的支持。然而,随着模型复杂度的不断提高,文件体积也日益庞大,这给存储、传输和加载带来了极大的挑战…

leetcode刷题记录(一百一十五)——64. 最小路径和

(一)问题描述 64. 最小路径和 - 力扣(LeetCode)64. 最小路径和 - 给定一个包含非负整数的 m x n 网格 grid ,请找出一条从左上角到右下角的路径,使得路径上的数字总和为最小。说明:每次只能向下…