/* * SPDX-FileCopyrightText: 2023 Espressif Systems (Shanghai) CO LTD * * SPDX-License-Identifier: CC0-1.0 */ #pragma once #define DEBUG_SAVE_PCM (1) #define PCM_ONE_CHANNEL (1) #define FILE_SIZE (256000) #define MAX_FILE_SIZE (1*1024*1024) #define RECORD_NAME "/spiffs/record.wav" typedef struct { // The "RIFF" chunk descriptor uint8_t ChunkID[4];// Indicates the file as "RIFF" file int32_t ChunkSize;// The total size of the entire file, excluding the "RIFF" and the header itself, which is the file size minus 8 bytes. uint8_t Format[4];// File format header indicating a "WAVE" file. // The "fmt" sub-chunk uint8_t Subchunk1ID[4];// Format identifier for the "fmt" sub-chunk. int32_t Subchunk1Size;// The length of the fmt sub-chunk (subchunk1) excluding the Subchunk1 ID and Subchunk1 Size fields. It is typically 16, but a value greater than 16 indicates the presence of an extended area. Optional values for the length include 16, 18, 20, 40, etc. int16_t AudioFormat;// Audio encoding format, which represents the compression format. A value of 0x01 indicates PCM format, which is uncompressed. Please refer to table 3 for more details. int16_t NumChannels;// Number of audio channels int32_t SampleRate;// Sample rate, for example, "44100" represents a sampling rate of 44100 Hz. int32_t ByteRate;// Bit rate: Sample rate x bit depth x number of channels / 8. For example, the bit rate for a stereo (2 channels) audio with a sample rate of 44.1 kHz and 16-bit depth would be 176400 bits per second. int16_t BlockAlign;// Memory size occupied by one sample: Bit depth x number of channels / 8. int16_t BitsPerSample;//Sample depth, also known as bit depth. // The "data" sub-chunk uint8_t Subchunk2ID[4];// Total length of the audio data, which is the file size minus the length of the WAV file header. int32_t Subchunk2Size;// Length of the data section, referring to the size of the audio data excluding the header. } wav_header_t; typedef void (*audio_play_finish_cb_t)(void); void sr_handler_task(void *pvParam); /** * @brief The buffer to hold the recorded audio. */ extern uint8_t *audio_rx_buffer; esp_err_t audio_play_task(void *filepath); void audio_record_init(); void audio_record_save(int16_t *audio_buffer, int audio_chunksize); void audio_register_play_finish_cb(audio_play_finish_cb_t cb);