From b17a216fec0ab8d78f953522e1592881cc92b80f Mon Sep 17 00:00:00 2001 From: izzy Meyer Date: Thu, 26 Mar 2026 13:13:09 -0500 Subject: [PATCH 1/3] update miniaudio submodule --- subprojects/miniaudio | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/subprojects/miniaudio b/subprojects/miniaudio index 350784a9..9634bedb 160000 --- a/subprojects/miniaudio +++ b/subprojects/miniaudio @@ -1 +1 @@ -Subproject commit 350784a9467a79d0fa65802132668e5afbcf3777 +Subproject commit 9634bedb5b5a2ca38c1ee7108a9358a4e233f14d From bc58bf79b57c500a9eb3322b42a7939467de3a45 Mon Sep 17 00:00:00 2001 From: izzy Meyer Date: Thu, 26 Mar 2026 13:43:49 -0500 Subject: [PATCH 2/3] grab fallback for non-default-having audio backends --- src/audio/devices.cpp | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/src/audio/devices.cpp b/src/audio/devices.cpp index dfb71640..4fa2f9fb 100644 --- a/src/audio/devices.cpp +++ b/src/audio/devices.cpp @@ -31,9 +31,11 @@ void AudioDevices::SetDevices(ma_device_info *pPlayback, ma_uint32 playback_coun row[m_playback_columns.Name] = d.name; row[m_playback_columns.DeviceID] = d.id; - if (d.isDefault) { - m_default_playback_iter = row; - SetActivePlaybackDevice(row); + // some platforms don't have a default playback device, so fallback + if (!m_default_playback_iter && !m_playback->children().empty()) { + auto first = m_playback->children().begin(); + m_default_playback_iter = first; + SetActivePlaybackDevice(first); } } @@ -46,9 +48,11 @@ void AudioDevices::SetDevices(ma_device_info *pPlayback, ma_uint32 playback_coun row[m_capture_columns.Name] = d.name; row[m_capture_columns.DeviceID] = d.id; - if (d.isDefault) { - m_default_capture_iter = row; - SetActiveCaptureDevice(row); + // some platforms don't have a default capture device, so fallback + if (!m_default_capture_iter && !m_capture->children().empty()) { + auto first = m_capture->children().begin(); + m_default_capture_iter = first; + SetActiveCaptureDevice(first); } } From fedf119268c9aa247bea52c7057993fee913dd89 Mon Sep 17 00:00:00 2001 From: izzy Meyer Date: Thu, 26 Mar 2026 14:55:21 -0500 Subject: [PATCH 3/3] fallback correctly rather than overriding --- src/audio/devices.cpp | 43 +++++++++++++++++++++++++++++++++---------- 1 file changed, 33 insertions(+), 10 deletions(-) diff --git a/src/audio/devices.cpp b/src/audio/devices.cpp index 4fa2f9fb..bc5bd767 100644 --- a/src/audio/devices.cpp +++ b/src/audio/devices.cpp @@ -23,6 +23,11 @@ Glib::RefPtr AudioDevices::GetCaptureDeviceModel() { void AudioDevices::SetDevices(ma_device_info *pPlayback, ma_uint32 playback_count, ma_device_info *pCapture, ma_uint32 capture_count) { m_playback->clear(); + // reset state + m_default_playback_iter = {}; + m_active_playback_iter = {}; + m_default_capture_iter = {}; + m_active_capture_iter = {}; for (ma_uint32 i = 0; i < playback_count; i++) { auto &d = pPlayback[i]; @@ -31,14 +36,23 @@ void AudioDevices::SetDevices(ma_device_info *pPlayback, ma_uint32 playback_coun row[m_playback_columns.Name] = d.name; row[m_playback_columns.DeviceID] = d.id; - // some platforms don't have a default playback device, so fallback - if (!m_default_playback_iter && !m_playback->children().empty()) { - auto first = m_playback->children().begin(); - m_default_playback_iter = first; - SetActivePlaybackDevice(first); + if (d.isDefault) { + m_default_playback_iter = row; + SetActivePlaybackDevice(row); } } + // some platforms don't have a default playback device, so fallback + if (!m_default_playback_iter && !m_playback->children().empty()) { + auto first = m_playback->children().begin(); + m_default_playback_iter = first; + SetActivePlaybackDevice(first); + + spdlog::get("audio")->warn( + "No default playback device reported; falling back to first device." + ); + } + m_capture->clear(); for (ma_uint32 i = 0; i < capture_count; i++) { @@ -48,14 +62,23 @@ void AudioDevices::SetDevices(ma_device_info *pPlayback, ma_uint32 playback_coun row[m_capture_columns.Name] = d.name; row[m_capture_columns.DeviceID] = d.id; - // some platforms don't have a default capture device, so fallback - if (!m_default_capture_iter && !m_capture->children().empty()) { - auto first = m_capture->children().begin(); - m_default_capture_iter = first; - SetActiveCaptureDevice(first); + if (d.isDefault) { + m_default_capture_iter = row; + SetActiveCaptureDevice(row); } } + // some platforms don't have a default capture device, so fallback + if (!m_default_capture_iter && !m_capture->children().empty()) { + auto first = m_capture->children().begin(); + m_default_capture_iter = first; + SetActiveCaptureDevice(first); + + spdlog::get("audio")->warn( + "No default capture device reported; falling back to first device." + ); + } + if (!m_default_playback_iter) { spdlog::get("audio")->warn("No default playback device found"); }