ESP32 S3 语音识别 语音唤醒程序流程

embedded/2024/10/23 22:02:35/

ESP32 S3 语音识别 语音唤醒程序流程

  • 参考例程
  • 首先进行esp_periph_set_init 初始化
  • 之后执行setup_player,
  • 之后执行start_recorder,
  • 识别的主处理voice_read_task

参考例程

D:\Espressif\esp-adf\examples\speech_recognition\wwe\

在这里插入图片描述

首先进行esp_periph_set_init 初始化

之后注册回调函数periph_callback,在这里当有按键消息的时候执行audio_recorder_trigger_start和audio_recorder_trigger_stop,也就是开始识别和结束识别。
在这里插入图片描述

之后执行audio_board_key_init,初始化ADC按键,这个在之前的流程里面讲过,不在多说。
之后执行audio_board_init,初始化音频部分,包括codec和PA,这个要根据板卡进行初始化。

之后执行setup_player,

对播放器进行初始化。播放tone提示音
在这里插入图片描述
这里主要是初始化esp_audio_create,把如下element:tone stream、MP3decoder、i2s stream,加到player中。

之后执行start_recorder,

对识别器进行初始化,并启动。
在这里插入图片描述
这里新建一个pipline,把i2s stream(读取音频codec的原始数据)、filter、raw stream 这几个element加入并link进pipeline。之后audio_pipeline_run启动pipeline。这样就准备好了音频数据流。
在函数中有初始化了recorder_sr_cfg,这里识别的语音、唤醒使能、mic前端afe等都进行了定义。
之后filter_cfg里面对采样率、buffer等进行了定义。
amrnb_cfg对AMRNB_ENCODER 等参数进行了定义。
之后rsp_filter_init(&filter_cfg),amrnb_encoder_init(&amrnb_cfg)初始化,之后把返回的element句柄注册到recorder_encoder_cfg的resample和encoder中去。
在这里插入图片描述
之后初始化audio_rec_cfg_t cfg = AUDIO_RECORDER_DEFAULT_CFG();这里定义了audio recorder 的task优先级、堆栈、唤醒timer等参数。
之后调用cfg.sr_handle = recorder_sr_create(&recorder_sr_cfg, &cfg.sr_iface);,进行recorder sr的创建,这里cfg通过sr_handle,把之前的recorder_sr_cfg(filter_cfg、amrnb_cfg)都联系了起来。
在这里插入图片描述

之后在
recorder = audio_recorder_create(&cfg);这样recorder识别器初始化完成。

主程序执行rec_q = xQueueCreate(3, sizeof(int)); 创建Queue
之后主程序 audio_thread_create(NULL, “read_task”, voice_read_task, NULL, 4 * 1024, 5, true, 0);
创建thread voice_read_task

识别的主处理voice_read_task

就比较好读懂了:

static void voice_read_task(void *args)
{const int buf_len = 2 * 1024;uint8_t *voiceData = audio_calloc(1, buf_len);int msg = 0;TickType_t delay = portMAX_DELAY;while (true) {if (xQueueReceive(rec_q, &msg, delay) == pdTRUE) {switch (msg) {case REC_START: {ESP_LOGW(TAG, "voice read begin");delay = 0;voice_reading = true;break;}case REC_STOP: {ESP_LOGW(TAG, "voice read stopped");delay = portMAX_DELAY;voice_reading = false;break;}case REC_CANCEL: {ESP_LOGW(TAG, "voice read cancel");delay = portMAX_DELAY;voice_reading = false;break;}default:break;}}int ret = 0;if (voice_reading) {ret = audio_recorder_data_read(recorder, voiceData, buf_len, portMAX_DELAY);if (ret <= 0) {ESP_LOGW(TAG, "audio recorder read finished %d", ret);delay = portMAX_DELAY;voice_reading = false;}}
#if VOICE2FILE == (true)voice_2_file(voiceData, ret);
#endif /* VOICE2FILE == (true) */}

程序流程梳理完毕。有啥技术问题v吾:robot3g,也可以进Q群 174742054讨论。


http://www.ppmy.cn/embedded/129917.html

相关文章

Molmo和PixMo:为最先进的多模态模型提供开放权重和开放数据

摘要 https://arxiv.org/pdf/2409.17146 当今最先进的多模态模型仍然是专有的。性能最强的开源模型严重依赖专有视觉语言模型(Vision-Language Model,简称VLM)的合成数据来获得良好性能,有效地将这些封闭模型提炼为开放模型。因此,业界仍然缺少关于如何从零开始构建高性能…

wordpress 子比主题美化 四宫格 多宫格 布局插件

wordpress 主题美化 四宫格 多宫格 布局插件&#xff08;只在子比主题上测试过&#xff0c;其它主题没测试&#xff09; A5资源网四宫格布局插件是一个功能丰富的WordPress插件,专为创建自适应的四宫格布局而设计。这个插件具有以下主要特点: 灵活的布局: 支持1到8个宫格的自定…

Golang | Leetcode Golang题解之第485题最大连续1的个数

题目&#xff1a; 题解&#xff1a; func findMaxConsecutiveOnes(nums []int) (maxCnt int) {cnt : 0for _, v : range nums {if v 1 {cnt} else {maxCnt max(maxCnt, cnt)cnt 0}}maxCnt max(maxCnt, cnt)return }func max(a, b int) int {if a > b {return a}return …

【进程调度模拟】Linux “操作系统进程调度算法模拟:时间片轮转、优先级调度与先来先服务“

文章目录 1. 基于时间片轮转&#xff08;Round Robin, RR&#xff09;调度算法模拟2. 最高优先级优先&#xff08;Priority Scheduling&#xff09;调度算法模拟3. 先来先服务&#xff08;FCFS&#xff09;调度算法模拟 1. 基于时间片轮转&#xff08;Round Robin, RR&#xff…

数据处理利器:图片识别转Excel表格让数据录入变简单

在现代职场中&#xff0c;手动录入数据是一个耗时且容易出错的过程。无论是纸质文件、照片还是截图&#xff0c;繁琐的输入常常让人感到头疼。如何高效地将这些信息转化为电子表格&#xff0c;是许多职场人士面临的挑战。 为了解决这一问题&#xff0c;我们推出了图片识别转Exc…

探索桂林:使用SpringBoot构建的旅游平台

1系统概述 1.1 研究背景 随着计算机技术的发展以及计算机网络的逐渐普及&#xff0c;互联网成为人们查找信息的重要场所&#xff0c;二十一世纪是信息的时代&#xff0c;所以信息的管理显得特别重要。因此&#xff0c;使用计算机来管理桂林旅游景点导游平台的相关信息成为必然。…

RISC-V笔记——Pipeline依赖

1. 前言 RISC-V的RVWMO模型主要包含了preserved program order、load value axiom、atomicity axiom、progress axiom和I/O Ordering。今天主要记录下preserved program order(保留程序顺序)中的Pipeline Dependencies(Pipeline依赖)。 2. Pipeline依赖 Pipeline依赖指的是&a…

三大智能体平台深度对比:字节Coze、百度AppBuilder、智谱智能体优劣解析

字节Coze智能体是一个多功能平台&#xff0c;具备丰富的功能和技能扩展能力。以下是它的一些核心功能和特性&#xff1a; 功能与技能 1. 插件功能 Coze智能体可以通过插件调用外部API&#xff0c;扩展智能体的能力。例如&#xff0c;它可以执行以下操作&#xff1a; 搜索信…