Cheeze/src/infra/Audio.h
DarkSlein d6716df807 Started implementation of saving pre-recording data
Created micTask for noise detection

Installed GoogleTest

Refactored audio module
2024-05-08 18:39:19 +03:00

42 lines
1.3 KiB
C++

#ifndef _AUDIO_H
#define _AUDIO_H
#include <Arduino.h>
#include "infra/I2S.h"
// 16bit, monoral, 16000Hz, linear PCM
class Audio {
private:
I2S* i2s;
static const int _headerSize = 44;
static const int _i2sBufferSize = 6000; // 22500
char _i2sBuffer[_i2sBufferSize];
char _i2sBuffer2[_i2sBufferSize];
static const int _wavDataSize = 90000; // It must be multiple of _dividedWavDataSize. Recording time is about 1.9 second.
static const int _dividedWavDataSize = _i2sBufferSize/4;
char** _wavData; // It's divided. Because large continuous memory area can't be allocated in esp32.
static const int _prerecordedWavDataSize = _wavDataSize/4;
char** _prerecordedWavData;
byte _paddedHeader[_headerSize + 4] = {0}; // The size must be multiple of 3 for Base64 encoding. Additional byte size must be even because wave data is 16bit.
unsigned long _startMicros = 0;
void _writeToBuffer(char** wavBuffer, int waveDataSize);
void _createWavHeader(byte* header, int waveDataSize);
public:
Audio(MicType micType);
~Audio();
char** record();
int getSize();
String print(Stream* stream);
unsigned long getStartMicros();
bool isNoiseDetected(int threshold);
};
#endif // _AUDIO_H