diff options
Diffstat (limited to 'plugin/src/Caelestia/audioprovider.cpp')
| -rw-r--r-- | plugin/src/Caelestia/audioprovider.cpp | 59 |
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"; |