revert to arecord
This commit is contained in:
@ -1,63 +1,19 @@
|
|||||||
#include "ampmanager.h"
|
#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). */
|
silenceCount = 0;
|
||||||
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]();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
AmpManager::~AmpManager()
|
AmpManager::~AmpManager()
|
||||||
{
|
{
|
||||||
abort();
|
abort();
|
||||||
snd_pcm_drain(handle);
|
|
||||||
snd_pcm_close(handle);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void AmpManager::run()
|
void AmpManager::run()
|
||||||
{
|
{
|
||||||
abort();
|
abort();
|
||||||
_ioDevice = _audioDevice->start();
|
arecord.start( "arecord -D front -" );
|
||||||
loop.reset(new QEventLoop);
|
loop.reset(new QEventLoop);
|
||||||
QTimer timer;
|
QTimer timer;
|
||||||
connect(&timer, SIGNAL(timeout()), this, SLOT(doTick()));
|
connect(&timer, SIGNAL(timeout()), this, SLOT(doTick()));
|
||||||
@ -73,17 +29,18 @@ void AmpManager::run()
|
|||||||
|
|
||||||
void AmpManager::abort()
|
void AmpManager::abort()
|
||||||
{
|
{
|
||||||
if (!loop.isNull())loop->quit();
|
if (!loop.isNull()){
|
||||||
if(_audioDevice->error() == 0)_audioDevice->stop();
|
loop->quit();
|
||||||
if(_ioDevice != nullptr)delete _ioDevice;
|
}
|
||||||
|
if(arecord.state() == QProcess::Running)arecord.close();
|
||||||
qDebug()<<"Stop Auto Amp Manager\n";
|
qDebug()<<"Stop Auto Amp Manager\n";
|
||||||
}
|
}
|
||||||
|
|
||||||
void AmpManager::doTick()
|
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++)
|
for(long i = 0; i < buffer.size(); i++)
|
||||||
{
|
{
|
||||||
if((uint8_t) buffer.at(i) != 128)
|
if((uint8_t) buffer.at(i) != 128)
|
||||||
|
12
ampmanager.h
12
ampmanager.h
@ -8,11 +8,9 @@
|
|||||||
#include <QScopedPointer>
|
#include <QScopedPointer>
|
||||||
#include <QEventLoop>
|
#include <QEventLoop>
|
||||||
#include <QTimer>
|
#include <QTimer>
|
||||||
|
#include <QProcess>
|
||||||
#include <QByteArray>
|
#include <QByteArray>
|
||||||
#include <QtDebug>
|
#include <QtDebug>
|
||||||
#include <QAudioDeviceInfo>
|
|
||||||
#include <alsa/asoundlib.h>
|
|
||||||
|
|
||||||
|
|
||||||
#include "microcontroller.h"
|
#include "microcontroller.h"
|
||||||
|
|
||||||
@ -21,7 +19,7 @@ class AmpManager : public QObject, public QRunnable
|
|||||||
{
|
{
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
public:
|
public:
|
||||||
explicit AmpManager(Microcontroller *micro, int relayNumber, QAudioDeviceInfo device, QObject *parent = 0);
|
explicit AmpManager(Microcontroller *micro, int relayNumber, QObject *parent = 0);
|
||||||
~AmpManager();
|
~AmpManager();
|
||||||
|
|
||||||
|
|
||||||
@ -38,12 +36,8 @@ private:
|
|||||||
Microcontroller *_micro;
|
Microcontroller *_micro;
|
||||||
int _relayNumber;
|
int _relayNumber;
|
||||||
|
|
||||||
char* _buffer;
|
|
||||||
|
|
||||||
snd_pcm_t *handle;
|
QProcess arecord;
|
||||||
snd_pcm_hw_params_t *params;
|
|
||||||
snd_pcm_uframes_t frames;
|
|
||||||
char *buffer;
|
|
||||||
|
|
||||||
bool relayState = false;
|
bool relayState = false;
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user