diff --git a/src/audio/devices.cpp b/src/audio/devices.cpp index dfb71640..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]; @@ -37,6 +42,17 @@ void AudioDevices::SetDevices(ma_device_info *pPlayback, ma_uint32 playback_coun } } + // 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++) { @@ -52,6 +68,17 @@ void AudioDevices::SetDevices(ma_device_info *pPlayback, ma_uint32 playback_coun } } + // 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"); } 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