diff --git a/src/blackmisc/audio/audioutils.cpp b/src/blackmisc/audio/audioutils.cpp index 57b09941d..6fc1c825d 100644 --- a/src/blackmisc/audio/audioutils.cpp +++ b/src/blackmisc/audio/audioutils.cpp @@ -11,6 +11,7 @@ #include #include +#include using namespace BlackConfig; @@ -23,5 +24,16 @@ namespace BlackMisc if (!CBuildConfig::isRunningOnWindowsNtPlatform()) { return false; } return QProcess::startDetached("SndVol.exe"); } + + void initWindowsAudioDevices() + { + if (!CBuildConfig::isRunningOnWindowsNtPlatform()) { return; } + + // force init of device lists + // see https://discordapp.com/channels/539048679160676382/539925070550794240/676418182038421534 + QAudioDeviceInfo::availableDevices(QAudio::AudioInput); + QAudioDeviceInfo::availableDevices(QAudio::AudioOutput); + } + } // ns } // ns diff --git a/src/blackmisc/audio/audioutils.h b/src/blackmisc/audio/audioutils.h index 05358ae46..58344c177 100644 --- a/src/blackmisc/audio/audioutils.h +++ b/src/blackmisc/audio/audioutils.h @@ -19,6 +19,10 @@ namespace BlackMisc { //! Start the Windows mixer BLACKMISC_EXPORT bool startWindowsMixer(); + + //! On windows init the audio devices + //! \remarks workaround for WSAPI driver crashes, hoping that upfront init already sets global vars. etc. + BLACKMISC_EXPORT void initWindowsAudioDevices(); } } diff --git a/src/swiftcore/main.cpp b/src/swiftcore/main.cpp index 44bda373d..0e6bfc2a4 100644 --- a/src/swiftcore/main.cpp +++ b/src/swiftcore/main.cpp @@ -8,6 +8,7 @@ #include "blackcore/corefacadeconfig.h" #include "blackgui/guiapplication.h" +#include "blackmisc/audio/audioutils.h" #include "blackmisc/icons.h" #include "blackmisc/directoryutils.h" #include "blackmisc/crashhandler.h" @@ -21,6 +22,7 @@ #include using namespace BlackMisc; +using namespace BlackMisc::Audio; using namespace BlackCore; using namespace BlackGui; @@ -31,6 +33,7 @@ int main(int argc, char *argv[]) QApplication qa(argc, argv); Q_UNUSED(qa) // init of qa is required, but qa not used + initWindowsAudioDevices(); CCrashHandler::instance()->init(); CGuiApplication a(CApplicationInfo::swiftCore(), CApplicationInfo::PilotClientCore, CIcons::swiftCore24()); a.addWindowStateOption(); diff --git a/src/swiftguistandard/main.cpp b/src/swiftguistandard/main.cpp index 6533bd548..86eed8d33 100644 --- a/src/swiftguistandard/main.cpp +++ b/src/swiftguistandard/main.cpp @@ -8,6 +8,7 @@ #include "blackgui/enableforframelesswindow.h" #include "blackgui/guiapplication.h" +#include "blackmisc/audio/audioutils.h" #include "blackmisc/directoryutils.h" #include "blackmisc/crashhandler.h" #include "blackmisc/appstarttime.h" @@ -19,6 +20,7 @@ using namespace BlackGui; using namespace BlackMisc; +using namespace BlackMisc::Audio; using namespace BlackCore; int main(int argc, char *argv[]) @@ -28,6 +30,7 @@ int main(int argc, char *argv[]) QApplication qa(argc, argv); Q_UNUSED(qa) // application init needed + initWindowsAudioDevices(); CCrashHandler::instance()->init(); CSwiftGuiStdApplication a; // application with contexts a.setSignalStartupAutomatically(false); // application will signal startup on its own