replace Arecord with Qtmultimedia (requiers pulse?)

This commit is contained in:
IMback
2017-11-19 22:08:59 +01:00
parent a82a9459bc
commit 1dd7aca03b
16 changed files with 329 additions and 167 deletions

View File

@ -1,19 +1,28 @@
#include "ampmanager.h"
AmpManager::AmpManager(Microcontroller *micro, int relayNumber, QObject *parent) : QObject(parent), _micro(micro), _relayNumber(relayNumber)
AmpManager::AmpManager(Microcontroller *micro, int relayNumber, QAudioDeviceInfo device, QObject *parent) : QObject(parent), _micro(micro), _relayNumber(relayNumber)
{
silenceCount = 0;
QAudioFormat format;
format.setSampleRate(8000);
format.setChannelCount(1);
format.setSampleSize(8);
format.setCodec("audio/pcm");
format.setByteOrder(QAudioFormat::LittleEndian);
format.setSampleType(QAudioFormat::UnSignedInt);
_audioDevice = new QAudioInput(device/*, format*/);
}
AmpManager::~AmpManager()
{
abort();
delete _audioDevice;
}
void AmpManager::run()
{
abort();
arecord.start( "arecord -D front -" );
_ioDevice = _audioDevice->start();
loop.reset(new QEventLoop);
QTimer timer;
connect(&timer, SIGNAL(timeout()), this, SLOT(doTick()));
@ -29,18 +38,17 @@ void AmpManager::run()
void AmpManager::abort()
{
if (!loop.isNull()){
loop->quit();
}
if(arecord.state() == QProcess::Running)arecord.close();
if (!loop.isNull())loop->quit();
if(_audioDevice->error() == 0)_audioDevice->stop();
if(_ioDevice != nullptr)delete _ioDevice;
qDebug()<<"Stop Auto Amp Manager\n";
}
void AmpManager::doTick()
{
if(arecord.state() == QProcess::Running)
if(_audioDevice->error() == 0 && _ioDevice != nullptr)
{
QByteArray buffer = arecord.readAllStandardOutput();
QByteArray buffer = _ioDevice->readAll();
for(long i = 0; i < buffer.size(); i++)
{
if((uint8_t) buffer.at(i) != 128)
@ -60,6 +68,6 @@ void AmpManager::doTick()
_micro->relayOn(_relayNumber);
relayState = true;
}
silenceCount ++;
silenceCount++;
}
}