#include "ampmanager.h" AmpManager::AmpManager(Microcontroller *micro, int relayNumber, QObject *parent) : QObject(parent), _micro(micro), _relayNumber(relayNumber) { silenceCount = 0; } AmpManager::~AmpManager() { abort(); } void AmpManager::run() { abort(); arecord.start( "arecord -D front -" ); loop.reset(new QEventLoop); QTimer timer; connect(&timer, SIGNAL(timeout()), this, SLOT(doTick())); timer.setInterval(500); timer.start(); qDebug()<<"Start Auto Amp Manager\n"; _micro->relayOn(_relayNumber); relayState = true; loop->exec(); } void AmpManager::abort() { if (!loop.isNull()){ loop->quit(); } if(arecord.state() == QProcess::Running)arecord.close(); qDebug()<<"Stop Auto Amp Manager\n"; } void AmpManager::doTick() { if(arecord.state() == QProcess::Running) { QByteArray buffer = arecord.readAllStandardOutput(); for(long i = 0; i < buffer.size(); i++) { if((uint8_t) buffer.at(i) != 128) { silenceCount = 0; } } if(silenceCount > 40 && relayState) { std::cout<<"Auto off Amp\n"; _micro->relayOff(_relayNumber); relayState = false; } else if(silenceCount == 0 && !relayState) { std::cout<<"Auto on Amp\n"; _micro->relayOn(_relayNumber); relayState = true; } silenceCount ++; } }