ESP32开发(2)esp-adf:play_mp3例程简单分析

本文介绍了ESP32的音频开发框架esp-adf,通过管道组合元件实现音频应用。以play_mp3_example.c为例,分析了如何将MP3解码器和I2S流结合,实现从MP3文件到外部输出的流程。初学者可以通过此例程了解框架的基本用法。
摘要由CSDN通过智能技术生成

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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值