@@ -1239,34 +1239,49 @@ int64_t CSound::Flip64Bits ( const int64_t iIn )
12391239// Windows Native MIDI support
12401240void CSound::MidiStart ()
12411241{
1242- midiPort = 0 ; // might want to make this settable, Windows allocates device numbers in order
1243-
1244- MMRESULT result = midiInOpen ( &hMidiIn, midiPort, (DWORD_PTR) MidiCallback, 0 , CALLBACK_FUNCTION );
1245-
1246- if ( result != MMSYSERR_NOERROR )
1242+ /* Get the number of MIDI In devices in this computer */
1243+ iMidiDevs = midiInGetNumDevs ();
1244+ if ( iMidiDevs > MAX_MIDI_DEVS )
12471245 {
1248- qWarning () << " ! Failed to open MIDI input device. Error code: " << result;
1249- hMidiIn = 0 ;
1250- return ;
1246+ iMidiDevs = MAX_MIDI_DEVS;
12511247 }
12521248
1253- result = midiInStart ( hMidiIn );
1254- if ( result != MMSYSERR_NOERROR )
1249+ // printf("Found %d MIDI device%s\n", iMidiDevs, iMidiDevs == 1 ? "" : "s");
1250+
1251+ // open all connected MIDI devices and set the callback function to handle incoming messages
1252+ for ( int i = 0 ; i < iMidiDevs; i++ )
12551253 {
1256- qWarning () << " ! Failed to start MIDI input. Error code: " << result;
1257- midiInClose ( hMidiIn );
1258- hMidiIn = 0 ;
1259- return ;
1254+ MMRESULT result = midiInOpen ( &hMidiIn[i], i, (DWORD_PTR) MidiCallback, 0 , CALLBACK_FUNCTION );
1255+
1256+ if ( result != MMSYSERR_NOERROR )
1257+ {
1258+ qWarning () << " ! Failed to open MIDI input device. Error code: " << result;
1259+ hMidiIn[i] = 0 ;
1260+ return ;
1261+ }
1262+
1263+ result = midiInStart ( hMidiIn[i] );
1264+
1265+ if ( result != MMSYSERR_NOERROR )
1266+ {
1267+ qWarning () << " ! Failed to start MIDI input. Error code: " << result;
1268+ midiInClose ( hMidiIn[i] );
1269+ hMidiIn[i] = 0 ;
1270+ return ;
1271+ }
12601272 }
12611273}
12621274
12631275void CSound::MidiStop ()
12641276{
12651277 // stop MIDI if running
1266- if ( hMidiIn ! = 0 )
1278+ for ( int i = 0 ; i < iMidiDevs; i++ )
12671279 {
1268- midiInStop ( hMidiIn );
1269- midiInClose ( hMidiIn );
1280+ if ( hMidiIn[i] != 0 )
1281+ {
1282+ midiInStop ( hMidiIn[i] );
1283+ midiInClose ( hMidiIn[i] );
1284+ }
12701285 }
12711286}
12721287
0 commit comments