ESP32 ADF 离线播放mp3 mp3烧录flash

一 播放自己的mp3文件 基于play_mp3例程

播放一个mp3文件,文件最好控制在100k,也就是6秒左右。需要修改example.c文件里如下两个变量:例如我自己的mp3文件名是niguang.mp3,修改如下

/*
   To embed it in the app binary, the mp3 file is named
   in the component.mk COMPONENT_EMBED_TXTFILES variable.
*/
extern const uint8_t niguang_mp3_start[] asm("_binary_niguang_mp3_start");
extern const uint8_t niguang_mp3_end[]   asm("_binary_niguang_mp3_end");

int mp3_music_read_cb(audio_element_handle_t el, char *buf, int len, TickType_t wait_time, void *ctx)
{
    static int mp3_pos;
    int read_size = niguang_mp3_end - niguang_mp3_start - mp3_pos;
    if (read_size == 0) {
        return AEL_IO_DONE;
    } else if (len < read_size) {
        read_size = len;
    }
    memcpy(buf, niguang_mp3_start + mp3_pos, read_size);
    mp3_pos += read_size;
    return read_size;
}

然后修改main文件夹下的CMakelist.txt和compoment.mk,如下:

CMakelist.txt:

set(COMPONENT_EMBED_TXTFILES niguang.mp3)

compoment.mk:

COMPONENT_EMBED_TXTFILES := niguang.mp3

最后将mp3文件放在main文件夹下
重新编译下载。

二 播放多个mp3文件 flash_tone

参考例程esp-adf\examples\player\pipeline_flash_tone

mk_audio_bin.py简介

ADF的mk_audio_bin.py存放在examples/player/pipeline_flash_tone/tools目录下,但是最新版的ADF不知道为什么就没有了,GitHub上可以找到2.0版的ADF里就有。

mk_audio_bin.py的作用是将tools目录下的MP3和wav文件集合生成一个audio-esp.bin的音频文件,并在compoment/audio_flash_tone目录下生成audio_tone_uri.h和audio_tone_uri.c和compoment.mk。

为了更加方便使用,我修改了mk_audio_bin.py 使他生成bin文件和audio_tone_uri.h,并将audio_tone_uri.h放在main文件夹下。audio_tone_uri.h中实现了最基本的功能。不需要audio_tone_uri.c。

下载我修改的mk_audio_bin.py

audio_tone_uri.h如下,通过uri就可以播放对应的mp3

#ifndef __AUDIO_TONEURI_H__
#define __AUDIO_TONEURI_H__

//mp3在flash中的uri地址
const char* tone_uri[]={

   "flash://tone/0_air_cond_close.mp3.mp3",
   "flash://tone/1_air_cond_finish.mp3",
   "flash://tone/2_air_cond_open.mp3.mp3",
   "flash://tone/3_air_cond_wind.mp3",
   "flash://tone/4_ble_conn_succe.mp3",
   "flash://tone/5_ble_disconn.mp3",
   "flash://tone/6_set_timer.mp3",
   "flash://tone/7_wozai.mp3",
};
typedef enum {
    TONE_TYPE_AIR_COND_CLOSE,
    TONE_TYPE_AIR_COND_FINISH,
    TONE_TYPE_AIR_COND_OPEN,
    TONE_TYPE_AIR_COND_WIND,
    TONE_TYPE_BLE_CONN_SUCCE,
    TONE_TYPE_BLE_DISCONN,
    TONE_TYPE_SET_TIMER,
    TONE_TYPE_WOZAI,
    TONE_TYPE_MAX,
} tone_type_t;

#endif
使用python mk_audio_bin.py
1,安装python2

参考:python2和python3共存 安装
必须使用python2.7!!!

2,运行

放置好mp3文件后,cd到tools目录,执行python2 mk_audio_bin.py
最后出现如下就是成功了。
在这里插入图片描述

3,将audio-esp.bin烧录进flash

a,修改分区表:

主要就是添加了flash_tone,data, 0x04, 0x210000, 500k,这一项

# factory大小2M,因为生成的bin文件大约1.6M flash_tone用来存放audio-esp.bin 大于一百多k,空间充足
# Espressif ESP32 Partition Table
# Name,   Type, SubType, Offset,  Size
nvs,      data, nvs,     0x9000,  0x6000,
phy_init, data, phy,     0xf000,  0x1000,
factory,  app,  factory, 0x10000, 0x200000,
flash_tone,data, 0x04,   0x210000,  500k,

b,烧录

烧录的地址就是flash_tone的offset地址:0x210000
cd到项目目录,然后执行:
其中需要修改成自己的IDF路径和端口号,连接好开发板

python D:/ESP/idf3.3/components/esptool_py/esptool/esptool.py --chip esp32 --port COM4 --baud 115200 --before default_reset --after hard_reset write_flash -z --flash_mode dio --flash_freq 40m --flash_size detect 0x210000 ./tools/audio-esp.bin

感谢以下帮助

在线文字转语音
python2和python3共存 安装

猜你喜欢

转载自blog.csdn.net/weixin_44821644/article/details/107934841