#include "speakersensor.h" #include SpeakerSensorSource::SpeakerSensorSource(QString name, QObject *parent) : QObject(parent), name_(name) { silenceCount = 0; } SpeakerSensorSource::~SpeakerSensorSource() { abort(); } void SpeakerSensorSource::run() { abort(); arecord.start( "arecord", {"--disable-softvol", "-r", "8000", "-D", "front", "-"}); connect(&timer, SIGNAL(timeout()), this, SLOT(doTick())); timer.setInterval(500); timer.start(); stateChanged(Sensor(Sensor::TYPE_AUDIO_OUTPUT, 0, 1, name_)); } void SpeakerSensorSource::abort() { if(arecord.state() == QProcess::Running)arecord.close(); if(timer.isActive())timer.stop(); } void SpeakerSensorSource::doTick() { if(arecord.state() == QProcess::Running) { QByteArray buffer = arecord.readAllStandardOutput(); //qDebug()<<(int16_t)buffer[0]; for(long i = 0; i < buffer.size(); i++) { if((int16_t)buffer.at(i) != -128) { silenceCount = 0; } } if(silenceCount > 40 && state) { stateChanged(Sensor(Sensor::TYPE_AUDIO_OUTPUT, 0, 0, name_)); state = false; } else if(silenceCount == 0 && !state) { stateChanged(Sensor(Sensor::TYPE_AUDIO_OUTPUT, 0, 1, name_)); state = true; } silenceCount++; } }