104 lines
2.5 KiB
C++
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";
|
|
} |