M5Core2
M5Core2 copied to clipboard
M5Core2 录音pcm文件格式问题
问题描述: 使用 M5Core2 录音存储 pcm 文件,然后从 pcm 文件读数据,使用 I2S 可以播放(音量较低,听着也有杂音,但是能正常听清内容)。但是从电脑打开该 pcm 文件,不能正常播放(进而导致 ASR 服务不能正常进行识别)。 怀疑过电脑打开 pcm 设置不对,所以尝试了电脑能正常播放的 WAV(PCM+header),M5Core2 也能正常播放该 WAV 文件。也尝试了电脑换不同的参数打开(虽然很确定录音参数,以防万一^-^!),包括各种采样率,位宽,大小端,声道数 等,也不能正常播放。同时,换了各种采样率/I2S参数进行录音,并不奏效。基本断定是获取的 pcm 文件本身就有问题。 使用该 repo 提供的录音样例 https://github.com/m5stack/M5Core2/blob/master/examples/Basics/record/record.ino ,存储为pcm文件,也有该问题。 所以感觉是 M5Core2 录音存储的 PCM 文件格式问题 或者是 pdm 麦克风的问题。请了解的同学提供下解决问题的思路~
相关文件:
官方提供的录音样例,把 read 数据存储到 pcm 文件
录音语句:“你好,请问你叫什么名字” test_example.zip
打开方式:
波形文件:
可以看到不是正常的波形
录音部分代码:
const int RECORD_BUFFER_SIZE = 4096;
uint8_t microphonedata0[RECORD_BUFFER_SIZE];
M5.Spk.InitI2SSpeakOrMic(MODE_MIC);
File audioDataFile = SD.open("/test_audio.pcm", FILE_WRITE);
// Serial.println(audioDataFile);
size_t byte_read;
while (1) {
i2s_read(Speak_I2S_NUMBER,
microphonedata0, RECORD_BUFFER_SIZE,
&byte_read, (100 / portTICK_RATE_MS));
audioDataFile.write(microphonedata0, RECORD_BUFFER_SIZE);
// Serial.println(byte_read);
if (M5.Touch.ispressed() != true)
break;
}
M5Core2 SPK 录音/播放 I2S 设置:
https://github.com/m5stack/M5Core2/blob/master/src/Speaker.cpp