各位大拿,请教个问题,如下:
用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采样的。
离线
多谢晕哥
离线
确认板子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采集导致的。 是么?
如果是这样的话,是否可以在应用层面,解决这个问题。
离线