From 8f6ac437ab391650637d1d159d029bf591e5f01d Mon Sep 17 00:00:00 2001 From: Connor McLaughlin Date: Sat, 11 Jan 2020 13:49:52 +1000 Subject: [PATCH] Frontends: Add cubeb as audio backend option --- src/core/types.h | 1 + src/duckstation-qt/qthostinterface.cpp | 23 +++++++++++++++++++---- src/duckstation/sdl_host_interface.cpp | 4 ++++ 3 files changed, 24 insertions(+), 4 deletions(-) diff --git a/src/core/types.h b/src/core/types.h index 1008d8a46..2d63e602d 100644 --- a/src/core/types.h +++ b/src/core/types.h @@ -53,6 +53,7 @@ enum class AudioBackend : u8 { Null, Default, + Cubeb, Count }; diff --git a/src/duckstation-qt/qthostinterface.cpp b/src/duckstation-qt/qthostinterface.cpp index e9afa029a..d2c33f819 100644 --- a/src/duckstation-qt/qthostinterface.cpp +++ b/src/duckstation-qt/qthostinterface.cpp @@ -27,7 +27,6 @@ QtHostInterface::QtHostInterface(QObject* parent) checkSettings(); createGameList(); doUpdateInputMap(); - createAudioStream(); createThread(); } @@ -445,9 +444,20 @@ void QtHostInterface::doBootSystem(QString initial_filename, QString initial_sav void QtHostInterface::createAudioStream() { - // Qt at least on Windows seems to want a buffer size of at least 8KB. - // m_audio_stream = QtAudioStream::Create(); - // if (!m_audio_stream->Reconfigure(AUDIO_SAMPLE_RATE, AUDIO_CHANNELS, AUDIO_BUFFER_SIZE, 4)) + switch (m_settings.audio_backend) + { + case AudioBackend::Default: + case AudioBackend::Cubeb: + m_audio_stream = AudioStream::CreateCubebAudioStream(); + break; + + case AudioBackend::Null: + default: + m_audio_stream = AudioStream::CreateNullAudioStream(); + break; + } + + if (!m_audio_stream->Reconfigure(AUDIO_SAMPLE_RATE, AUDIO_CHANNELS, AUDIO_BUFFER_SIZE, 4)) { qWarning() << "Failed to configure audio stream, falling back to null output"; @@ -482,6 +492,10 @@ void QtHostInterface::doStopThread() void QtHostInterface::threadEntryPoint() { m_worker_thread_event_loop = new QEventLoop(); + + createAudioStream(); + + // TODO: Event which flags the thread as ready while (!m_shutdown_flag.load()) { if (!m_system || m_paused) @@ -524,6 +538,7 @@ void QtHostInterface::threadEntryPoint() } m_system.reset(); + m_audio_stream.reset(); delete m_worker_thread_event_loop; m_worker_thread_event_loop = nullptr; diff --git a/src/duckstation/sdl_host_interface.cpp b/src/duckstation/sdl_host_interface.cpp index 5656e8c4e..59137e6f5 100644 --- a/src/duckstation/sdl_host_interface.cpp +++ b/src/duckstation/sdl_host_interface.cpp @@ -128,6 +128,10 @@ void SDLHostInterface::CreateAudioStream() m_audio_stream = AudioStream::CreateNullAudioStream(); break; + case AudioBackend::Cubeb: + m_audio_stream = AudioStream::CreateCubebAudioStream(); + break; + case AudioBackend::Default: default: m_audio_stream = std::make_unique();