Move audio initialization into thread

This commit is contained in:
Jeffrey Pfau 2014-01-29 02:34:58 -08:00
parent 0ca3afa3e6
commit 98c9121ac2
4 changed files with 24 additions and 27 deletions

View File

@ -32,18 +32,31 @@ qint64 AudioDevice::writeData(const char*, qint64) {
return 0; return 0;
} }
AudioDevice::Thread::Thread(AudioDevice* device, QObject* parent) AudioDevice::Thread::Thread(QObject* parent)
: QThread(parent) : QThread(parent)
, m_device(device)
{ {
// Nothing to do // Nothing to do
} }
void AudioDevice::Thread::setOutput(QAudioOutput* output) { void AudioDevice::Thread::setInput(GBAAudio* input) {
m_audio = output; m_input = input;
} }
void AudioDevice::Thread::run() { void AudioDevice::Thread::run() {
m_audio->start(m_device); QAudioFormat format;
format.setSampleRate(44100);
format.setChannelCount(2);
format.setSampleSize(16);
format.setCodec("audio/pcm");
format.setByteOrder(QAudioFormat::LittleEndian);
format.setSampleType(QAudioFormat::SignedInt);
AudioDevice device(m_input);
QAudioOutput audioOutput(format);
audioOutput.setBufferSize(1024);
device.setFormat(audioOutput.format());
audioOutput.start(&device);
exec(); exec();
audioOutput.stop();
} }

View File

@ -20,16 +20,15 @@ public:
class Thread : public QThread { class Thread : public QThread {
public: public:
Thread(AudioDevice* device, QObject* parent = 0); Thread(QObject* parent = 0);
void setOutput(QAudioOutput* output); void setInput(GBAAudio* input);
protected: protected:
void run(); void run();
private: private:
QAudioOutput* m_audio; GBAAudio* m_input;
AudioDevice* m_device;
}; };
protected: protected:

View File

@ -24,21 +24,7 @@ void Window::selectROM() {
} }
void Window::setupAudio(GBAAudio* audio) { void Window::setupAudio(GBAAudio* audio) {
AudioDevice* device = new AudioDevice(audio, this); AudioDevice::Thread* thread = new AudioDevice::Thread(this);
AudioDevice::Thread* thread = new AudioDevice::Thread(device, this); thread->setInput(audio);
if (!m_audio) { thread->start(QThread::HighPriority);
QAudioFormat format;
format.setSampleRate(44100);
format.setChannelCount(2);
format.setSampleSize(16);
format.setCodec("audio/pcm");
format.setByteOrder(QAudioFormat::LittleEndian);
format.setSampleType(QAudioFormat::SignedInt);
m_audio = new QAudioOutput(format, this);
m_audio->setBufferSize(1024);
}
device->setFormat(m_audio->format());
thread->setOutput(m_audio);
thread->start();
} }

View File

@ -24,7 +24,6 @@ private slots:
void setupAudio(GBAAudio*); void setupAudio(GBAAudio*);
private: private:
QAudioOutput* m_audio;
GameController* m_controller; GameController* m_controller;
Display* m_display; Display* m_display;
}; };