本帖最后由 小恩GG 于 2025-9-18 15:59 编辑
基于i.MXRT4 digit修改SDK例程本地音源内容
近期,我们收到了使用用 i.MXRT4 digit 芯片的客户反馈,他们在应用 NXP SDK lib 中的示例程序 evkbmimxrt1XXX_sai_edma_transfer 时遇到了问题,该程序虽能通过 EDMA 通道播放存储于 Flash/SRAM 的音频数据,但其内置音源较为基础,难以满足定制化需求。
为切实解决这一痛点,本文将聚焦于 i.MXRT4 digit 平台,详细阐述如何借助相关软件工具对 SDK 例程中的本地音源内容进行灵活修改。具体而言,我们将以 MIMXRT1160-EVKB 开发板为硬件载体,结合第三方辅助工具,深入解析实现音源内容个性化定制的方法与步骤。 开发板: MIMXRT1060-EVKBboard(无需外接 CS42448 声卡) 连接方式:耳机插入 J34 接口(默认输出端口)软件工具:本文主要分三章: 第一章:准备音源,将想要播放的音源转换成wav格式 第二章:简介wav文件格式,裁剪所需raw data数据 第三章:将wav文件数据块转换成C语言可识别的数组
第一章: 音源转换成.wav文件格式
首先第一部分,我们找到想要播放的音源,本文以.mp3格式为例。 我使用工具生成比较常用的mp3格式音源,内容是“hello world, Hello NXP.”, 感兴趣的同学可以下载附件,名称是HelloWorld.mp3。大家也可以使用自己想要播放的mp3格式音源。 Audiocity是一款功能强大且免费的跨平台音频编辑软件,本文使用该软件的格式转换功能,将MP3转换为.wav格式。 需要我们特别注意的是转换成.wav格式需要和NXP SDK lib中例程格式一致。 我们查看evkbmimxrt1060_sai_edma_transfer例程,可知音频格式是16KHz采样率,2通道,16bit位宽。Audiocity软件转换wav格式必须和例程保持一致。 详情请参见下图所示。
第二章: 简介wav文件格式,裁剪所需raw data数据 这里可以借助现有的软件工具,也可以使用python脚本实现。 本文介绍使用WinHex工具实现将wav格式音源生成C语言数组。 网上有很多网页资源介绍wav格式,下面给大家简单介绍一下常见的wave文件的格式。 WAV文件遵循RIFF规则,其内容以区块(chunk)为最小单位进行存储。WAV文件一般由3个区块组成:RIFF chunk、Format chunk和Datachunk。
因为SDKdemo播放的是Raw data数据,因此需要将wav文件的前44个字节去掉,只保留data数据块。
第三章:将wav文件数据块转换成C语言可识别的数组 将.wav格式音源生成C语言可识别的数据,这里我们使用WinHex软件打开第一章生成的HelloWorld.wav文件,根据第二章的wav文件结构解析,我们在第44个字节处开始选中为开始,然后选择文件最后一个字节,最后右键选择Copy Block->C Source
然后粘贴到文本并保存,如下图所示:
到这里我们就获取了所需要的音频C语言数组,我们需要将这个数组替换SDK 例程的音频数据。 位置evkbmimxrt1060_sai_edma_transfer例程music.h头文件 music 数组。
在这里我们需要注意,一定要根据生成的C语言数组字节数修改宏定义MUSIC_LEN,生成的C语言数组字节数是130000,因此修改代码 #define MUSIC_LEN (130000) 。
编译工程,并将工程烧写进MIMXRT1060-EVKB开发板,将耳机连接到J34, 我们就可以听到第一章生成的语音内容 ” hello world, Hello NXP.” 我们也可以通过修改宏定义#define CODEC_VOLUME_MAX_VALUE (100U),来调整音量大小。
以上就是基于i.MXRT4 digit修改SDK例程本地音源内容全部过程,感兴趣的同学可以参考并验证。
|