Created micTask for noise detection Installed GoogleTest Refactored audio module
42 lines
1.3 KiB
C++
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
|