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