各位大拿,请教个问题,如下:
用ESP32采集PCM语音数据,
另外一块板子传输的是PCM数据,就是单声道的;和I2S的双声道不同。
ESP32采集
配置模式,
i2s_config_t i2s_config = {
.mode = I2S_MODE_MASTER | I2S_MODE_TX | I2S_MODE_RX , // TX , RX
.sample_rate = SAMPLE_RATE,
.bits_per_sample = 16,
.channel_format = I2S_CHANNEL_FMT_ONLY_RIGHT, //only one channel
.communication_format = I2S_COMM_FORMAT_I2S | I2S_COMM_FORMAT_I2S_MSB,
ret= i2s_read_bytes(I2S_NUM, recv_pcm, 320, 0);
if(ret <= 0)
如果communication_format配置为 I2S_COMM_FORMAT_I2S 可以正常采集数据,ret返回320;
但采集的数据保存为wav播放,播放的不是期望的正常声音。
如果communication_format配置为I2S_COMM_FORMAT_PCM 不能正常采集数据,ret返回-1;
两个问题:esp32能正常采集PCM语音么? 配置I2S和对端的PCM数据是否会不匹配?
离线
图片没法上传,到1%卡主了。
https://pan.baidu.com/s/1WdEZ7e5JpGPMPCOQEwA-bA
看看是否可以打开。
板子是一个modem,输出的PCM语音数据。8khz,16bit采样的。
离线
多谢晕哥
离线
多谢晕哥
这就太客气了,
大家能到这里发帖已经很给面子了。
ESP32的I2S/PCM外设支持PCM时序
I2S_COMM_FORMAT_PCM = 0x08
I2S communication format PCMI2S_COMM_FORMAT_PCM_SHORT = 0x10
PCM ShortI2S_COMM_FORMAT_PCM_LONG = 0x20
PCM Long
你按上面的要求调整一下三个不同的参数试一试。
你的 modem 用什么型号?
在线
i2s_config_t i2s_config = {
.mode = I2S_MODE_MASTER | I2S_MODE_RX | I2S_MODE_PDM, //master, RX, PDM
.sample_rate = SAMPLE_RATE,
.bits_per_sample = BITS_PS,
.channel_format = I2S_CHANNEL_FMT_RIGHT_LEFT,
.communication_format = I2S_COMM_FORMAT_PCM, //pcm data format
.dma_buf_count = BUF_COUNT,
.dma_buf_len = BUF_LENGTH,
.use_apll = 0, //apll disabled
.intr_alloc_flags = ESP_INTR_FLAG_LEVEL1 //interrupt level 1(lowest priority)
};
或者按上面这个试一试。
在线
确认板子PCM是打开了的,而且有数据的。
read到的数据保存成wav也能播放,声音效果就是听的感觉哪个配置出问题,失真了。
离线
i2s_config_t i2s_config = {
.mode = I2S_MODE_MASTER | I2S_MODE_RX | I2S_MODE_PDM, //master, RX, PDM
.sample_rate = SAMPLE_RATE,
.bits_per_sample = BITS_PS,
.channel_format = I2S_CHANNEL_FMT_RIGHT_LEFT,
.communication_format = I2S_COMM_FORMAT_PCM, //pcm data format
.dma_buf_count = BUF_COUNT,
.dma_buf_len = BUF_LENGTH,
.use_apll = 0, //apll disabled
.intr_alloc_flags = ESP_INTR_FLAG_LEVEL1 //interrupt level 1(lowest priority)
};或者按上面这个试一试。
都试过了,好像不行,只有I2S_COMM_FORMAT_I2S 格式能正常收到数据。
离线
刚刚我把采集的语音,保存下来,这次保存的时候,wave头的num channels由1变为2;就可以播放了。但感觉语速明显快了一倍。
感觉这个就是pcm的语音,通过i2s采集导致的。 是么?
如果是这样的话,是否可以在应用层面,解决这个问题。
离线
好帖
离线
也许会用到,学习了
离线
你好,这个是跑的哪个用例啊?
离线