Cheeze/src/domain/AidStrategy.cpp

104 lines
2.5 KiB
C++

#include "domain/AidStrategy.h"
#include "utils/Time.h"
#include "config/config.h"
void AidStrategy::setup() {}
void AidStrategy::process() {
_writeToPrecedingBuffer(_audio);
if (_isNoiseDetected(_audio)) {
_recordAudio(_audio);
}
}
void AidStrategy::_writeToPrecedingBuffer(Audio* audioSource) {
if (!_isWritingToPrecedingBuffer && !_recordingAudio) {
_isWritingToPrecedingBuffer = true;
audioSource->writeToPrecedingBuffer();
_isWritingToPrecedingBuffer = false;
}
}
bool AidStrategy::_isNoiseDetected(Audio* audioSource) {
return audioSource->isNoiseDetected();
}
void AidStrategy::_recordAudio(Audio* audioSource) {
if (_recordingAudio)
return;
Serial.println("!!!");
bool isReady = false;
_recordingAudio = true;
isReady = _ready();
if (!isReady)
return;
if (_http->connect(RAT_IP, RAT_PORT)) {
Serial.println("========================================");
Serial.println("| RECORDING...");
audioSource->record();
Serial.println("| Recording finished");
_sendAudio(audioSource);
_http->stop();
} else {
Serial.println("| Connection failed");
}
_recordingAudio = false;
}
String AidStrategy::_ready() {
return _http->send("POST", "/aid/ready", RAT_IP, RAT_PORT, "", "");
}
void AidStrategy::_sendAudio(Audio* audioSource) {
String payloadStart = _formPayloadStart(_audio->getStartMicros());
String payloadEnd = _formPayloadEnd();
int audioLength = _audio->getSize();
int jsonLength = payloadStart.length() + audioLength + payloadEnd.length();
_http->printHeader("POST", "/aid/save", RAT_IP, "application/json");
_http->printContentLength(jsonLength);
this->_printContent(payloadStart, payloadEnd, _http->getClient());
}
void AidStrategy::_printContent(String payloadStart, String payloadEnd, Stream* stream) {
stream->print(payloadStart);
_audio->print(stream);
stream->print(payloadEnd);
_logContent(payloadStart, payloadEnd);
}
void AidStrategy::_logContent(String payloadStart, String payloadEnd) {
Serial.print("| ");
Serial.print(payloadStart);
Serial.print("...");
Serial.print(payloadEnd);
}
String AidStrategy::_formPayloadStart(unsigned long startMicros) {
String payloadStart = "";
payloadStart += "{\"audio\":{\"micros\":";
payloadStart += String(_audio->getStartMicros() - _timeModule.getInitialMicros());
payloadStart += ",\"initialTime\":";
payloadStart += String(_timeModule.getInitialTime());
payloadStart += ",\"content\":\"";
return payloadStart;
}
String AidStrategy::_formPayloadEnd() {
return "\"}}\r\n\r\n";
}