mirror of
https://github.com/qTox/qTox.git
synced 2024-03-22 14:00:36 +08:00
Cleanup mic feedback related code
It simply doesn't work, so let's do it right later
This commit is contained in:
parent
ffbd8fba91
commit
fb68d3750c
|
@ -118,52 +118,6 @@ private:
|
||||||
ALuint mSource;
|
ALuint mSource;
|
||||||
};
|
};
|
||||||
|
|
||||||
class AudioMeter : public QThread
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
AudioMeter()
|
|
||||||
{
|
|
||||||
connect(this, &AudioMeter::finished, this, &AudioMeter::deleteLater);
|
|
||||||
}
|
|
||||||
|
|
||||||
inline void stop()
|
|
||||||
{
|
|
||||||
requestInterruption();
|
|
||||||
}
|
|
||||||
|
|
||||||
private:
|
|
||||||
void run() override final
|
|
||||||
{
|
|
||||||
static const int framesize = AUDIO_FRAME_SAMPLE_COUNT * AUDIO_CHANNELS;
|
|
||||||
|
|
||||||
Audio& audio = Audio::getInstance();
|
|
||||||
|
|
||||||
mNewMaxGain = 0.f;
|
|
||||||
|
|
||||||
QMutexLocker locker(&mMeterLock);
|
|
||||||
while (!isInterruptionRequested()) {
|
|
||||||
mListenerReady.wait(locker.mutex());
|
|
||||||
locker.relock();
|
|
||||||
|
|
||||||
int16_t buff[framesize] = {0};
|
|
||||||
if (audio.tryCaptureSamples(buff, AUDIO_FRAME_SAMPLE_COUNT)) {
|
|
||||||
mNewMaxGain = 0.f;
|
|
||||||
for (int i = 0; i < framesize; ++i) {
|
|
||||||
mNewMaxGain = qMax(mNewMaxGain, qAbs(buff[i]) / 32767.0);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
mGainMeasured.wakeAll();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public:
|
|
||||||
QMutex mMeterLock;
|
|
||||||
QWaitCondition mListenerReady;
|
|
||||||
QWaitCondition mGainMeasured;
|
|
||||||
qreal mNewMaxGain;
|
|
||||||
};
|
|
||||||
|
|
||||||
class AudioPrivate
|
class AudioPrivate
|
||||||
{
|
{
|
||||||
typedef QList<Audio::SID> ALSources;
|
typedef QList<Audio::SID> ALSources;
|
||||||
|
@ -185,9 +139,6 @@ public:
|
||||||
|
|
||||||
~AudioPrivate()
|
~AudioPrivate()
|
||||||
{
|
{
|
||||||
if (audioMeter)
|
|
||||||
audioMeter->stop();
|
|
||||||
|
|
||||||
audioThread->exit();
|
audioThread->exit();
|
||||||
audioThread->wait();
|
audioThread->wait();
|
||||||
cleanupInput();
|
cleanupInput();
|
||||||
|
@ -216,71 +167,8 @@ public:
|
||||||
bool outputInitialized;
|
bool outputInitialized;
|
||||||
|
|
||||||
ALSources outSources;
|
ALSources outSources;
|
||||||
|
|
||||||
QPointer<AudioMeter> audioMeter;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
AudioMeterListener::AudioMeterListener(AudioMeter* measureThread)
|
|
||||||
: mActive(false)
|
|
||||||
, mAudioMeter(measureThread)
|
|
||||||
{
|
|
||||||
assert(mAudioMeter);
|
|
||||||
}
|
|
||||||
|
|
||||||
void AudioMeterListener::start()
|
|
||||||
{
|
|
||||||
if (!mAudioMeter->isRunning()) {
|
|
||||||
mAudioMeter->start();
|
|
||||||
// TODO: ensure that audiometer is running
|
|
||||||
// -> Start listeners from AudioMeter::started signal
|
|
||||||
while (!mAudioMeter->isRunning())
|
|
||||||
QThread::msleep(10);
|
|
||||||
}
|
|
||||||
|
|
||||||
QThread* listener = new QThread;
|
|
||||||
connect(listener, &QThread::started, this, &AudioMeterListener::doListen);
|
|
||||||
connect(listener, &QThread::finished, listener, &QThread::deleteLater);
|
|
||||||
moveToThread(listener);
|
|
||||||
|
|
||||||
listener->start();
|
|
||||||
}
|
|
||||||
|
|
||||||
void AudioMeterListener::stop()
|
|
||||||
{
|
|
||||||
mActive = false;
|
|
||||||
}
|
|
||||||
|
|
||||||
void AudioMeterListener::processed()
|
|
||||||
{
|
|
||||||
mGainProcessed.wakeAll();
|
|
||||||
}
|
|
||||||
|
|
||||||
void AudioMeterListener::doListen()
|
|
||||||
{
|
|
||||||
mMaxGain = 0.f;
|
|
||||||
mActive = true;
|
|
||||||
|
|
||||||
QMutexLocker locker(&mAudioMeter->mMeterLock);
|
|
||||||
while (mActive) {
|
|
||||||
mAudioMeter->mListenerReady.wakeAll();
|
|
||||||
mAudioMeter->mGainMeasured.wait(&mAudioMeter->mMeterLock);
|
|
||||||
locker.relock();
|
|
||||||
|
|
||||||
if (mAudioMeter->mNewMaxGain > mMaxGain) {
|
|
||||||
mMaxGain = mAudioMeter->mNewMaxGain;
|
|
||||||
emit gainChanged(mMaxGain);
|
|
||||||
} else if (mMaxGain > 0.02f) {
|
|
||||||
mMaxGain -= 0.008f;
|
|
||||||
emit gainChanged(mMaxGain);
|
|
||||||
}
|
|
||||||
|
|
||||||
mGainProcessed.wait(locker.mutex(), 10);
|
|
||||||
locker.relock();
|
|
||||||
}
|
|
||||||
|
|
||||||
mAudioMeter->requestInterruption();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Returns the singleton instance.
|
Returns the singleton instance.
|
||||||
*/
|
*/
|
||||||
|
@ -290,14 +178,6 @@ Audio& Audio::getInstance()
|
||||||
return instance;
|
return instance;
|
||||||
}
|
}
|
||||||
|
|
||||||
AudioMeterListener* Audio::createAudioMeterListener() const
|
|
||||||
{
|
|
||||||
if (!d->audioMeter)
|
|
||||||
d->audioMeter = new AudioMeter;
|
|
||||||
|
|
||||||
return new AudioMeterListener(d->audioMeter);
|
|
||||||
}
|
|
||||||
|
|
||||||
Audio::Audio()
|
Audio::Audio()
|
||||||
: d(new AudioPrivate)
|
: d(new AudioPrivate)
|
||||||
{
|
{
|
||||||
|
|
|
@ -29,8 +29,6 @@
|
||||||
|
|
||||||
struct Tox;
|
struct Tox;
|
||||||
class AudioFilterer;
|
class AudioFilterer;
|
||||||
class AudioMeter;
|
|
||||||
class AudioMeterListener;
|
|
||||||
class AudioPrivate;
|
class AudioPrivate;
|
||||||
|
|
||||||
// Public default audio settings
|
// Public default audio settings
|
||||||
|
@ -50,8 +48,6 @@ public:
|
||||||
static Audio& getInstance();
|
static Audio& getInstance();
|
||||||
|
|
||||||
public:
|
public:
|
||||||
AudioMeterListener* createAudioMeterListener() const;
|
|
||||||
|
|
||||||
qreal outputVolume();
|
qreal outputVolume();
|
||||||
void setOutputVolume(qreal volume);
|
void setOutputVolume(qreal volume);
|
||||||
|
|
||||||
|
@ -102,28 +98,4 @@ private:
|
||||||
AudioPrivate* d;
|
AudioPrivate* d;
|
||||||
};
|
};
|
||||||
|
|
||||||
class AudioMeterListener : public QObject
|
|
||||||
{
|
|
||||||
Q_OBJECT
|
|
||||||
public:
|
|
||||||
explicit AudioMeterListener(AudioMeter* measureThread);
|
|
||||||
|
|
||||||
void start();
|
|
||||||
void stop();
|
|
||||||
|
|
||||||
void processed();
|
|
||||||
|
|
||||||
signals:
|
|
||||||
void gainChanged(qreal newMaxGain);
|
|
||||||
|
|
||||||
private slots:
|
|
||||||
void doListen();
|
|
||||||
|
|
||||||
private:
|
|
||||||
bool mActive;
|
|
||||||
AudioMeter* mAudioMeter;
|
|
||||||
qreal mMaxGain;
|
|
||||||
QWaitCondition mGainProcessed;
|
|
||||||
};
|
|
||||||
|
|
||||||
#endif // AUDIO_H
|
#endif // AUDIO_H
|
||||||
|
|
|
@ -60,20 +60,26 @@ void MicFeedbackWidget::paintEvent(QPaintEvent*)
|
||||||
|
|
||||||
void MicFeedbackWidget::showEvent(QShowEvent*)
|
void MicFeedbackWidget::showEvent(QShowEvent*)
|
||||||
{
|
{
|
||||||
|
#if 0
|
||||||
mMeterListener = Audio::getInstance().createAudioMeterListener();
|
mMeterListener = Audio::getInstance().createAudioMeterListener();
|
||||||
connect(mMeterListener, &AudioMeterListener::gainChanged,
|
connect(mMeterListener, &AudioMeterListener::gainChanged,
|
||||||
this, &MicFeedbackWidget::onGainMetered);
|
this, &MicFeedbackWidget::onGainMetered);
|
||||||
mMeterListener->start();
|
mMeterListener->start();
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
void MicFeedbackWidget::hideEvent(QHideEvent*)
|
void MicFeedbackWidget::hideEvent(QHideEvent*)
|
||||||
{
|
{
|
||||||
|
#if 0
|
||||||
mMeterListener->stop();
|
mMeterListener->stop();
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
void MicFeedbackWidget::onGainMetered(qreal value)
|
void MicFeedbackWidget::onGainMetered(qreal value)
|
||||||
{
|
{
|
||||||
|
#if 0
|
||||||
current = value;
|
current = value;
|
||||||
update();
|
update();
|
||||||
mMeterListener->processed();
|
mMeterListener->processed();
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue
Block a user