hacky fix for QAudioOutput leftovers
parent
46eb1cb9b4
commit
205be0edde
|
@ -14,6 +14,7 @@ using namespace Xybrid::Data;
|
|||
#include <QDebug>
|
||||
#include <QThread>
|
||||
#include <QMutex>
|
||||
#include <QTimer>
|
||||
|
||||
// zero-initialize
|
||||
AudioEngine* Xybrid::Audio::audioEngine = nullptr;
|
||||
|
@ -101,8 +102,12 @@ void AudioEngine::initAudio(bool startNow) {
|
|||
|
||||
void AudioEngine::deinitAudio() {
|
||||
if (output) {
|
||||
output->stop();
|
||||
output.reset();
|
||||
QTimer::singleShot(20, [this] { // delay to flush buffers with silence, else we get leftovers on next playback
|
||||
if (output && mode == Stopped) {
|
||||
output->stop();
|
||||
output.reset();
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -129,8 +134,6 @@ void AudioEngine::play(std::shared_ptr<Project> p) {
|
|||
|
||||
output->start(this);
|
||||
|
||||
//tickId = 0; // actually, no reason to reset this
|
||||
|
||||
mode = Playing;
|
||||
emit this->playbackModeChanged();
|
||||
}, Qt::QueuedConnection);
|
||||
|
@ -141,6 +144,7 @@ void AudioEngine::stop() {
|
|||
project = nullptr;
|
||||
queueValid = false;
|
||||
queue.clear();
|
||||
for (auto& b : buffer) b.clear();
|
||||
deinitAudio();
|
||||
mode = Stopped;
|
||||
emit this->playbackModeChanged();
|
||||
|
@ -277,20 +281,18 @@ qint64 AudioEngine::readData(char *data, qint64 maxlen) {
|
|||
data += stride;
|
||||
sr -= stride;
|
||||
}
|
||||
|
||||
return maxlen - sr;
|
||||
}
|
||||
|
||||
void AudioEngine::nextTick() {
|
||||
bufPos = 0;
|
||||
|
||||
if (mode == Paused) { // simplest case, just give a 100ms empty buffer
|
||||
if (mode == Paused || mode == Stopped) { // simplest case, just give a 100ms empty buffer
|
||||
buffer[0].clear();
|
||||
buffer[1].clear();
|
||||
buffer[0].resize(static_cast<size_t>(sampleRate/10));
|
||||
buffer[1].resize(static_cast<size_t>(sampleRate/10));
|
||||
} else if (mode == Previewing) {
|
||||
// WIP
|
||||
// reset raw buffer
|
||||
tickBufPtr = tickBuf.get();
|
||||
tickId++;
|
||||
|
|
Loading…
Reference in New Issue