You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

50 lines
2.4 KiB
C

/*
* 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);