winealsa.drv: add missing offset of pitch bender in midi input

Ralf Beck musical_snake at gmx.de
Wed May 23 12:11:21 CDT 2007


-------------- next part --------------
--- a/dlls/winealsa.drv/midi.c	2007-05-11 19:35:02.000000000 +0200
+++ b/dlls/winealsa.drv/midi.c	2007-05-23 17:34:57.000000000 +0200
@@ -319,6 +319,7 @@ static DWORD WINAPI midRecThread(LPVOID 
 		FIXME("Unexpected event received, type = %x from %d:%d\n", ev->type, ev->source.client, ev->source.port);
 	    else {
 		DWORD dwTime, toSend = 0;
+		int value = 0;
 		/* FIXME: Should use ev->time instead for better accuracy */
 		dwTime = GetTickCount() - MidiInDev[wDevID].startTime;
 		TRACE("Event received, type = %x, device = %d\n", ev->type, wDevID);
@@ -337,7 +338,8 @@ static DWORD WINAPI midRecThread(LPVOID 
 		    toSend = (ev->data.control.value << 16) | (ev->data.control.param << 8) | MIDI_CMD_CONTROL | ev->data.control.channel;
 		    break;
 		case SND_SEQ_EVENT_PITCHBEND:
-		    toSend = (ev->data.control.value << 16) | (ev->data.control.param << 8) | MIDI_CMD_BENDER | ev->data.control.channel;
+		    value = ev->data.control.value + 0x2000;
+		    toSend = (((value >> 7) & 0x7f) << 16) | ((value & 0x7f) << 8) | MIDI_CMD_BENDER | ev->data.control.channel;
 		    break;
 		case SND_SEQ_EVENT_PGMCHANGE:
 		    toSend = (ev->data.control.value << 16) | (ev->data.control.param << 8) | MIDI_CMD_PGM_CHANGE | ev->data.control.channel;


More information about the wine-patches mailing list