replace Arecord with Qtmultimedia (requiers pulse?)
This commit is contained in:
@ -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++;
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user