Ticket #3073: imuse_fix.diff
File imuse_fix.diff, 3.0 KB (added by , 18 years ago) |
---|
-
engines/scumm/imuse/sysex_scumm.cpp
106 106 ++p; // Skip hardware type 107 107 part = player->getPart(a); 108 108 if (part) { 109 if (len == 6 3) {110 player->decode_sysex_bytes(p, buf, len - 3);109 if (len == 62) { 110 player->decode_sysex_bytes(p, buf, len - 2); 111 111 part->set_instrument((byte *)buf); 112 112 } else { 113 // SPK tracks have len == 4 9here, and are not supported113 // SPK tracks have len == 48 here, and are not supported 114 114 part->programChange(254); // Must be invalid, but not 255 (which is reserved) 115 115 } 116 116 } … … 119 119 case 17: // Adlib instrument definition(Global) 120 120 p += 2; // Skip hardware type and... whatever came right before it 121 121 a = *p++; 122 player->decode_sysex_bytes(p, buf, len - 4);122 player->decode_sysex_bytes(p, buf, len - 3); 123 123 se->setGlobalAdlibInstrument(a, buf); 124 124 break; 125 125 126 126 case 33: // Parameter adjust 127 127 a = *p++ & 0x0F; 128 128 ++p; // Skip hardware type 129 player->decode_sysex_bytes(p, buf, len - 3);129 player->decode_sysex_bytes(p, buf, len - 2); 130 130 part = player->getPart(a); 131 131 if (part) 132 132 part->set_param(READ_BE_UINT16(buf), READ_BE_UINT16(buf + 2)); … … 135 135 case 48: // Hook - jump 136 136 if (player->_scanning) 137 137 break; 138 player->decode_sysex_bytes(p + 1, buf, len - 2);138 player->decode_sysex_bytes(p + 1, buf, len - 1); 139 139 player->maybe_jump(buf[0], READ_BE_UINT16(buf + 1), READ_BE_UINT16(buf + 3), READ_BE_UINT16(buf + 5)); 140 140 break; 141 141 142 142 case 49: // Hook - global transpose 143 player->decode_sysex_bytes(p + 1, buf, len - 2);143 player->decode_sysex_bytes(p + 1, buf, len - 1); 144 144 player->maybe_set_transpose(buf); 145 145 break; 146 146 147 147 case 50: // Hook - part on/off 148 148 buf[0] = *p++ & 0x0F; 149 player->decode_sysex_bytes(p, buf + 1, len - 2);149 player->decode_sysex_bytes(p, buf + 1, len - 1); 150 150 player->maybe_part_onoff(buf); 151 151 break; 152 152 153 153 case 51: // Hook - set volume 154 154 buf[0] = *p++ & 0x0F; 155 player->decode_sysex_bytes(p, buf + 1, len - 2);155 player->decode_sysex_bytes(p, buf + 1, len - 1); 156 156 player->maybe_set_volume(buf); 157 157 break; 158 158 159 159 case 52: // Hook - set program 160 160 buf[0] = *p++ & 0x0F; 161 player->decode_sysex_bytes(p, buf + 1, len - 2);161 player->decode_sysex_bytes(p, buf + 1, len - 1); 162 162 player->maybe_set_program(buf); 163 163 break; 164 164 165 165 case 53: // Hook - set transpose 166 166 buf[0] = *p++ & 0x0F; 167 player->decode_sysex_bytes(p, buf + 1, len - 2);167 player->decode_sysex_bytes(p, buf + 1, len - 1); 168 168 player->maybe_set_transpose_part(buf); 169 169 break; 170 170 171 171 case 64: // Marker 172 172 p++; 173 len -= 2;173 len--; 174 174 while (len--) { 175 175 se->handle_marker(player->_id, *p++); 176 176 } 177 177 break; 178 178 179 179 case 80: // Loop 180 player->decode_sysex_bytes(p + 1, buf, len - 2);180 player->decode_sysex_bytes(p + 1, buf, len - 1); 181 181 player->setLoop 182 182 (READ_BE_UINT16(buf), READ_BE_UINT16(buf + 2), 183 183 READ_BE_UINT16(buf + 4), READ_BE_UINT16(buf + 6),