From 3482b2fbffa173d58f8b19c41a1fd97edc1cadc5 Mon Sep 17 00:00:00 2001 From: bbond007 Date: Sun, 2 Dec 2018 23:52:31 -0500 Subject: [PATCH 1/9] Support for SoftSynth menu option --- menu.cpp | 104 ++++++++++++++++++++++++++++++++++++++++++------------- 1 file changed, 80 insertions(+), 24 deletions(-) diff --git a/menu.cpp b/menu.cpp index fcb6143..ebd0edb 100644 --- a/menu.cpp +++ b/menu.cpp @@ -164,9 +164,9 @@ const char *config_button_turbo_msg[] = { "OFF", "FAST", "MEDIUM", "SLOW" }; const char *config_button_turbo_choice_msg[] = { "A only", "B only", "A & B" }; const char *joy_button_map[] = { "RIGHT", "LEFT", "DOWN", "UP", "BUTTON 1", "BUTTON 2", "BUTTON 3", "BUTTON 4", "KBD TOGGLE", "BUTTON OSD" }; const char *config_stereo_msg[] = { "0%", "25%", "50%", "100%" }; -const char *config_uart_msg[] = { " None", " PPP", " Console", " USBMIDI", "USBMIDI-38K" }; +const char *config_uart_msg[] = { " None", " PPP", " Console", " MIDI", "MIDI-38K" }; const char *config_scaler_msg[] = { "Internal","Custom" }; - +const char *config_softsynth_msg[] = {" MUNT", "FluidSynth", " UDP"}; char joy_bnames[12][32]; int joy_bcount = 0; @@ -202,6 +202,44 @@ unsigned char fs_Options; unsigned char fs_MenuSelect; unsigned char fs_MenuCancel; +int GetUARTMode() +{ + struct stat filestat; + if (!stat("/tmp/uartmode1", &filestat)) return 1; + if (!stat("/tmp/uartmode2", &filestat)) return 2; + if (!stat("/tmp/uartmode3", &filestat)) return 3; + if (!stat("/tmp/uartmode4", &filestat)) return 4; + return 0; +} + +int GetSoftSynthMode() +{ + struct stat filestat; + if (!stat("/tmp/ML_MUNT", &filestat)) return 0; + if (!stat("/tmp/ML_FSYNTH", &filestat)) return 1; + if (!stat("/tmp/ML_UDP", &filestat)) return 2; + return 0; +} + +void SetSoftSynthMode(int mode) +{ + switch (mode) + { + case 0: system("echo 1 > /tmp/ML_MUNT"); + remove("/tmp/ML_FSYNTH"); + remove("/tmp/ML_UDP"); + break; + case 1: system("echo 1 > /tmp/ML_FSYNTH"); + remove("/tmp/ML_MUNT"); + remove("/tmp/ML_UDP"); + break; + case 2: system("echo 1 > /tmp/ML_UDP"); + remove("/tmp/ML_MUNT"); + remove("/tmp/ML_FSYNTH"); + break; + } +} + char* GetExt(char *ext) { static char extlist[32]; @@ -1281,7 +1319,7 @@ void HandleUI(void) { OsdSetSize(16); helptext = 0; - menumask = 0x7C7; + menumask = 0xfd7; //0X7C7 reboot_req = 0; OsdSetTitle("System", OSD_ARROW_LEFT); @@ -1292,16 +1330,15 @@ void HandleUI(void) m = 0; if (user_io_get_uart_mode()) { - int mode = 0; struct stat filestat; - if (!stat("/tmp/uartmode1", &filestat)) mode = 1; - if (!stat("/tmp/uartmode2", &filestat)) mode = 2; - if (!stat("/tmp/uartmode3", &filestat)) mode = 3; - if (!stat("/tmp/uartmode4", &filestat)) mode = 4; - + int mode = GetUARTMode(); menumask |= 8; - sprintf(s, " UART connection %s", config_uart_msg[mode]); - OsdWrite(3, s, menusub == 3, 0); + sprintf(s, " UART connection %s", config_uart_msg[mode]); + OsdWrite(3, s, menusub == 3, 0); + sprintf(s, " Softsynth %s", ((mode == 3 || mode == 4) + && stat("/dev/midi", &filestat) != 0)? + config_softsynth_msg[GetSoftSynthMode()]:" N/A"); + OsdWrite(4, s, menusub == 4 , 0); } else { @@ -1311,7 +1348,7 @@ void HandleUI(void) OsdWrite(m++, " Core \x16", menusub == 0, 0); OsdWrite(m++, " Define joystick buttons \x16", menusub == 1, 0); OsdWrite(m++, " Button/Key remap for game \x16", menusub == 2, 0); - OsdWrite(4, "", 0, 0); + //OsdWrite(4, "", 0, 0); m = 0; if (user_io_core_type() == CORE_TYPE_MINIMIG2) @@ -1395,17 +1432,12 @@ void HandleUI(void) menusub = 0; break; case 3: - { - int mode = 0; - struct stat filestat; - if (!stat("/tmp/uartmode1", &filestat)) mode = 1; - if (!stat("/tmp/uartmode2", &filestat)) mode = 2; - if (!stat("/tmp/uartmode3", &filestat)) mode = 3; - if (!stat("/tmp/uartmode4", &filestat)) mode = 4; - mode++; - if (mode == 3 || mode == 4) - if (stat("/dev/midi", &filestat) != 0) - mode = 0; + { + int mode = GetUARTMode(); + mode++; + //if (mode == 3 || mode == 4) + // if (stat("/dev/midi", &filestat) != 0) + // mode = 0; if (mode > 5) mode = 0; sprintf(s, "uartmode %d", mode); system(s); @@ -1415,10 +1447,34 @@ void HandleUI(void) FileSaveConfig(s, &mode, 4); } break; + case 4: + { + int mode = GetUARTMode(); + if(mode == 3 or mode == 4) + { + struct stat filestat; + int softsynth = GetSoftSynthMode(); + softsynth++; + //if(softsynth == 0 || softsynth == 1) + // if (stat("/dev/pcmC0D0p", &filestat) != 0) + // softsynth = 2; + if (softsynth > 2) softsynth = 0; + + SetSoftSynthMode(softsynth); + + sprintf(s, "uartmode %d", 0); + system(s); + sprintf(s, "uartmode %d", mode); + system(s); + } + menustate = MENU_8BIT_SYSTEM1; + } + break; + /* case 4: user_io_set_scaler_flt(user_io_get_scaler_flt() ? 0 : 1); menustate = MENU_8BIT_SYSTEM1; - break; + break; */ case 5: if (user_io_get_scaler_flt()) From 470ca18a1a112876a3f815d72fdf694d695e725c Mon Sep 17 00:00:00 2001 From: bbond007 Date: Tue, 11 Dec 2018 03:36:57 -0500 Subject: [PATCH 2/9] System Menu SoftSynth --- menu.cpp | 42 +++++++++++++++++++++--------------------- 1 file changed, 21 insertions(+), 21 deletions(-) diff --git a/menu.cpp b/menu.cpp index 427c528..8cdc3d4 100644 --- a/menu.cpp +++ b/menu.cpp @@ -1319,20 +1319,21 @@ void HandleUI(void) { OsdSetSize(16); helptext = 0; - menumask = 0xfd7; //0X7C7 + menumask = 0xf87; reboot_req = 0; - + OsdSetTitle("System", OSD_ARROW_LEFT); menustate = MENU_8BIT_SYSTEM2; parentstate = MENU_8BIT_SYSTEM1; s[0] = 0; m = 0; + if (user_io_get_uart_mode()) { struct stat filestat; int mode = GetUARTMode(); - menumask |= 8; + menumask |= 0x18; sprintf(s, " UART connection %s", config_uart_msg[mode]); OsdWrite(3, s, menusub == 3, 0); sprintf(s, " Softsynth %s", ((mode == 3 || mode == 4) @@ -1348,41 +1349,40 @@ void HandleUI(void) OsdWrite(m++, " Core \x16", menusub == 0, 0); OsdWrite(m++, " Define joystick buttons \x16", menusub == 1, 0); OsdWrite(m++, " Button/Key remap for game \x16", menusub == 2, 0); - //OsdWrite(4, "", 0, 0); m = 0; if (user_io_core_type() == CORE_TYPE_MINIMIG2) { m = 1; - menumask &= ~0x80; + menumask &= ~0x100; } OsdWrite(5); int n = 6; if (user_io_get_scaler_flt() >= 0) { - menumask |= 0x30; + menumask |= 0x60; OsdWrite(n++, " HDMI Scaler:"); sprintf(s, " \x16 Filter - %s", config_scaler_msg[user_io_get_scaler_flt() ? 1 : 0]); - OsdWrite(n++, s, menusub == 4); + OsdWrite(n++, s, menusub == 5); memset(s, 0, sizeof(s)); strcpy(s, " \x16 "); if (strlen(user_io_get_scaler_coeff())) strncat(s, user_io_get_scaler_coeff(), 22); else strcat(s, ""); - OsdWrite(n++, s, menusub == 5, !user_io_get_scaler_flt() || !S_ISDIR(getFileType(COEFF_DIR))); + OsdWrite(n++, s, menusub == 6, !user_io_get_scaler_flt() || !S_ISDIR(getFileType(COEFF_DIR))); OsdWrite(n++); } - OsdWrite(n++, m ? " Reset the core" : " Reset settings", menusub == 6, user_io_core_type() == CORE_TYPE_ARCHIE); - OsdWrite(n++, m ? "" : " Save settings", menusub == 7, 0); + OsdWrite(n++, m ? " Reset the core" : " Reset settings", menusub == 7, user_io_core_type() == CORE_TYPE_ARCHIE); + OsdWrite(n++, m ? "" : " Save settings", menusub == 8, 0); OsdWrite(n++); - OsdWrite(n++, " Reboot (hold \x16 cold reboot)", menusub == 8); - OsdWrite(n++, " About", menusub == 9); + OsdWrite(n++, " Reboot (hold \x16 cold reboot)", menusub == 9); + OsdWrite(n++, " About", menusub == 10); while(n < 15) OsdWrite(n++); - OsdWrite(15, STD_EXIT, menusub == 10); + OsdWrite(15, STD_EXIT, menusub == 11); sysinfo_timer = 0; } break; @@ -1470,13 +1470,13 @@ void HandleUI(void) menustate = MENU_8BIT_SYSTEM1; } break; - /* - case 4: + + case 5: user_io_set_scaler_flt(user_io_get_scaler_flt() ? 0 : 1); menustate = MENU_8BIT_SYSTEM1; - break; */ + break; - case 5: + case 6: if (user_io_get_scaler_flt()) { sprintf(SelectedPath, COEFF_DIR"/%s", user_io_get_scaler_coeff()); @@ -1484,7 +1484,7 @@ void HandleUI(void) } break; - case 6: + case 7: if (user_io_core_type() != CORE_TYPE_ARCHIE) { menustate = MENU_RESET1; @@ -1496,7 +1496,7 @@ void HandleUI(void) menusub = 0; } break; - case 7: + case 8: // Save settings menustate = MENU_8BIT_MAIN1; menusub = 0; @@ -1519,7 +1519,7 @@ void HandleUI(void) if (is_x86_core()) x86_config_save(); } break; - case 8: + case 9: { reboot_req = 1; @@ -1531,7 +1531,7 @@ void HandleUI(void) OsdWrite(8, p, menusub == 6, 0); } break; - case 9: + case 10: menustate = MENU_8BIT_ABOUT1; menusub = 0; break; From 2c303fe8c53b700ae0d95fb376e2f4f385f08322 Mon Sep 17 00:00:00 2001 From: bbond007 Date: Tue, 11 Dec 2018 03:46:37 -0500 Subject: [PATCH 3/9] System Menu SoftSynth --- menu.cpp | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/menu.cpp b/menu.cpp index 8cdc3d4..2f39038 100644 --- a/menu.cpp +++ b/menu.cpp @@ -1327,8 +1327,7 @@ void HandleUI(void) parentstate = MENU_8BIT_SYSTEM1; s[0] = 0; - m = 0; - + m = 0; if (user_io_get_uart_mode()) { struct stat filestat; From 18c030f6b5342cf3f4a9206f95f0101396acf539 Mon Sep 17 00:00:00 2001 From: bbond007 Date: Tue, 11 Dec 2018 04:05:07 -0500 Subject: [PATCH 4/9] System Menu SoftSynth --- menu.cpp | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/menu.cpp b/menu.cpp index 2f39038..f171c53 100644 --- a/menu.cpp +++ b/menu.cpp @@ -1335,10 +1335,14 @@ void HandleUI(void) menumask |= 0x18; sprintf(s, " UART connection %s", config_uart_msg[mode]); OsdWrite(3, s, menusub == 3, 0); - sprintf(s, " Softsynth %s", ((mode == 3 || mode == 4) - && stat("/dev/midi", &filestat) != 0)? - config_softsynth_msg[GetSoftSynthMode()]:" N/A"); - OsdWrite(4, s, menusub == 4 , 0); + + if((mode == 3 || mode == 4) && stat("/dev/midi", &filestat) != 0) + { + sprintf(s, " Softsynth %s", config_softsynth_msg[GetSoftSynthMode()]); + OsdWrite(4, s, menusub == 4 , 0); + } + else + OsdWrite(4," Softsynth N/A", menusub == 4 , 1); } else { From d220820f065cf93131af47f6088c07471df65ef6 Mon Sep 17 00:00:00 2001 From: bbond007 Date: Tue, 11 Dec 2018 05:15:11 -0500 Subject: [PATCH 5/9] System Menu SoftSynth fix --- menu.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/menu.cpp b/menu.cpp index f171c53..64e974e 100644 --- a/menu.cpp +++ b/menu.cpp @@ -1347,6 +1347,7 @@ void HandleUI(void) else { OsdWrite(m++, "", 0, 0); + OsdWrite(4, "", 0, 0); } OsdWrite(m++, " Core \x16", menusub == 0, 0); From 2dd0d37b7d0ff8a4cccd5fb0cfd6b79306b69d4f Mon Sep 17 00:00:00 2001 From: bbond007 Date: Wed, 12 Dec 2018 22:15:27 -0500 Subject: [PATCH 6/9] System Menu SoftSynth fix --- menu.cpp | 43 ++++++++++++++++++------------------------- 1 file changed, 18 insertions(+), 25 deletions(-) diff --git a/menu.cpp b/menu.cpp index 64e974e..2377cc0 100644 --- a/menu.cpp +++ b/menu.cpp @@ -166,7 +166,8 @@ const char *joy_button_map[] = { "RIGHT", "LEFT", "DOWN", "UP", "BUTTON 1", "BUT const char *config_stereo_msg[] = { "0%", "25%", "50%", "100%" }; const char *config_uart_msg[] = { " None", " PPP", " Console", " MIDI", "MIDI-38K" }; const char *config_scaler_msg[] = { "Internal","Custom" }; -const char *config_softsynth_msg[] = {" MUNT", "FluidSynth", " UDP"}; +const char *config_softsynth_msg[] = {" UDP", " MUNT", "FluidSynth"}; + char joy_bnames[12][32]; int joy_bcount = 0; @@ -215,9 +216,9 @@ int GetUARTMode() int GetSoftSynthMode() { struct stat filestat; - if (!stat("/tmp/ML_MUNT", &filestat)) return 0; - if (!stat("/tmp/ML_FSYNTH", &filestat)) return 1; - if (!stat("/tmp/ML_UDP", &filestat)) return 2; + if (!stat("/tmp/ML_UDP", &filestat)) return 0; + if (!stat("/tmp/ML_MUNT", &filestat)) return 1; + if (!stat("/tmp/ML_FSYNTH", &filestat)) return 2; return 0; } @@ -225,18 +226,18 @@ void SetSoftSynthMode(int mode) { switch (mode) { - case 0: system("echo 1 > /tmp/ML_MUNT"); + case 0: system("echo 1 > /tmp/ML_UDP"); + remove("/tmp/ML_MUNT"); + remove("/tmp/ML_FSYNTH"); + break; + case 1: system("echo 1 > /tmp/ML_MUNT"); remove("/tmp/ML_FSYNTH"); remove("/tmp/ML_UDP"); break; - case 1: system("echo 1 > /tmp/ML_FSYNTH"); + case 2: system("echo 1 > /tmp/ML_FSYNTH"); remove("/tmp/ML_MUNT"); remove("/tmp/ML_UDP"); break; - case 2: system("echo 1 > /tmp/ML_UDP"); - remove("/tmp/ML_MUNT"); - remove("/tmp/ML_FSYNTH"); - break; } } @@ -1335,15 +1336,9 @@ void HandleUI(void) menumask |= 0x18; sprintf(s, " UART connection %s", config_uart_msg[mode]); OsdWrite(3, s, menusub == 3, 0); - - if((mode == 3 || mode == 4) && stat("/dev/midi", &filestat) != 0) - { - sprintf(s, " Softsynth %s", config_softsynth_msg[GetSoftSynthMode()]); - OsdWrite(4, s, menusub == 4 , 0); - } - else - OsdWrite(4," Softsynth N/A", menusub == 4 , 1); - } + sprintf(s, " Softsynth %s", config_softsynth_msg[GetSoftSynthMode()]); + OsdWrite(4, s, menusub == 4 , (mode == 3 || mode == 4) && stat("/dev/midi", &filestat)?0:1); + } else { OsdWrite(m++, "", 0, 0); @@ -1458,14 +1453,12 @@ void HandleUI(void) { struct stat filestat; int softsynth = GetSoftSynthMode(); - softsynth++; - //if(softsynth == 0 || softsynth == 1) - // if (stat("/dev/pcmC0D0p", &filestat) != 0) - // softsynth = 2; + if ((stat("/dev/snd/pcmC0D0p", &filestat) == 0)) + softsynth++; + else + softsynth = 0; if (softsynth > 2) softsynth = 0; - SetSoftSynthMode(softsynth); - sprintf(s, "uartmode %d", 0); system(s); sprintf(s, "uartmode %d", mode); From 234d0fac96ff7c8623d434af5c20e5e3c5020949 Mon Sep 17 00:00:00 2001 From: bbond007 Date: Sun, 23 Dec 2018 00:38:01 -0500 Subject: [PATCH 7/9] change MIDI to MLINK --- menu.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/menu.cpp b/menu.cpp index 82324cf..dc4f9f2 100644 --- a/menu.cpp +++ b/menu.cpp @@ -166,7 +166,7 @@ const char *config_button_turbo_msg[] = { "OFF", "FAST", "MEDIUM", "SLOW" }; const char *config_button_turbo_choice_msg[] = { "A only", "B only", "A & B" }; const char *joy_button_map[] = { "RIGHT", "LEFT", "DOWN", "UP", "BUTTON 1", "BUTTON 2", "BUTTON 3", "BUTTON 4", "KBD TOGGLE", "BUTTON OSD" }; const char *config_stereo_msg[] = { "0%", "25%", "50%", "100%" }; -const char *config_uart_msg[] = { " None", " PPP", " Console", " MIDI", "MIDI-38K" }; +const char *config_uart_msg[] = { " None", " PPP", " Console", " MLINK", "MLINK-38K" }; const char *config_scaler_msg[] = { "Internal","Custom" }; const char *config_softsynth_msg[] = {" UDP", " MUNT", "FluidSynth"}; @@ -1347,7 +1347,7 @@ void HandleUI(void) struct stat filestat; int mode = GetUARTMode(); menumask |= 0x18; - sprintf(s, " UART connection %s", config_uart_msg[mode]); + sprintf(s, " UART connection %s", config_uart_msg[mode]); OsdWrite(3, s, menusub == 3, 0); sprintf(s, " Softsynth %s", config_softsynth_msg[GetSoftSynthMode()]); OsdWrite(4, s, menusub == 4 , (mode == 3 || mode == 4) && stat("/dev/midi", &filestat)?0:1); From 2d82e7f57a100a8716ea8ecc105e74493683eaee Mon Sep 17 00:00:00 2001 From: bbond007 Date: Fri, 28 Dec 2018 18:43:51 -0500 Subject: [PATCH 8/9] add MidiLink TCP option --- menu.cpp | 45 +++++++++++++++++++++++---------------------- 1 file changed, 23 insertions(+), 22 deletions(-) diff --git a/menu.cpp b/menu.cpp index dc4f9f2..fd9b946 100644 --- a/menu.cpp +++ b/menu.cpp @@ -168,7 +168,7 @@ const char *joy_button_map[] = { "RIGHT", "LEFT", "DOWN", "UP", "BUTTON 1", "BUT const char *config_stereo_msg[] = { "0%", "25%", "50%", "100%" }; const char *config_uart_msg[] = { " None", " PPP", " Console", " MLINK", "MLINK-38K" }; const char *config_scaler_msg[] = { "Internal","Custom" }; -const char *config_softsynth_msg[] = {" UDP", " MUNT", "FluidSynth"}; +const char *config_softsynth_msg[] = {" TCP", " UDP", " MUNT", "FluidSynth"}; char joy_bnames[12][32]; int joy_bcount = 0; @@ -225,30 +225,31 @@ int GetUARTMode() return 0; } -int GetSoftSynthMode() +int GetMidiLinkMode() { struct stat filestat; - if (!stat("/tmp/ML_UDP", &filestat)) return 0; - if (!stat("/tmp/ML_MUNT", &filestat)) return 1; - if (!stat("/tmp/ML_FSYNTH", &filestat)) return 2; + if (!stat("/tmp/ML_TCP", &filestat)) return 0; + if (!stat("/tmp/ML_UDP", &filestat)) return 1; + if (!stat("/tmp/ML_MUNT", &filestat)) return 2; + if (!stat("/tmp/ML_FSYNTH", &filestat)) return 3; return 0; } -void SetSoftSynthMode(int mode) +void SetMidiLinkMode(int mode) { + remove("/tmp/ML_FSYNTH"); + remove("/tmp/ML_MUNT"); + remove("/tmp/ML_UDP"); + remove("/tmp/ML_TCP"); switch (mode) { - case 0: system("echo 1 > /tmp/ML_UDP"); - remove("/tmp/ML_MUNT"); - remove("/tmp/ML_FSYNTH"); + case 0: system("echo 1 > /tmp/ML_TCP"); + break; + case 1: system("echo 1 > /tmp/ML_UDP"); break; - case 1: system("echo 1 > /tmp/ML_MUNT"); - remove("/tmp/ML_FSYNTH"); - remove("/tmp/ML_UDP"); + case 2: system("echo 1 > /tmp/ML_MUNT"); break; - case 2: system("echo 1 > /tmp/ML_FSYNTH"); - remove("/tmp/ML_MUNT"); - remove("/tmp/ML_UDP"); + case 3: system("echo 1 > /tmp/ML_FSYNTH"); break; } } @@ -1349,7 +1350,7 @@ void HandleUI(void) menumask |= 0x18; sprintf(s, " UART connection %s", config_uart_msg[mode]); OsdWrite(3, s, menusub == 3, 0); - sprintf(s, " Softsynth %s", config_softsynth_msg[GetSoftSynthMode()]); + sprintf(s, " MidiLink %s", config_softsynth_msg[GetMidiLinkMode()]); OsdWrite(4, s, menusub == 4 , (mode == 3 || mode == 4) && stat("/dev/midi", &filestat)?0:1); } else @@ -1467,13 +1468,13 @@ void HandleUI(void) if(mode == 3 or mode == 4) { struct stat filestat; - int softsynth = GetSoftSynthMode(); - if ((stat("/dev/snd/pcmC0D0p", &filestat) == 0)) - softsynth++; + int midilink = GetMidiLinkMode(); + if ((stat("/dev/snd/pcmC0D0p", &filestat) == 0) || midilink == 0) + midilink++; else - softsynth = 0; - if (softsynth > 2) softsynth = 0; - SetSoftSynthMode(softsynth); + midilink = 0; + if (midilink > 3) midilink = 0; + SetMidiLinkMode(midilink); sprintf(s, "uartmode %d", 0); system(s); sprintf(s, "uartmode %d", mode); From 77cd97a57807b2efc484b0018658f1bd30f751b9 Mon Sep 17 00:00:00 2001 From: bbond007 Date: Tue, 8 Jan 2019 18:40:38 -0500 Subject: [PATCH 9/9] check for /etc/asound.conf to enable MidiLink : MUNT/FSYNTH --- menu.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/menu.cpp b/menu.cpp index 2ee46e5..92e8c92 100644 --- a/menu.cpp +++ b/menu.cpp @@ -1448,7 +1448,9 @@ void HandleUI(void) { struct stat filestat; int midilink = GetMidiLinkMode(); - if ((stat("/dev/snd/pcmC0D0p", &filestat) == 0) || midilink == 0) + if ((stat("/dev/snd/pcmC0D0p", &filestat) == 0) || + (stat("/etc/asound.conf", &filestat) == 0 ) || + midilink == 0) midilink++; else midilink = 0;