esp32开发与应用(边采样边播放音频)
【 声明版权所有欢迎转载请勿用于商业用途。 联系信箱feixiaoxing 163.com】前面说到了音频的播放一般采用i2s的格式也就是bclk、lrclk、sda。今天来学一下麦克风。如果是播放音乐没有麦克风也是可以的。但很多时候我们还是有麦克风采样、录制的需求。所以这个时候就要学一下麦克风采样。1、麦克风接口一般mic有两种接口一种是pdm接口也就是只有clk和data。还有一种就是i2s接口这种就和之前的音乐播放一样的接口即3个pinlrclk、bclk和sda。2、管脚分配如果是mic一般走4和5如果是i2s一般走26、25、22。3、电压分配3.3v即可。4、芯片选型这次采用的麦克风mic采样芯片和前面一篇文章其实是一块板子使用的芯片是lm2718。5、示例代码考虑到之前学习过音频播放这里采用的方式是一边采样、一边播放的方式。这样既可以巩固原来的知识点又可以学习到新的mic采样知识。整个就是一个扩音器的效果。#include stdint.h #include stdlib.h #include freertos/FreeRTOS.h #include freertos/task.h #include esp_log.h #include driver/i2s_std.h #include driver/i2s_pdm.h static const char *TAG MIC_LOOPBACK; #define SAMPLE_RATE 16000 // ---- Mic (PDM RX) pins ---- #define PDM_CLK_GPIO GPIO_NUM_4 #define PDM_DATA_GPIO GPIO_NUM_5 // ---- Speaker (I2S STD TX, NS4168) pins ---- #define I2S_BCLK GPIO_NUM_26 #define I2S_WS GPIO_NUM_25 #define I2S_DOUT GPIO_NUM_22 #define READ_CHUNK_SAMPLES 512 // ~32ms per chunk 16kHz, controls latency static i2s_chan_handle_t rx_chan NULL; // mic static i2s_chan_handle_t tx_chan NULL; // speaker // ---------- Mic: PDM RX on I2S_NUM_0 ---------- static void mic_init(void) { i2s_chan_config_t chan_cfg I2S_CHANNEL_DEFAULT_CONFIG(I2S_NUM_0, I2S_ROLE_MASTER); ESP_ERROR_CHECK(i2s_new_channel(chan_cfg, NULL, rx_chan)); i2s_pdm_rx_config_t pdm_rx_cfg { .clk_cfg I2S_PDM_RX_CLK_DEFAULT_CONFIG(SAMPLE_RATE), .slot_cfg I2S_PDM_RX_SLOT_DEFAULT_CONFIG(I2S_DATA_BIT_WIDTH_16BIT, I2S_SLOT_MODE_MONO), .gpio_cfg { .clk PDM_CLK_GPIO, .din PDM_DATA_GPIO, .invert_flags { .clk_inv false }, }, }; pdm_rx_cfg.slot_cfg.slot_mask I2S_PDM_SLOT_LEFT; // try _RIGHT if silent/noisy ESP_ERROR_CHECK(i2s_channel_init_pdm_rx_mode(rx_chan, pdm_rx_cfg)); ESP_ERROR_CHECK(i2s_channel_enable(rx_chan)); ESP_LOGI(TAG, Mic (PDM RX) ready on I2S_NUM_0, CLK%d DATA%d, PDM_CLK_GPIO, PDM_DATA_GPIO); } // ---------- Speaker: standard I2S TX on I2S_NUM_1 (same as your NS4168 code) ---------- static void speaker_init(void) { i2s_chan_config_t chan_cfg I2S_CHANNEL_DEFAULT_CONFIG(I2S_NUM_1, I2S_ROLE_MASTER); ESP_ERROR_CHECK(i2s_new_channel(chan_cfg, tx_chan, NULL)); i2s_std_config_t std_cfg { .clk_cfg I2S_STD_CLK_DEFAULT_CONFIG(SAMPLE_RATE), .slot_cfg I2S_STD_PHILIPS_SLOT_DEFAULT_CONFIG(I2S_DATA_BIT_WIDTH_16BIT, I2S_SLOT_MODE_MONO), .gpio_cfg { .mclk I2S_GPIO_UNUSED, .bclk I2S_BCLK, .ws I2S_WS, .dout I2S_DOUT, .din I2S_GPIO_UNUSED, }, }; ESP_ERROR_CHECK(i2s_channel_init_std_mode(tx_chan, std_cfg)); ESP_ERROR_CHECK(i2s_channel_enable(tx_chan)); ESP_LOGI(TAG, Speaker (I2S STD TX) ready on I2S_NUM_1, BCLK%d WS%d DOUT%d, I2S_BCLK, I2S_WS, I2S_DOUT); } // ---------- Loop: read from mic, write straight to speaker ---------- static void loopback_task(void *arg) { int16_t *buf malloc(READ_CHUNK_SAMPLES * sizeof(int16_t)); if (!buf) { ESP_LOGE(TAG, malloc failed); vTaskDelete(NULL); return; } // Optional software gain: raw PDM mic level is often quiet. // Adjust or set to 1.0f if it clips/distorts. const float GAIN 4.0f; while (1) { size_t bytes_read 0; esp_err_t ret i2s_channel_read(rx_chan, buf, READ_CHUNK_SAMPLES * sizeof(int16_t), bytes_read, portMAX_DELAY); if (ret ! ESP_OK || bytes_read 0) { continue; } int samples bytes_read / sizeof(int16_t); for (int i 0; i samples; i) { int32_t v (int32_t)(buf[i] * GAIN); if (v INT16_MAX) v INT16_MAX; if (v INT16_MIN) v INT16_MIN; buf[i] (int16_t)v; } size_t bytes_written 0; ESP_ERROR_CHECK( i2s_channel_write(tx_chan, buf, bytes_read, bytes_written, portMAX_DELAY) ); } free(buf); vTaskDelete(NULL); } void app_main(void) { ESP_LOGI(TAG, Mic - Speaker realtime loopback starting); mic_init(); speaker_init(); xTaskCreate(loopback_task, loopback_task, 4096, NULL, 5, NULL); }6、测试和验证测试的话就是等程序烧入之后看看对着mic说话的时候听听喇叭里面有没有声音就好。

相关新闻

传统串口仪器组网优化方案,无需布线实现各类实验室检测仪器数据实时无线传输

传统串口仪器组网优化方案,无需布线实现各类实验室检测仪器数据实时无线传输

一、项目背景随着第三方检测机构、科研实验室、质检中心的标准化、规范化建设推进,实验室检测数据的真实性、可追溯性、自动化归档已经成为行业硬性标准。目前多数实验室色谱仪、水质检测仪、温湿度记录仪、分析仪器等设备,仅保留传统RS232串口通讯接口&…

2026/7/25 1:55:32阅读更多 →
怎样专业使用FFXIV TexTools:最终幻想14模型修改完全指南

怎样专业使用FFXIV TexTools:最终幻想14模型修改完全指南

怎样专业使用FFXIV TexTools:最终幻想14模型修改完全指南 【免费下载链接】FFXIV_TexTools_UI 项目地址: https://gitcode.com/gh_mirrors/ff/FFXIV_TexTools_UI FFXIV TexTools是一款专为《最终幻想14》玩家设计的专业模型修改工具,让您能够自由…

2026/7/25 1:55:32阅读更多 →
5分钟免费激活Adobe全家桶:GenP 3.0终极破解指南

5分钟免费激活Adobe全家桶:GenP 3.0终极破解指南

5分钟免费激活Adobe全家桶:GenP 3.0终极破解指南 【免费下载链接】Adobe-GenP Adobe CC 2019/2020/2021/2022/2023 GenP Universal Patch 3.0 项目地址: https://gitcode.com/gh_mirrors/ad/Adobe-GenP 你是否在为Photoshop、Premiere Pro等Adobe软件的高昂订…

2026/7/25 1:55:32阅读更多 →
TPS6507x电源管理芯片深度解析:从充电状态机到DC-DC高效转换

TPS6507x电源管理芯片深度解析:从充电状态机到DC-DC高效转换

1. 项目概述:深入拆解一颗“心脏”——TPS6507x电源管理芯片在便携式电子设备的设计中,电源管理单元(PMU)扮演着“心脏”和“神经系统”的双重角色。它不仅要为处理器、内存、显示屏等各个“器官”精准输送不同电压、电流的“血液…

2026/7/25 3:25:48阅读更多 →
首次使用Taotoken Token Plan套餐在开发月中的实际消耗与节省体会

首次使用Taotoken Token Plan套餐在开发月中的实际消耗与节省体会

首次使用Taotoken Token Plan套餐在开发月中的实际消耗与节省体会 作为一名个人开发者,我的项目需要稳定调用多种大语言模型。过去几个月,我一直使用Taotoken的按量计费模式,虽然灵活,但每月账单的波动时常让我在成本规划上感到不…

2026/7/25 3:25:48阅读更多 →
AI绘画工作流:OpenPose与Canny边缘控制的协同应用

AI绘画工作流:OpenPose与Canny边缘控制的协同应用

1. 项目概述:AI绘画工作流深度解析这个工作流本质上是一个基于ComfyUI平台的AI图像生成解决方案,它巧妙融合了OpenPose骨骼控制、FLXUc-Unio模型架构和黑森林LoRA风格适配三大核心技术模块。我在实际测试中发现,这种组合特别适合需要精确控制…

2026/7/25 3:25:48阅读更多 →
大模型技术栈解析与开发者实战指南

大模型技术栈解析与开发者实战指南

1. 为什么每个程序员都需要了解大模型三年前我刚入行时,第一次听说GPT模型还以为是某种新型数据库。直到亲眼看到同事用几行代码就实现了智能客服原型,才意识到这个技术正在重塑我们的开发方式。如今大模型已经像当年云计算一样,从实验室走向…

2026/7/25 3:25:48阅读更多 →
YOLOv11与OCR技术优化电动自行车车牌识别系统

YOLOv11与OCR技术优化电动自行车车牌识别系统

1. 项目背景与核心价值 电动自行车管理一直是城市交通治理的难点。传统人工登记方式效率低下,而普通车牌识别系统又难以应对电动自行车车牌的特殊性——尺寸小、字体不规范、安装位置随机。这套系统通过YOLOv11目标检测结合OCR识别算法,实现了对电动自行…

2026/7/25 3:25:48阅读更多 →
AI如何提升学术写作效率:智能开题报告解决方案

AI如何提升学术写作效率:智能开题报告解决方案

1. 学术写作痛点与解决方案写开题报告可能是每个研究生最头疼的事情之一。我至今还记得自己当年面对空白文档时的茫然无措——明明看了几十篇文献,却不知如何组织思路;好不容易憋出几段文字,又被导师批"逻辑混乱"打回重做。这种痛苦…

2026/7/25 3:23:48阅读更多 →
Go语言静态资源打包方案对比与实践指南

Go语言静态资源打包方案对比与实践指南

1. 项目背景与核心需求在Go语言开发中,我们经常需要处理静态资源文件的打包问题。无论是Web应用的模板文件、前端资源,还是配置文件、证书等,都需要随程序一起分发。传统做法是将这些文件与编译后的二进制文件放在同一目录下,但这…

2026/7/25 1:01:14阅读更多 →
Go语言实现高性能LDAP认证服务的架构与实践

Go语言实现高性能LDAP认证服务的架构与实践

1. 项目背景与核心价值LDAP(轻量级目录访问协议)作为企业级身份认证的黄金标准,已经服务了超过80%的财富500强公司。我在金融科技领域实施统一认证体系时,发现传统Java方案存在启动慢、内存占用高等痛点。而Go语言凭借其协程并发模…

2026/7/25 1:01:14阅读更多 →
【AI面试官实战指南】:用ChatGPT模拟10类高频技术岗面试,3天提升应答精准度92%

【AI面试官实战指南】:用ChatGPT模拟10类高频技术岗面试,3天提升应答精准度92%

更多请点击: https://intelliparadigm.com 第一章:AI面试官实战指南的核心价值与适用场景 AI面试官并非替代人类HR的“黑箱工具”,而是以可解释、可审计、可迭代的方式,赋能招聘全链路的关键基础设施。其核心价值在于将主观经验沉…

2026/7/25 1:01:14阅读更多 →
突破文档下载限制:kill-doc让你看到的都能保存

突破文档下载限制:kill-doc让你看到的都能保存

突破文档下载限制:kill-doc让你看到的都能保存 【免费下载链接】kill-doc 看到经常有小伙伴们需要下载一些免费文档,但是相关网站浏览体验不好各种广告,各种登录验证,需要很多步骤才能下载文档,该脚本就是为了解决您的…

2026/7/25 0:01:16阅读更多 →
C++ string类模拟实现:从深拷贝到内存管理的完整指南

C++ string类模拟实现:从深拷贝到内存管理的完整指南

1. 项目概述:为什么我们要“手撕”string类?在C的学习道路上,尤其是从C语言过渡到C的“初阶”阶段,string类绝对是一个绕不开的核心。标准库里的std::string用起来太方便了,、find、substr,几个操作符和函数…

2026/7/25 0:01:16阅读更多 →
三角洲寻宝鼠工具:高效文件搜索与资源管理实战指南

三角洲寻宝鼠工具:高效文件搜索与资源管理实战指南

1. 先搞清楚“三角洲寻宝鼠”到底是什么工具从名称来看,“三角洲寻宝鼠”更像是一个资源查找或文件检索类工具,而不是游戏或娱乐软件。这类工具的核心价值在于帮助用户快速定位特定资源,比如文档、图片、压缩包或特定格式的文件。如果你经常需…

2026/7/25 0:01:16阅读更多 →
YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

如果你在部署 YOLOv8 时,发现推理速度只有可怜的 1-2 FPS,而别人的演示视频却能跑到 30 FPS 以上,那么问题很可能不在模型本身,而在于你的整个处理链路。很多开发者拿到一个训练好的 YOLOv8 模型后,会直接使用官方示例…

2026/7/24 23:01:03阅读更多 →
Coze与Dify对比指南:低代码AI应用开发从入门到实战

Coze与Dify对比指南:低代码AI应用开发从入门到实战

1. 从零到一:为什么你需要了解 Coze 和 Dify?如果你对 AI 应用开发感兴趣,但一看到“大模型”、“智能体”、“工作流”这些词就头疼,觉得门槛太高,那这篇文章就是为你准备的。很多开发者,包括我自己&#…

2026/7/24 19:00:40阅读更多 →
AI生图工具怎么选?2026年6月版实测对比

AI生图工具怎么选?2026年6月版实测对比

做自媒体的朋友应该都有体会:配图一直是个让人头疼的问题。2026年,AI生图工具已经非常成熟了,但工具太多反而不知道怎么选。以下是截至2026年6月我对主流AI生图工具的实测对比。Midjourney V8.1:速度之王2026年6月11日&#xff0c…

2026/7/24 19:00:40阅读更多 →