esp-adf
此套框架提供了一种使用流、编解码器和音频处理函数等元件开发音频应用程序的方法。
该框架是通过将元件组合成管道来开发音频应用程序。如下图所示:
将MP3解码器和I2S流两个元件添加进音频管道,解码器的输入是MP3文件数据流,I2S流将解码后的音频数据输出到片外,各应用程序之间通过事件接口通信。
play_mp3_example.c
get-started / play_mp3是此框架的最基本的例程之一,使用了MP3解码器和I2S流两个元件,我们通过分析这个例程来学习这套框架的使用。
初次接触这套框架,只是大概有个思路,有错在所难免,望见谅
/*读mp3文件的回调函数*/
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 = adf_music_mp3_end - adf_music_mp3_start - mp3_pos;
if (read_size == 0) {
return AEL_IO_DONE;
} else if (len < read_size) {
read_size = len;
}
memcpy(buf, adf_music_mp3_start + mp3_pos, read_size);
mp3_pos += read_size;
return read_size;
}
void app_main(void)
{
//定义一个音频处理管道
audio_pipeline_handle_t pipeline;
//因为是实现本地播放,只需定义i2s流和MP3解码两个元件
audio_element_handle_t i2s_stream_writer, mp3_decoder;
//关闭非必要显示
esp_log_level_set("*", ESP_LOG_WARN);
esp_log_level_set(TAG, ESP_LOG_INFO);
ESP_LOGI(TAG, "[ 1 ] Start audio codec chip");
//根据不同硬件版本进行硬件初始化
#if (CONFIG_ESP_LYRAT_V4_3_BOARD || CONFIG_ESP_LYRAT_V4_2_BOARD)
audio_hal_codec_config_t audio_hal_codec_cfg = AUDIO_HAL_ES8388_DEFAULT();
audio_hal_handle_t hal = audio_hal_init(&audio_hal_codec_cfg, 0);
#endif
#if (CONFIG_ESP_LYRATD_MSC_V2_1_BOARD || C