(svn r2960) - Fix: [ 1227779 ] Fix win32 midi volume level control which didn't work (glx)
authorDarkvater
Sat, 17 Sep 2005 13:15:16 +0000
changeset 2434 1134a371ebdd
parent 2433 7e826fbf74d3
child 2435 9b9d43988058
(svn r2960) - Fix: [ 1227779 ] Fix win32 midi volume level control which didn't work (glx)
music/win32_m.c
--- a/music/win32_m.c	Fri Sep 16 16:03:18 2005 +0000
+++ b/music/win32_m.c	Sat Sep 17 13:15:16 2005 +0000
@@ -12,6 +12,7 @@
 	bool playing;
 	int new_vol;
 	HANDLE wait_obj;
+	uint devid;
 	char start_song[260];
 } _midi;
 
@@ -72,7 +73,7 @@
 static void MidiIntSetVolume(int vol)
 {
 	uint v = (vol * 65535 / 127);
-	midiOutSetVolume((HMIDIOUT)-1, v + (v << 16));
+	midiOutSetVolume((HMIDIOUT)_midi.devid, v + (v << 16));
 }
 
 static bool MidiIntIsSongPlaying(void)
@@ -125,7 +126,9 @@
 
 static const char *Win32MidiStart(const char * const *parm)
 {
+	MIDIOUTCAPS midicaps;
 	DWORD threadId;
+	uint dev, nbdev;
 	char buf[16];
 
 	mciSendStringA("capability sequencer has audio", buf, lengthof(buf), 0);
@@ -134,6 +137,15 @@
 	memset(&_midi, 0, sizeof(_midi));
 	_midi.new_vol = -1;
 
+	/* Get midi device */
+	_midi.devid = MIDI_MAPPER;
+	for (dev = 0, nbdev = midiOutGetNumDevs(); dev < nbdev; dev++) {
+		if (midiOutGetDevCaps(dev, &midicaps, sizeof(midicaps)) == 0 && (midicaps.dwSupport & MIDICAPS_VOLUME)) {
+			_midi.devid = dev;
+			break;
+		}
+	}
+
 	if (CreateThread(NULL, 8192, MidiThread, 0, 0, &threadId) == NULL)
 		return "Failed to create thread";