ESP-ADF是基于ESP-IDF添加一些音频特性而存在的,而且为了简化开发,很多地方进行了优化,使得开发简单,资源占用适中.比如说在ESP-IDF可能还要自己解码MP3什么的,但是ADF这些都集成了,他的所有东西都是基于pipeline的结构进行.
因为用的不是官方的音频硬件,所以有些地方还需要移植,我手上的是立创做的ESP32-C3开发板.
先配置好IDF/ADF环境,引入官方例子play_mp3_control_example.
进配置选择到自定义板子.

然后这里默认会选自定义板.

去到自定义板这里设置正确的引脚映射.

因为我们是ES8311,这个ESP-ADF里已经包含,不用自己写,只需要包含es8311.h的头文件,再修改下初始化就行.
audio_hal_handle_t audio_board_codec_init(void)
{
audio_hal_codec_config_t audio_codec_cfg = AUDIO_CODEC_DEFAULT_CONFIG();
audio_hal_handle_t codec_hal = audio_hal_init(&audio_codec_cfg, &AUDIO_CODEC_ES8311_DEFAULT_HANDLE);
AUDIO_NULL_CHECK(TAG, codec_hal, return NULL);
return codec_hal;
}

因为没有实际按键,所以按键逻辑也暂时删除.

立创的板子默认不使能CODEC的,所以还要加一个使能的.
/* 初始化PA芯片NS4150B控制引脚 低电平关闭音频输出 高电平允许音频输出 */
gpio_config_t io_conf = {
.intr_type = GPIO_INTR_DISABLE, //disable interrupt
.mode = GPIO_MODE_OUTPUT, //set as output mode
.pin_bit_mask = 1<<13, //bit mask of the pins
.pull_down_en = 0, //disable pull-down mode
.pull_up_en = 1, //enable pull-up mode
};
//configure GPIO with the given settings
gpio_config(&io_conf);

这时候还要修改Flash模式为DIO,因为立创的板子的Flash引脚中GPIO12用作普通IO了.
正常来说,现在下载就能听到声音,不过我们还可以更换一下测试音乐,因为我发现原来的音乐在这里表现声音太小了.
准备了一个output.mp3.

我的音频比较大,所以还要扩充下默认的分区表,记得还要从menuconfig修改为自定义分区表.
# ESP-IDF Partition Table
# Name, Type, SubType, Offset, Size, Flags
nvs, data, nvs, 0x9000, 0x6000,
phy_init, data, phy, 0xf000, 0x1000,
factory, app, factory, 0x10000, 0x7E0000,
修改一下获取音频信息的两个函数.
extern const uint8_t hr_mp3_start[] asm("_binary_output_mp3_start");
extern const uint8_t hr_mp3_end[] asm("_binary_output_mp3_end");
static void set_next_file_marker()
{
file_marker.start = hr_mp3_start;
file_marker.end = hr_mp3_end;
file_marker.pos = 0;
}
int mp3_music_read_cb(audio_element_handle_t el, char *buf, int len, TickType_t wait_time, void *ctx)
{
int read_size = file_marker.end - file_marker.start - file_marker.pos;
if (read_size == 0) {
return AEL_IO_DONE;
} else if (len < read_size) {
read_size = len;
}
memcpy(buf, file_marker.start + file_marker.pos, read_size);
file_marker.pos += read_size;
return read_size;
}
播放结果
