summaryrefslogtreecommitdiff
path: root/plugin/src/Caelestia/audioprovider.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'plugin/src/Caelestia/audioprovider.cpp')
-rw-r--r--plugin/src/Caelestia/audioprovider.cpp59
1 files changed, 51 insertions, 8 deletions
diff --git a/plugin/src/Caelestia/audioprovider.cpp b/plugin/src/Caelestia/audioprovider.cpp
index 4188460..f31480e 100644
--- a/plugin/src/Caelestia/audioprovider.cpp
+++ b/plugin/src/Caelestia/audioprovider.cpp
@@ -7,10 +7,9 @@
namespace caelestia {
-AudioProcessor::AudioProcessor(QObject* parent)
+AudioProcessor::AudioProcessor(AudioCollector* collector, QObject* parent)
: QObject(parent)
- , m_sampleRate(AudioCollector::instance()->sampleRate())
- , m_chunkSize(AudioCollector::instance()->chunkSize()) {}
+ , m_collector(collector) {}
AudioProcessor::~AudioProcessor() {
stop();
@@ -18,26 +17,53 @@ AudioProcessor::~AudioProcessor() {
void AudioProcessor::init() {
m_timer = new QTimer(this);
- m_timer->setInterval(static_cast<int>(m_chunkSize * 1000.0 / m_sampleRate));
+ if (m_collector) {
+ m_timer->setInterval(static_cast<int>(m_collector->chunkSize() * 1000.0 / m_collector->sampleRate()));
+ }
connect(m_timer, &QTimer::timeout, this, &AudioProcessor::process);
}
-void AudioProcessor::start() {
- AudioCollector::instance()->ref();
+void AudioProcessor::setCollector(AudioCollector* collector) {
+ if (m_collector == collector) {
+ return;
+ }
+
if (m_timer) {
+ if (m_timer->isActive()) {
+ if (m_collector) {
+ m_collector->unref();
+ }
+ if (collector) {
+ collector->ref();
+ }
+ }
+ if (collector) {
+ m_timer->setInterval(static_cast<int>(collector->chunkSize() * 1000.0 / collector->sampleRate()));
+ } else {
+ m_timer->stop();
+ }
+ }
+
+ m_collector = collector;
+}
+
+void AudioProcessor::start() {
+ if (m_timer && m_collector) {
+ m_collector->ref();
m_timer->start();
}
}
void AudioProcessor::stop() {
- if (m_timer) {
+ if (m_timer && m_collector) {
m_timer->stop();
+ m_collector->unref();
}
- AudioCollector::instance()->unref();
}
AudioProvider::AudioProvider(QObject* parent)
: Service(parent)
+ , m_collector(nullptr)
, m_processor(nullptr)
, m_thread(nullptr) {}
@@ -48,6 +74,23 @@ AudioProvider::~AudioProvider() {
}
}
+AudioCollector* AudioProvider::collector() const {
+ return m_collector;
+}
+
+void AudioProvider::setCollector(AudioCollector* collector) {
+ if (m_collector == collector) {
+ return;
+ }
+
+ m_collector = collector;
+ emit collectorChanged();
+
+ if (m_processor) {
+ QMetaObject::invokeMethod(m_processor, "setCollector", Qt::QueuedConnection, Q_ARG(AudioCollector*, collector));
+ }
+}
+
void AudioProvider::init() {
if (!m_processor) {
qWarning() << "AudioProvider::init: attempted to init with no processor set";