完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
代码:全选
i2s_config_t i2s_config = { .mode = (i2s_mode_t)(I2S_MODE_MASTER | I2S_MODE_RX), .sample_rate = 11025, // or 44100 if you like .bits_per_sample = I2S_BITS_PER_SAMPLE_32BIT, .channel_format = I2S_CHANNEL_FMT_ONLY_LEFT, // Ground the L/R pin on the INMP441. .communication_format = i2s_comm_format_t(I2S_COMM_FORMAT_I2S | I2S_COMM_FORMAT_I2S_MSB), .intr_alloc_flags = ESP_INTR_FLAG_LEVEL1, .dma_buf_count = 4, .dma_buf_len = ESP_NOW_MAX_DATA_LEN * 4, .use_apll = false, .tx_desc_auto_clear = false, .fixed_mclk = 0, }; if (ESP_OK != i2s_driver_install(I2S_NUM_0, &i2s_config, 0, NULL)) { Serial.println("i2s_driver_install: error"); } i2s_pin_config_t pin_config = { .bck_io_num = 14, // Bit Clock. .ws_io_num = 15, // Word Select aka left/right clock aka LRCL. .data_out_num = -1, .data_in_num = 34, // Data-out of the mic. (someone used 23 on forums). }; if (ESP_OK != i2s_set_pin(I2S_NUM_0, &pin_config)) { Serial.println("i2s_set_pin: error"); } 下面是输入数据的代码: 代码:全选 size_t bytesRead = 0; uint8_t buffer32[ESP_NOW_MAX_DATA_LEN * 4] = {0}; i2s_read(I2S_NUM_0, &buffer32, sizeof(buffer32), &bytesRead, 100); int samplesRead = bytesRead / 4; 麦克风是 24 位的,但如果您使用 bits_per_sample = I2S_BITS_PER_SAMPLE_24BIT 它不起作用,也许是 ESP 错误?无论如何,32 位适用于一些解决方法。 buffer32中组成每个样本的4个字节如下: 第一个字节:E0或00,不管其他字节的符号如何,丢弃这些! 字节 2:样本的最低有效字节。您也可以丢弃它,因为即使在安静的房间里它也会起毛。 字节 3:样本的中间字节(有符号) 最后一个字节:样本的最高有效字节(有符号)。 现在我建议将其转换为 16 位签名样本: 代码:全选 int16_t buffer16[ESP_NOW_MAX_DATA_LEN] = {0}; for (int i=0; i uint8_t msb = buffer32[i * 4 + 3]; uint16_t raw = (((uint32_t)msb) << 8) + ((uint32_t)mid); memcpy(&buffer16, &raw, sizeof(raw)); // Copy so sign bits aren't interfered with somehow. } 就是这样!您有一组 16 位带符号样本,可以使用了。我发现在一个安静的房间里,最大样本在转换为 int16 后徘徊在 7 左右,而当我通常在半米外说话时,最大样本徘徊在 2-300 左右。 如果您想将它们播放回内置 DAC,我发现 DAC 需要非签名样本,所以基本上您将每个样本转换为 int32_t,添加 0x8000,然后转换回 uint16_t . |
|
相关推荐
|
|
只有小组成员才能发言,加入小组>>
1932个成员聚集在这个小组
加入小组我的项目我做主,使用GN+Ninja来完成构建系统(VSCode开发RT106X)
36417 浏览 0 评论
NXP IMX8应用处理器快速入门必备:技巧、使用、设计指南
4824 浏览 1 评论
6102 浏览 1 评论
6815 浏览 0 评论
NXP i.MX6UL开发板(linux系统烧录+规格+硬件+模块移植)使用手册
4247 浏览 0 评论
642浏览 2评论
求助,S32G上Core M启动后如何让Core A在Flash指定位置加载uboot?
639浏览 2评论
ESP32-WROVER-IE + LAN8720以太网,GPIO0电压只有1.6v,无法正常进入spi flash boot模式如何解决?
640浏览 2评论
求分享适用于PN7160 Android的NFC工厂测试应用程序
727浏览 2评论
838浏览 2评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-20 20:08 , Processed in 0.928714 second(s), Total 46, Slave 40 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号