31集-33集【求助】AIGC返回的对话内容文字转语音失败-《MCU嵌入式AI开发笔记》

31集【求助】AIGC返回的对话内容文字转语音失败-《MCU嵌入式AI开发笔记》

问题描述

ESP32 C3开发板把AIGC大模型返回的对话文字转语音的时候出现错误。
我们先看一下附件Log,

梳理一下程序流程

按键,收到event Event received, cmd:1, data:0x9, data_len:0
也就是audio_event_iface_listen收到了audio codec过来的语音数据。
之后调用baidu_tts_check_event_finish,把tts发送给百度。
之后会调用char *answer = minimax_chat(original_text);,把识别的文字送给大模型。并得到返回的answer。
之后调用baidu_tts_start得到音频流,并发给audio codec。
我们在控制台上输出log信息:
在这里插入图片描述
我们看到:

出问题的地方

E (133134) MP3_DE_LIB: pvmp3_framedecoder.cpp:701 (pvmp3_InitDecoder): Memory exhausted
也就是内存分配失败了。
我们需要深入研究一下。又遇到这个问题的么,评论区讨论一下。

32集【求助】AIGC返回的对话内容文字转语音失败2-《MCU嵌入式AI开发笔记》

文字转语音程序流程详解

一个重要的结构体,baidu_tts。用来定义一个pipeline,3个elements。buffer size是:#define DEFAULT_TTS_BUFFER_SIZE (2048)
在这里插入图片描述
baidu_tts_init来做tts的初始化。
在这里初始化了i2s_stream_init I2S流,和http_stream_init http流。
初始化mp3_decoder_init mp3流
之后调用

    audio_pipeline_register(tts->pipeline, tts->http_stream_reader, "tts_http");audio_pipeline_register(tts->pipeline, tts->mp3_decoder,        "tts_mp3");audio_pipeline_register(tts->pipeline, tts->i2s_writer,         "tts_i2s");const char *link_tag[3] = {"tts_http", "tts_mp3", "tts_i2s"};audio_pipeline_link(tts->pipeline, &link_tag[0], 3);

把流链接的pipeline上,
i2s_writer

Created with Raphaël 2.3.0 http_stream_reader mp3_decoder i2s_writer

33集

ai_chat_task程序流程

在这里插入图片描述
在这里插入图片描述

造成内存枯竭的原因是内存分配的太多了,所以需要动态释放一些。
有几种可能:
1、内存分配的太多了,之前的没有释放,需要不断的将之前的释放掉。
2、mp3的element申请的task内存区域太少,导致无法分配(初始化的时候申请了5K)。
3、文字太多,导致语音文件太大,导致无法申请内存。

需要先定位,之后研究一下如何修改程序。

附件

I (79774) AI_CHAT_EXAMPLE: TEMP:31 HUMI:63
I (90994) AI_CHAT_EXAMPLE: TEMP:31 HUMI:64
I (102214) AI_CHAT_EXAMPLE: TEMP:32 HUMI:65
I (113434) AI_CHAT_EXAMPLE: TEMP:32 HUMI:62
I (124654) AI_CHAT_EXAMPLE: TEMP:32 HUMI:57
I (126334) AI_CHAT_EXAMPLE: [ * ] Event received: src_type:1048577, source:0x3fcbf538 cmd:1, data:0x9, data_len:0
W (126334) AUDIO_ELEMENT: [tts_http] Element already stopped
W (126334) AUDIO_ELEMENT: [tts_mp3] Element already stopped
W (126344) AUDIO_ELEMENT: [tts_i2s] Element already stopped
I (126354) AI_CHAT_EXAMPLE: [ * ] Resuming pipeline
I (126354) AUDIO_PIPELINE: Func:audio_pipeline_run, Line:359, MEM Total:53384 Bytes

I (126364) AUDIO_ELEMENT: [vtt_http] AEL_MSG_CMD_RESUME,state:1
I (126374) AUDIO_ELEMENT: [vtt_i2s] AEL_MSG_CMD_RESUME,state:1
I (126374) BAIDU_VTT: [ + ] HTTP client HTTP_STREAM_PRE_REQUEST, lenght=0
I (126384) AUDIO_PIPELINE: Pipeline started
I (126394) AI_CHAT_EXAMPLE: [ * ] Event received: src_type:131072, source:0x3fccd9b8 cmd:8, data:0xe, data_len:4
I (126404) AI_CHAT_EXAMPLE: [ * ] Event received: src_type:131072, source:0x3fcd042c cmd:8, data:0xe, data_len:4
I (126414) AI_CHAT_EXAMPLE: [ * ] Event received: src_type:131072, source:0x3fccd2fc cmd:8, data:0xe, data_len:4
I (126424) AI_CHAT_EXAMPLE: [ * ] TTS Finish
I (126424) AI_CHAT_EXAMPLE: [ * ] Event received: src_type:131072, source:0x3fcd5e78 cmd:8, data:0xc, data_len:4
I (126444) AI_CHAT_EXAMPLE: [ * ] Event received: src_type:131072, source:0x3fcd36bc cmd:10, data:0x0, data_len:0
I (126454) AI_CHAT_EXAMPLE: [ * ] Event received: src_type:131072, source:0x3fcd36Total bytes written: 61440
I (128374) AI_CHAT_EXAMPLE: [ * ] Event received: src_type:1048577, source:0x3fcbfTotal bytes written: 114688
I (130024) AI_CHAT_EXAMPLE: [ * ] Event received: src_type:1048577, source:0x3fcbf538 cmd:4, data:0x9, data_len:0
I (130024) AI_CHAT_EXAMPLE: [ * ] Stop pipeline
W (130034) AUDIO_ELEMENT: IN-[vtt_http] AEL_IO_ABORT
W (130034) HTTP_STREAM: No output due to stopping
I (130044) BAIDU_VTT: [ + ] HTTP client HTTP_STREAM_POST_REQUEST, write end chunked marker
I (131064) BAIDU_VTT: [ + ] HTTP client HTTP_STREAM_FINISH_REQUEST, read_len=141
I (131064) BAIDU_VTT: Got HTTP Response = {“corpus_no”:“7401889142447543659”,“err_msg”:“success.”,“err_no”:0,“result”:[“你能讲好玩的故事吗?”],“sn”:“887851329131723386613”}

I (131084) BAIDU_VTT: response_text:你能讲好玩的故事吗?
I (131084) AI_CHAT_EXAMPLE: Original text = 你能讲好玩的故事吗?
I (131604) MINIMAX_CHAT: Need to write 490, written 490
I (132394) MINIMAX_CHAT: read = {“created”:1723386615,“model”:“abab5.5s-chat”,“reply”:“当然可以啦,你想听什么类型的故事呢?”,“choices”:[{“finish_reason”:“stop”,“messages”:[{“sender_type”:“BOT”,“sender_name”:“小美”,“text”:“当然可以啦,你想听什么类
型的故事呢?”}]}],“usage”:{“total_tokens”:82},“input_sensitive”:false,“output_sensitive”:false,“id”:“0307fdf617b71f7a9de4cfdac446a066”,“base_resp”:{“status_code”:0,“status_msg”:“”}}
I (132424) MINIMAX_CHAT: response_text:当然可以啦,你想听什么类型的故事呢?
I (132434) AI_CHAT_EXAMPLE: minimax answer = 当然可以啦,你想听什么类型的故事呢?
I (132444) AUDIO_PIPELINE: Func:audio_pipeline_run, Line:359, MEM Total:52824 Bytes

I (132454) AUDIO_ELEMENT: [tts_http] AEL_MSG_CMD_RESUME,state:1
I (132464) AUDIO_ELEMENT: [tts_mp3] AEL_MSG_CMD_RESUME,state:1
I (132464) MP3_DECODER: MP3 opened
I (132474) AUDIO_ELEMENT: [tts_i2s] AEL_MSG_CMD_RESUME,state:1
I (132464) BAIDU_TTS: [ + ] HTTP client HTTP_STREAM_PRE_REQUEST, lenght=0
I (132484) AUDIO_PIPELINE: Pipeline started
I (132494) AI_CHAT_EXAMPLE: [ * ] Event received: src_type:131072, source:0x3fcd5e78 cmd:11, data:0x3fcb2990, data_len:64
I (132504) AI_CHAT_EXAMPLE: [ * ] Event received: src_type:131072, source:0x3fcd5e78 cmd:8, data:0xe, data_len:4
I (132514) AI_CHAT_EXAMPLE: [ * ] Event received: src_type:131072, source:0x3fcd36bc cmd:11, data:0x3fcb291c, data_len:64
I (132524) AI_CHAT_EXAMPLE: [ * ] Event received: src_type:131072, source:0x3fcd36bc cmd:8, data:0xe, data_len:4
I (132534) AI_CHAT_EXAMPLE: [ * ] Event received: src_type:131072, source:0x3fccd2fc cmd:8, data:0xc, data_len:4
I (133114) HTTP_STREAM: total_bytes=30240
I (133114) AI_CHAT_EXAMPLE: [ * ] Event received: src_type:131072, source:0x3fccd9b8 cmd:10, data:0x0, data_len:0
I (133114) AI_CHAT_EXAMPLE: [ * ] Event received: src_type:131072, source:0x3fccd9b8 cmd:8, data:0xc, data_len:4
I (133134) CODEC_ELEMENT_HELPER: The element is 0x3fcd042c. The reserve data 2 is
0x0.
E (133134) MP3_DE_LIB: pvmp3_framedecoder.cpp:701 (pvmp3_InitDecoder): Memory exhausted
E (133144) MP3_DECODER: Allocate buffer failed. (line 404)
E (133154) AUDIO_ELEMENT: [tts_mp3] AEL_STATUS_ERROR_OPEN,-1
W (133154) AUDIO_ELEMENT: [tts_mp3] audio_element_on_cmd_error,7
I (133164) MP3_DECODER: Closed
I (133154) AI_CHAT_EXAMPLE: [ * ] Event received: src_type:131072, source:0x3fcd042c cmd:8, data:0x1, data_len:4
W (133174) AUDIO_ELEMENT: IN-[tts_i2s] AEL_IO_ABORT
I (133184) AI_CHAT_EXAMPLE: [ * ] Event received: src_type:131072, source:0x3fcd042c cmd:11, data:0x3fcba84c, data_len:64
I (133194) AI_CHAT_EXAMPLE: [ * ] Event received: src_type:131072, source:0x3fccd2fc cmd:11, data:0x3fcba7b4, data_len:64
I (133204) AI_CHAT_EXAMPLE: [ * ] Event received: src_type:131072, source:0x3fccd2fc cmd:8, data:0xe, data_len:4
I (133224) AI_CHAT_EXAMPLE: [ * ] TTS Finish
W (133204) AUDIO_ELEMENT: OUT-[tts_http] AEL_IO_ABORT
I (133234) AI_CHAT_EXAMPLE: [ * ] Event received: src_type:131072, source:0x3fccd9b8 cmd:11, data:0x3fcb8428, data_len:64
I (133244) AI_CHAT_EXAMPLE: [ * ] Event received: src_type:131072, source:0x3fccd9b8 cmd:8, data:0xe, data_len:4
I (135874) AI_CHAT_EXAMPLE: TEMP:32 HUMI:65
I (147094) AI_CHAT_EXAMPLE: TEMP:32 HUMI:71
I (158314) AI_CHAT_EXAMPLE: TEMP:32 HUMI:70
I (169534) AI_CHAT_EXAMPLE: TEMP:32 HUMI:70
I (180754) AI_CHAT_EXAMPLE: TEMP:32 HUMI:69
I (191974) AI_CHAT_EXAMPLE: TEMP:32 HUMI:68
I (203194) AI_CHAT_EXAMPLE: TEMP:32 HUMI:68

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/402466.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

学习分享:如何利用AI创作高质量的文章【请按需收藏】

成长路上不孤单😊【14后小学生一枚,C爱好者,持续分享所学,如有需要欢迎收藏转发😊😊😊😊😊😊😊】 关于【如何利用AI创作高质量的文章】 AI给现代这…

pnpm【实用教程】2024最新版

pnpm 简介 pnpm 全称 performant npm,即高性能的 npm,由 npm/yarn 衍生而来,解决了 npm/yarn 内部潜在的 bug,极大的优化了性能,扩展了使用场景,被誉为 最先进的包管理工具 安装 pnpm npm i -g pnpm使用 pn…

Linux git安装与部署

目录 git安装 1、下载与安装 2、配置git账号信息 创建本地仓库 1、创建本地代码库文件夹 2、创建项目代码本地仓库文件夹 3、进入到projCode目录下,创建git本地仓库 4、创建过滤文件.gitignore 5、添加.gitignore到git暂存区 6、提交.gitignore 7、将项目…

数学建模笔记(1):插值法

1.插值法的用途 在对数据进行处理的时候,我们往往会碰到由于数据量比较小的情况,这样的情况不利对数据进行分析。插值法就是是针对这种情况,模拟产生和原来数据相近的数据来为数据分析提供完整可靠的数据。 总结:插值法是一种自己…

游戏安全入门-扫雷分析远程线程注入

前言 无论学习什么,首先,我们应该有个目标,那么入门windows游戏安全,脑海中浮现出来的一个游戏 – 扫雷,一款家喻户晓的游戏,虽然已经被大家分析的不能再透了,但是我觉得自己去分析一下还是极好…

PHPStorm 环境配置与应用详解

​ 大家好,我是程序员小羊! 前言: PHPStorm 是 JetBrains 出品的一款专业 PHP 集成开发环境(IDE),凭借其智能的代码补全、调试功能、深度框架支持和前端开发工具,为用户提供了丰富的功能和工具…

Systools Outlook PST Recovery Outlook PST邮箱邮件数据修复工具下载

可正常激活使用,非常强大好用的PST邮箱邮件数据文件修复工具 下载地址(资源制作整理不易,下载使用需付费,不能接受请勿浪费时间下载) 链接:https://pan.baidu.com/s/1bfkVNrgdaVS2MkTnW19Zqw?pwdu2sj 提取码:u2sj

Linux进程间通信学习记录(无名管道)

0.Linux进程间通信的方式 (1).从UNIX继承过来的通信方式 无名管道(pipe) 有名管道(fifo) 信号(signal) (2).System V IPC 共享内存 消息队列 信号灯集 &am…

Python环境安装及PIP安装(Mac OS版)

官网 https://www.python.org/downloads/ 安装python python-3.12.1-macos11.pkg下载后,安装一直下一步即可 验证是否安装成功,执行python3命令和pip3命令 配置环境变量 获取python3安装位置并配置在.bash_profile #查看python路径 which python3#…

centos8以上系统安装docker环境

由于docker官方更新了相关镜像路由,导致国内用户无法正常手段安装使用docker,本人推荐使用下面操作进行安装。 1.docker-ce安装 # 添加docker-ce仓库,本次使用的是阿里云的仓库 dnf config-manager --add-repo https://mirrors.aliyun.com/do…

CoCoOp(论文解读):Conditional Prompt Learning for Vision-Language Models

摘要 随着预训练的视觉语言模型(如 CLIP)的兴起,研究使这些模型适应下游数据集的方法变得至关重要。最近CoOp方法将NLP领域中的提示学习引入到视觉领域中,来调整预训练的视觉语言模型。具体来说,CoOp 将提示中的上下文…

【C语言初阶】C语言指针全攻略:解锁C语言深层奥秘的钥匙

📝个人主页🌹:Eternity._ ⏩收录专栏⏪:C语言 “ 登神长阶 ” 🤡往期回顾🤡:C语言操作符 🌹🌹期待您的关注 🌹🌹 ❀指针 📒1. 指针和指…

前端各种文本文件预览 文本编辑excel预览编辑 pdf预览word预览 excel下载pdf下载word下载

前端各种文本文件预览 文本编辑excel预览编辑 pdf预览word预览 excel下载pdf下载word下载 各种文本文件预览(pdf, xlsx, docx, cpp, java, sql, py, vue, html, js, json, css, xml, rust, md, txt, log, fa, fasta, tsv, csv 等各种文本文件) 其中 除p…

C 408—《数据结构》算法题基础篇—数组(通俗易懂)

目录 Δ前言 一、数组的合并 0.题目: 1.算法设计思想: 2.C语言描述: 3.算法的时间和空间复杂度 : 二、数组元素的倒置 0.题目 : 1.算法设计思想 : 2.C语言描述 : 3.算法的时间和空间复杂度 : 三、数组中特定值元素的删除 0.题目 : …

SpringBoot3 + Flowable7 工作流引擎使用笔记

目录 Flowable 简介流程设计器安装使用 SpringBoot 3 整合表结构流程部署启动流程流程审批流程挂起和激活任务分配固定分配表达式分配值表达式方法表达式 监听器分配 流程变量运行时变量历史变量 身份服务候选人拾取任务归还任务指派给别人候选人组创建用户创建用户组用户关联用…

VueUse 基于 Vue 3 Composition API 的高质量 Hooks 库

VueUse 是什么? VueUse 是基于 Vue 3 Composition API 的高质量 Hooks 库。例如获取滚动的距离 VueUse 官网:VueUse | VueUse VueUse 什么使用? 1、通过npm安装 VueUse npm i @vueuse/core 2、搜索需要使用的函数,例如搜索 useScroll 滚动 3、使用useScroll 滚动函数 …

C语言传递指针给函数

C 语言允许您传递指针给函数,只需要简单地声明函数参数为指针类型即可。 下面的实例中,我们传递一个无符号的 long 型指针给函数,并在函数内改变这个值 实例1:获取系统的时间值 能接受指针作为参数的函数,也能接受数…

为什么Pandas是最流行的Python数据分析库?

本文将从Python生态、Pandas历史背景、Pandas核心语法、Pandas学习资源四个方面去聊一聊Pandas,期望能带给大家一点启发。 一、Python生态里的Pandas 五月份TIOBE编程语言排行榜,Python追上Java又回到第二的位置。Python如此受欢迎一方面得益于它崇尚简…

零成本 API 服务搭建,用 GitHub Actions 自动爬取文章?

前言 本着将成本降到最低,我目前做的应用或小程序都是单机的,也就是不用请求接口,只要一上架就没有任何支出。但是写死的数据毕竟有限,应用的内容单一无法紧跟时事热点,每次打开一个样,自然就没有留存。遇…

Redis13-多级缓存

目录 概述 JVM进程缓存 Caffeine 实现进程缓存 Lua语法 初识Lua 变量和循环 Lua的数据类型 声明变量 循环 条件控制、函数 函数 条件控制 实现多级缓存 安装OpenResty OpenResty快速入门 请求参数处理 查询Tomcat 发送http请求的API 封装http工具 CJSON工…