Skip to content

Commit 91ca660

Browse files
committed
Fallback to default audio/MIDI backends if invalid one is set
Also shows the setup dialog in case of invalid audio backends
1 parent 3064f03 commit 91ca660

3 files changed

Lines changed: 134 additions & 1 deletion

File tree

include/Mixer.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -308,6 +308,9 @@ class EXPORT Mixer : public QObject
308308
void requestChangeInModel();
309309
void doneChangeInModel();
310310

311+
static bool isAudioDevNameValid(QString name);
312+
static bool isMidiDevNameValid(QString name);
313+
311314

312315
signals:
313316
void qualitySettingsChanged();

src/core/Mixer.cpp

Lines changed: 128 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -829,14 +829,138 @@ void Mixer::runChangesInModel()
829829
}
830830
}
831831

832+
bool Mixer::isAudioDevNameValid(QString name)
833+
{
834+
#ifdef LMMS_HAVE_SDL
835+
if (name == AudioSdl::name())
836+
{
837+
return true;
838+
}
839+
#endif
840+
841+
842+
#ifdef LMMS_HAVE_ALSA
843+
if (name == AudioAlsa::name())
844+
{
845+
return true;
846+
}
847+
#endif
848+
849+
850+
#ifdef LMMS_HAVE_PULSEAUDIO
851+
if (name == AudioPulseAudio::name())
852+
{
853+
return true;
854+
}
855+
#endif
856+
857+
858+
#ifdef LMMS_HAVE_OSS
859+
if (name == AudioOss::name())
860+
{
861+
return true;
862+
}
863+
#endif
864+
865+
#ifdef LMMS_HAVE_SNDIO
866+
if (name == AudioSndio::name())
867+
{
868+
return true;
869+
}
870+
#endif
871+
872+
#ifdef LMMS_HAVE_JACK
873+
if (name == AudioJack::name())
874+
{
875+
return true;
876+
}
877+
#endif
878+
879+
880+
#ifdef LMMS_HAVE_PORTAUDIO
881+
if (name == AudioPortAudio::name())
882+
{
883+
return true;
884+
}
885+
#endif
886+
887+
888+
#ifdef LMMS_HAVE_SOUNDIO
889+
if (name == AudioSoundIo::name())
890+
{
891+
return true;
892+
}
893+
#endif
832894

895+
if (name == AudioDummy::name())
896+
{
897+
return true;
898+
}
833899

900+
return false;
901+
}
902+
903+
bool Mixer::isMidiDevNameValid(QString name)
904+
{
905+
#ifdef LMMS_HAVE_ALSA
906+
if (name == MidiAlsaSeq::name() || name == MidiAlsaRaw::name())
907+
{
908+
return true;
909+
}
910+
#endif
911+
912+
#ifdef LMMS_HAVE_JACK
913+
if (name == MidiJack::name())
914+
{
915+
return true;
916+
}
917+
#endif
918+
919+
#ifdef LMMS_HAVE_OSS
920+
if (name == MidiOss::name())
921+
{
922+
return true;
923+
}
924+
#endif
925+
926+
#ifdef LMMS_HAVE_SNDIO
927+
if (name == MidiSndio::name())
928+
{
929+
return true;
930+
}
931+
#endif
932+
933+
#ifdef LMMS_BUILD_WIN32
934+
if (name == MidiWinMM::name())
935+
{
936+
return true;
937+
}
938+
#endif
939+
940+
#ifdef LMMS_BUILD_APPLE
941+
if (name == MidiApple::name())
942+
{
943+
return true;
944+
}
945+
#endif
946+
947+
if (name == MidiDummy::name())
948+
{
949+
return true;
950+
}
951+
952+
return false;
953+
}
834954

835955
AudioDevice * Mixer::tryAudioDevices()
836956
{
837957
bool success_ful = false;
838958
AudioDevice * dev = NULL;
839959
QString dev_name = ConfigManager::inst()->value( "mixer", "audiodev" );
960+
if( !isAudioDevNameValid( dev_name ) )
961+
{
962+
dev_name = "";
963+
}
840964

841965
m_audioDevStartFailed = false;
842966

@@ -980,6 +1104,10 @@ MidiClient * Mixer::tryMidiClients()
9801104
{
9811105
QString client_name = ConfigManager::inst()->value( "mixer",
9821106
"mididev" );
1107+
if( !isMidiDevNameValid( client_name ) )
1108+
{
1109+
client_name = "";
1110+
}
9831111

9841112
#ifdef LMMS_HAVE_ALSA
9851113
if( client_name == MidiAlsaSeq::name() || client_name == "" )

src/gui/MainWindow.cpp

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -590,7 +590,9 @@ void MainWindow::finalize()
590590
}
591591
// look whether mixer failed to start the audio device selected by the
592592
// user and is using AudioDummy as a fallback
593-
else if( Engine::mixer()->audioDevStartFailed() )
593+
// or the audio device is set to invalid one
594+
else if( Engine::mixer()->audioDevStartFailed() || !Mixer::isAudioDevNameValid(
595+
ConfigManager::inst()->value( "mixer", "audiodev" ) ) )
594596
{
595597
// if so, offer the audio settings section of the setup dialog
596598
SetupDialog sd( SetupDialog::AudioSettings );

0 commit comments

Comments
 (0)