From d40974a8e6f15035a314ecfd592ec7e1290f4ac1 Mon Sep 17 00:00:00 2001 From: IMback Date: Sat, 30 Dec 2017 21:07:30 +0100 Subject: [PATCH] revert to arecord --- ampmanager.cpp | 63 ++++++++------------------------------------------ ampmanager.h | 12 +++------- 2 files changed, 13 insertions(+), 62 deletions(-) diff --git a/ampmanager.cpp b/ampmanager.cpp index 780b44f..777623c 100644 --- a/ampmanager.cpp +++ b/ampmanager.cpp @@ -1,63 +1,19 @@ #include "ampmanager.h" -AmpManager::AmpManager(Microcontroller *micro, int relayNumber, QAudioDeviceInfo device, QObject *parent) : QObject(parent), _micro(micro), _relayNumber(relayNumber) +AmpManager::AmpManager(Microcontroller *micro, int relayNumber, QObject *parent) : QObject(parent), _micro(micro), _relayNumber(relayNumber) { - /* Open PCM device for recording (capture). */ - rc = snd_pcm_open(&handle, "default", SND_PCM_STREAM_CAPTURE, 0); - if (rc < 0) { - fprintf(stderr, "unable to open pcm device: %s\n", snd_strerror(rc)); - exit(1); - } - - /* Allocate a hardware parameters object. */ - snd_pcm_hw_params_alloca(¶ms); - - /* Fill it in with default values. */ - snd_pcm_hw_params_any(handle, params); - - /* Set the desired hardware parameters. */ - - /* Interleaved mode */ - snd_pcm_hw_params_set_access(handle, params, SND_PCM_ACCESS_RW_INTERLEAVED); - - /* Signed 16-bit little-endian format */ - snd_pcm_hw_params_set_format(handle, params, SND_PCM_FORMAT_S16_LE); -s - /* One channel (mono) */ - snd_pcm_hw_params_set_channels(handle, params, 1); - - /* 16000 bits/second sampling rate */ - val = 16000; - snd_pcm_hw_params_set_rate_near(handle, params, &val, &dir); - - /* Set period size to 2048 frames. */ - frames = 2048; - snd_pcm_hw_params_set_period_size_near(handle, params, &frames, &dir); - - /* Write the parameters to the driver */ - rc = snd_pcm_hw_params(handle, params); - if (rc < 0) { - fprintf(stderr, "unable to set hw parameters: %s\n", snd_strerror(rc)); - exit(1); - } - - /* Use a buffer large enough to hold one period */ - snd_pcm_hw_params_get_period_size(params, &frames, &dir); - size = frames * 2; /* 2 bytes/sample, 1 channels */ - char* buffer = new char[size](); + silenceCount = 0; } AmpManager::~AmpManager() { abort(); - snd_pcm_drain(handle); - snd_pcm_close(handle); } void AmpManager::run() { abort(); - _ioDevice = _audioDevice->start(); + arecord.start( "arecord -D front -" ); loop.reset(new QEventLoop); QTimer timer; connect(&timer, SIGNAL(timeout()), this, SLOT(doTick())); @@ -73,17 +29,18 @@ void AmpManager::run() void AmpManager::abort() { - if (!loop.isNull())loop->quit(); - if(_audioDevice->error() == 0)_audioDevice->stop(); - if(_ioDevice != nullptr)delete _ioDevice; + if (!loop.isNull()){ + loop->quit(); + } + if(arecord.state() == QProcess::Running)arecord.close(); qDebug()<<"Stop Auto Amp Manager\n"; } void AmpManager::doTick() { - if(_audioDevice->error() == 0 && _ioDevice != nullptr) + if(arecord.state() == QProcess::Running) { - QByteArray buffer = _ioDevice->readAll(); + QByteArray buffer = arecord.readAllStandardOutput(); for(long i = 0; i < buffer.size(); i++) { if((uint8_t) buffer.at(i) != 128) @@ -103,6 +60,6 @@ void AmpManager::doTick() _micro->relayOn(_relayNumber); relayState = true; } - silenceCount++; + silenceCount ++; } } diff --git a/ampmanager.h b/ampmanager.h index 9f036a7..4d50ef2 100644 --- a/ampmanager.h +++ b/ampmanager.h @@ -8,11 +8,9 @@ #include #include #include +#include #include #include -#include -#include - #include "microcontroller.h" @@ -21,7 +19,7 @@ class AmpManager : public QObject, public QRunnable { Q_OBJECT public: - explicit AmpManager(Microcontroller *micro, int relayNumber, QAudioDeviceInfo device, QObject *parent = 0); + explicit AmpManager(Microcontroller *micro, int relayNumber, QObject *parent = 0); ~AmpManager(); @@ -38,12 +36,8 @@ private: Microcontroller *_micro; int _relayNumber; - char* _buffer; - snd_pcm_t *handle; - snd_pcm_hw_params_t *params; - snd_pcm_uframes_t frames; - char *buffer; + QProcess arecord; bool relayState = false;