I am using SeedStudio ESP32 Xiao Sense to record multiple samples of audio at once. I modified the sample code to do so. However, for some reason the header is corrupted(not sure for other parts) and the file will not play.
Below is the code I modified. I can't find the error and don't know how to proceed further.
Link to audio files: Google drive folder for audio samples recorded.
#include "ESP_I2S.h"
#include "FS.h"
#include "SD.h"
void record(uint8_t wav_buffer, size_t wav_size, int i);
void save(uint8_t* wav_buffer, size_t wav_size, int i);
void setup() {
Serial.begin(115200);
while (!Serial) {
delay(10);
}
I2SClass i2s;
uint8_t *wav_buffer;
size_t wav_size;
Serial.println("Initializing I2S bus...");
i2s.setPinsPdmRx(42, 41);
for(int i=0; i<5;i++){
record(i2s, wav_buffer, wav_size, i);
}
Serial.println("Application complete.");
}
void record(I2SClass i2s, uint8_t* wav_buffer, size_t wav_size, int i){
// start I2S at 16 kHz with 16-bits per sample
if (!i2s.begin(I2S_MODE_PDM_RX, 16000, I2S_DATA_BIT_WIDTH_16BIT, I2S_SLOT_MODE_MONO)) {
Serial.println("Failed to initialize I2S!");
while (1); // do nothing
}
Serial.println("I2S bus initialized.");
// Serial.println(wav_size);
wav_buffer = i2s.recordWAV(5, &wav_size);
// Serial.println(wav_size);
free(wav_buffer);
// Serial.println("Block END\n");
save(wav_buffer, wav_size, i);
}
void save(uint8_t* wav_buffer, size_t wav_size, int i){
Serial.println("Initializing SD card...");
if(!SD.begin(21)){
Serial.println("Failed to mount SD Card!");
while (1) ;
}
Serial.println("SD card initialized.");
String file_name = "/audio_"+String(i)+".wav";
// Create a file on the SD card
File file = SD.open(file_name, FILE_WRITE);
if (!file) {
Serial.println("Failed to open file for writing!");
return;
}
Serial.println("Writing audio data to file...");
// Write the audio data to the file
if (file.write(wav_buffer, wav_size) != wav_size) {
Serial.println("Failed to write audio data to file!");
return;
}
file.close();
}
void loop() {
delay(1000);
Serial.printf(".");
}