diff --git a/src/platform/qt/AudioDevice.cpp b/src/platform/qt/AudioDevice.cpp index 9b18870c7..3108fe6f1 100644 --- a/src/platform/qt/AudioDevice.cpp +++ b/src/platform/qt/AudioDevice.cpp @@ -32,17 +32,21 @@ qint64 AudioDevice::writeData(const char*, qint64) { return 0; } -AudioDevice::Thread::Thread(QObject* parent) +AudioThread::AudioThread(QObject* parent) : QThread(parent) { // Nothing to do } -void AudioDevice::Thread::setInput(GBAAudio* input) { +void AudioThread::setInput(GBAAudio* input) { m_input = input; } -void AudioDevice::Thread::run() { +void AudioThread::shutdown() { + m_audioOutput->stop(); +} + +void AudioThread::run() { QAudioFormat format; format.setSampleRate(44100); format.setChannelCount(2); @@ -52,11 +56,10 @@ void AudioDevice::Thread::run() { format.setSampleType(QAudioFormat::SignedInt); AudioDevice device(m_input); - QAudioOutput audioOutput(format); - audioOutput.setBufferSize(1024); - device.setFormat(audioOutput.format()); + m_audioOutput = new QAudioOutput(format); + m_audioOutput->setBufferSize(1024); + device.setFormat(m_audioOutput->format()); + m_audioOutput->start(&device); - audioOutput.start(&device); exec(); - audioOutput.stop(); } diff --git a/src/platform/qt/AudioDevice.h b/src/platform/qt/AudioDevice.h index 9dcba11b7..1703d08eb 100644 --- a/src/platform/qt/AudioDevice.h +++ b/src/platform/qt/AudioDevice.h @@ -10,6 +10,27 @@ struct GBAAudio; namespace QGBA { + + +class AudioThread : public QThread { +Q_OBJECT + +public: + AudioThread(QObject* parent = 0); + + void setInput(GBAAudio* input); + +public slots: + void shutdown(); + +protected: + void run(); + +private: + GBAAudio* m_input; + QAudioOutput* m_audioOutput; +}; + class AudioDevice : public QIODevice { Q_OBJECT @@ -18,19 +39,6 @@ public: void setFormat(const QAudioFormat& format); - class Thread : public QThread { - public: - Thread(QObject* parent = 0); - - void setInput(GBAAudio* input); - - protected: - void run(); - - private: - GBAAudio* m_input; - }; - protected: virtual qint64 readData(char* data, qint64 maxSize); virtual qint64 writeData(const char* data, qint64 maxSize); diff --git a/src/platform/qt/Window.cpp b/src/platform/qt/Window.cpp index 5288d3873..06bdffba3 100644 --- a/src/platform/qt/Window.cpp +++ b/src/platform/qt/Window.cpp @@ -107,9 +107,10 @@ void Window::gameStarted(GBAThread* context) { } void Window::setupAudio(GBAAudio* audio) { - AudioDevice::Thread* thread = new AudioDevice::Thread(this); + AudioThread* thread = new AudioThread(this); thread->setInput(audio); thread->start(QThread::HighPriority); + connect(this, SIGNAL(shutdown()), thread, SLOT(shutdown())); } void Window::setupMenu(QMenuBar* menubar) {