您尚未登录。

楼主 #1 2018-05-03 10:31:19

cokale
会员
注册时间: 2018-05-02
已发帖子: 9
积分: 9

ESP32采集PCM语音数据

各位大拿,请教个问题,如下:
用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数据是否会不匹配?

离线

#2 2018-05-03 10:36:32

晕哥
管理员
所在地: 微信 whycan_cn
注册时间: 2017-09-06
已发帖子: 9,234
积分: 9197

Re: ESP32采集PCM语音数据

你用的是什么声卡?电路图方便贴出来吗?





离线

楼主 #3 2018-05-03 10:45:16

cokale
会员
注册时间: 2018-05-02
已发帖子: 9
积分: 9

Re: ESP32采集PCM语音数据

图片没法上传,到1%卡主了。

https://pan.baidu.com/s/1WdEZ7e5JpGPMPCOQEwA-bA

看看是否可以打开。

板子是一个modem,输出的PCM语音数据。8khz,16bit采样的。

离线

#4 2018-05-03 10:48:10

晕哥
管理员
所在地: 微信 whycan_cn
注册时间: 2017-09-06
已发帖子: 9,234
积分: 9197

Re: ESP32采集PCM语音数据

2e929cc329931482e5f81b2f905d1fde.jpg
上面是楼主的图片


PCM和I2S时序不同,我一会帮你看下ESP32是否能接入PCM





离线

楼主 #5 2018-05-03 10:52:33

cokale
会员
注册时间: 2018-05-02
已发帖子: 9
积分: 9

Re: ESP32采集PCM语音数据

多谢晕哥

离线

#6 2018-05-03 11:13:07

晕哥
管理员
所在地: 微信 whycan_cn
注册时间: 2017-09-06
已发帖子: 9,234
积分: 9197

Re: ESP32采集PCM语音数据

cokale 说:

多谢晕哥

这就太客气了,
大家能到这里发帖已经很给面子了。

ESP32的I2S/PCM外设支持PCM时序

I2S_COMM_FORMAT_PCM = 0x08
I2S communication format PCM

I2S_COMM_FORMAT_PCM_SHORT = 0x10
PCM Short

I2S_COMM_FORMAT_PCM_LONG = 0x20
PCM Long

你按上面的要求调整一下三个不同的参数试一试。

你的 modem 用什么型号?





离线

#7 2018-05-03 11:25:41

晕哥
管理员
所在地: 微信 whycan_cn
注册时间: 2017-09-06
已发帖子: 9,234
积分: 9197

Re: ESP32采集PCM语音数据

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)
};

或者按上面这个试一试。





离线

#8 2018-05-03 11:45:27

晕哥
管理员
所在地: 微信 whycan_cn
注册时间: 2017-09-06
已发帖子: 9,234
积分: 9197

Re: ESP32采集PCM语音数据

强烈建议你用逻辑分析仪抓一下 PCM 口的数据,
不需要接ESP32,
然后把图片贴上来。

确认modem真的有音频数据输出。
有些modem默认PCM是不输出的,
你得用AT指令打开才行。





离线

楼主 #9 2018-05-03 16:42:41

cokale
会员
注册时间: 2018-05-02
已发帖子: 9
积分: 9

Re: ESP32采集PCM语音数据

确认板子PCM是打开了的,而且有数据的。

read到的数据保存成wav也能播放,声音效果就是听的感觉哪个配置出问题,失真了。

https://pan.baidu.com/s/1JGi0KNsEB7kgfQhaZ6oTdw

wav头是自己加的
https://pan.baidu.com/s/1PgSk7f4r9hIFznun7kdmEw

离线

楼主 #10 2018-05-03 16:46:43

cokale
会员
注册时间: 2018-05-02
已发帖子: 9
积分: 9

Re: ESP32采集PCM语音数据

晕哥 说:

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 格式能正常收到数据。

离线

#11 2018-05-03 17:14:47

晕哥
管理员
所在地: 微信 whycan_cn
注册时间: 2017-09-06
已发帖子: 9,234
积分: 9197

Re: ESP32采集PCM语音数据

QQ20180503171353.png

看起来像丢了数据
据说正弦波可以比较清楚看出来数据丢数据,
可以试一试用正弦波,别用人声。





离线

楼主 #12 2018-05-03 19:51:54

cokale
会员
注册时间: 2018-05-02
已发帖子: 9
积分: 9

Re: ESP32采集PCM语音数据

刚刚我把采集的语音,保存下来,这次保存的时候,wave头的num channels由1变为2;就可以播放了。但感觉语速明显快了一倍。

感觉这个就是pcm的语音,通过i2s采集导致的。 是么?

如果是这样的话,是否可以在应用层面,解决这个问题。

https://pan.baidu.com/s/1obSJUb9JtHAdqn99vIzfjA

离线

#13 2018-05-03 20:17:35

晕哥
管理员
所在地: 微信 whycan_cn
注册时间: 2017-09-06
已发帖子: 9,234
积分: 9197

Re: ESP32采集PCM语音数据

感觉掉数据了, 结尾比较正常。





离线

#14 2018-07-02 17:46:12

观自在
会员
注册时间: 2018-07-02
已发帖子: 18
积分: 18

Re: ESP32采集PCM语音数据

好帖

离线

#15 2018-07-02 19:54:18

arphone
会员
注册时间: 2017-11-03
已发帖子: 92
积分: 83.5

Re: ESP32采集PCM语音数据

也许会用到,学习了

离线

#16 2018-09-13 15:58:26

萧瑟
会员
注册时间: 2018-09-12
已发帖子: 22
积分: 22

Re: ESP32采集PCM语音数据

你好,这个是跑的哪个用例啊?

离线

#17 2018-09-13 15:59:45

晕哥
管理员
所在地: 微信 whycan_cn
注册时间: 2017-09-06
已发帖子: 9,234
积分: 9197

Re: ESP32采集PCM语音数据

就是 I2S 采集那个例程, esp-idf 里面.





离线

页脚

工信部备案:粤ICP备20025096号 Powered by FluxBB

感谢为中文互联网持续输出优质内容的各位老铁们。 QQ: 516333132, 微信(wechat): whycan_cn (哇酷网/挖坑网/填坑网) service@whycan.cn