esp-adf音频框架 :audio stream->I2S Stream

audio streams 的作用就是负责获取音频数据并在处理后将数据发送出去的音频元素(audio element)称为音频流

I2S streams 文件位置在:

/esp-adf/components/audio_steam/i2s_stream.c
/esp-adf/components/audio_steam/include/i2s_stream.c
  • i2s stream 初始化
/**
 * @brief     创建音频元素的句柄以将数据从I2S流传输到另一个元素,或从发送到I2S的其他元素获取数据,具体取决于流类型的配置为AUDIO_STREAM_READER或AUDIO_STREAM_WRITER。 
 *            
 * @note      如果通过内置DAC模式启用了I2S流,请不要使用I2S_NUM_1。当前ESP32芯片仅在I2S0上支持内置DAC功能。
 *           
 * @param      i2s 配置结构体指针
 *
 * @return     音频元素句柄
 */
audio_element_handle_t i2s_stream_init(i2s_stream_cfg_t *config);
  • 初始化函数的使用方法
/*初始化默认配置*/
   i2s_stream_cfg_t i2s_cfg = I2S_STREAM_CFG_DEFAULT();
   /*修改配置中的选项*/
   i2s_cfg.type = AUDIO_STREAM_WRITER;//i2s流为写入writer,当I2S流类型为“ writer”时,数据可以发送到编解码器芯片或ESP32的内部DAC。
   i2s_cfg.multi_out_num = 1;//多通道输出(同时输出两个音频流)
   i2s_cfg.task_core = 1;// i2s stream 运行的内核(esp32 有两个core ,core0,core1)
   /*初始化i2s stream,返回audio_element_handle_t 指针*/
   i2s_stream_writer = i2s_stream_init(&i2s_cfg);
  • 设置i2s 数据流的时钟
/**
 * @brief      I2S流的设置时钟,此功能仅与由创建的句柄一起使用 i2s_stream_init
 *
 * @param[in]  i2s元素句柄
 * @param[in]  时钟频率(以Hz为单位)
 * @param[in] 音频位宽(8、16、24、32)
 * @param[in]  音频通道数(1:单声道,2:立体声)
 *
 * @return
 *     - ESP_OK
 *     - ESP_FAIL
 */
esp_err_t i2s_stream_set_clk(audio_element_handle_t i2s_stream, int rate, int bits, int ch);
  • 设置i2s流的音量
/**
 * @brief      使用ALC设置流的音量
 *
 * @param[in]  i2s_stream   i2s元素句柄
 * @param[in]  volume       将设置流的音量
 *
 * @return
 *     - ESP_OK
 *     - ESP_FAIL
 */
esp_err_t i2s_alc_volume_set(audio_element_handle_t i2s_stream, int volume);
  • 获取i2s流当前的音量
/**
 * @brief      获取i2s流当前的音量
 *
 * @param[in]  i2s_stream   i2s元素句柄
 * @param[in]  volume       音频流的音量值
 *
 * @return
 *     - ESP_OK
 *     - ESP_FAIL
 */
esp_err_t i2s_alc_volume_get(audio_element_handle_t i2s_stream, int* volume);
  • 配置结构体 从函数接口可以看出,esp-adf对i2s stream的操作只有两个(时钟和声音),说明对于i2s stream操作是不支持实时修改的,除了声音以外其他的配置只能在初始化阶段才能实现。
/*i2s stream 配置*/
typedef struct {
    /*当前流类型:AUDIO_STREAM_READER,AUDIO_STREAM_WRITER*/
    audio_stream_type_t     type;
    /*i2s 配置,主要是配置i2s 硬件接口的相关信息*/            
    i2s_config_t            i2s_config;
    /*i2s 端口号  0 ,1 */        
    i2s_port_t              i2s_port;          
    /*是否使用alc的标志,如果使用这个值应配置成true*/        
    bool                    use_alc;           
    /*设定输入音频数据的默认音量*/        
    int                     volume;            
    /*输出环形缓冲区的大小*/        
    int                     out_rb_size;       
    /*任务堆栈大小*/        
    int                     task_stack;        
    /*任务运行的内核 0,1*/        
    int                     task_core;         
    /*任务优先级*/        
    int                     task_prio;         
    /*输出倍数,如果=1 表示同时可以输出2个音频流*/        
    int                     multi_out_num;     
    /*当流销毁时是否卸载i2s驱动程序*/        
    bool                    uninstall_drv;     
} i2s_stream_cfg_t;
  • 默认配置
#define I2S_STREAM_TASK_STACK           (3072+512)
#define I2S_STREAM_BUF_SIZE             (2048)
#define I2S_STREAM_TASK_PRIO            (23)
#define I2S_STREAM_TASK_CORE            (0)
#define I2S_STREAM_RINGBUFFER_SIZE      (8 * 1024)

#define I2S_STREAM_CFG_DEFAULT() {                                              \
    .type = AUDIO_STREAM_WRITER,                                                \
    .task_prio = I2S_STREAM_TASK_PRIO,                                          \
    .task_core = I2S_STREAM_TASK_CORE,                                          \
    .task_stack = I2S_STREAM_TASK_STACK,                                        \
    .out_rb_size = I2S_STREAM_RINGBUFFER_SIZE,                                  \
    .i2s_config = {                                                             \
        .mode = I2S_MODE_MASTER | I2S_MODE_TX | I2S_MODE_RX,                    \
        .sample_rate = 44100,                                                   \
        .bits_per_sample = 16,                                                  \
        .channel_format = I2S_CHANNEL_FMT_RIGHT_LEFT,                           \
        .communication_format = I2S_COMM_FORMAT_I2S,                            \
        .dma_buf_count = 3,                                                     \
        .dma_buf_len = 300,                                                     \
        .use_apll = 1,                                                          \
        .intr_alloc_flags = ESP_INTR_FLAG_LEVEL2,                               \
        .tx_desc_auto_clear = true,                                             \
    },                                                                          \
    .i2s_port = 0,                                                              \
    .use_alc = false,                                                           \
    .volume = 0,                                                                \
    .multi_out_num = 0,                                                         \
    .uninstall_drv = true,                                                      \
}

欢迎关注我的个人网站zwww.zcxbb.com

知乎专栏:物联网开发入门 - 知乎 (zhihu.com)

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
引用: 在Ubuntu 20.04.4 LTS操作系统中,我已经安装了ESP-idf开发环境并使用了一段时间。现在我想安装esp-adf音频开发框架,但遇到了问题。可以在https://***/index.html找到相关文档。 引用: LinkGUI™ Air E32是一个开发平台,基于ESP32 WROVER芯片组,可以实现完美的图形交互体验。它将GUI系统嵌入到乐鑫开源的ESP-ADF/ESP-IDF开发环境中,提供了丰富的UI交互功能。LinkGUI™ Air E32平台由ESP32 WROVER芯片、LCD、按键、T卡插槽、喇叭插槽、麦克风和扩展接口组成。它的SDK以基于ESP-ADF的LinkGUI图形系统为核心,与ESP-ADF开发环境无缝连接,实现了WIFI/BT/音频和高级图形交互的功能。 根据您的问题,您想了解在Ubuntu操作系统上使用esp-adf和lvgl。首先,esp-adf是一个音频开发框架,用于在ESP32芯片上开发音频应用程序。它提供了丰富的音频功能和示例,可以实现音频播放、录制、语音识别等功能。 而lvgl是一个开源的图形库,用于创建嵌入式设备上的用户界面。它提供了丰富的图形元素和交互功能,可以实现按钮、滑块、进度条、列表等常见的UI元素。 在Ubuntu操作系统上,您可以按照ESP-ADF文档中提供的步骤安装和配置esp-adf开发环境。然后,您可以使用lvgl库开发具有图形界面的应用程序。您可以参考lvgl的官方文档和示例来学习如何使用lvgl库进行UI设计和交互。 总结起来,esp-adf是一个音频开发框架,lvgl是一个图形库。您可以在Ubuntu操作系统上使用esp-adf开发音频应用程序,并结合lvgl库创建图形界面。希望这能帮助到您。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [Ubuntn环境下安装ESP 音频框架时出现Failed to resolve component ‘jsmn‘.问题(已解决)](https://blog.csdn.net/qq_41601311/article/details/124293303)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *3* [基于ESP-ADF的图形系统](https://blog.csdn.net/skdev/article/details/120765588)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值