Ticket #8284: gs-setup.diff

File gs-setup.diff, 2.7 KB (added by SF/logicdeluxe, 21 years ago)
  • scumm\imuse.cpp

    old new  
    11731173        if (result)
    11741174                error("IMuse initialization - %s", MidiDriver::getErrorName(result));
    11751175
     1176      if ((_midi_native) && (!_native_mt32)) {
     1177                // Special setup for General Synthesizer
     1178                byte buffer[11];
     1179               
     1180//TODO: use this one for GM games (SCUMM version = 6):
     1181                {
     1182                        // General MIDI reset (ensures compatibility on GS devices)
     1183                        memcpy(&buffer[0], "\x7E\x7F\x09\x01", 4);
     1184                        midi->sysEx(buffer, 4);
     1185                        g_system->delay_msecs (200);
     1186
     1187                        // standard percussion set
     1188                        midi->getPercussionChannel()->programChange(0x00);
     1189                }
     1190
     1191//TODO: use this one for MT-32 games without GM support (SCUMM version < 6):
     1192                {
     1193                        // There are different GS SysEx manufacturer id's.
     1194                        // That's why the GS data has to be sent twice with different id's.
     1195
     1196                        // Roland GS SysEx
     1197                        memcpy(&buffer[0], "\x41\x10\x42\x12\x40", 5);
     1198               
     1199                        // GS Reset
     1200                        memcpy(&buffer[5], "\x00\x7F\x00\x41", 4);
     1201                        midi->sysEx(buffer, 8);
     1202                        g_system->delay_msecs (200);
     1203
     1204                        // Setup reverb and chorus as used with MT-32
     1205                        memcpy(&buffer[5], "\x01\x30\x00\x0f", 4);
     1206                        midi->sysEx(buffer, 8);
     1207                        memcpy(&buffer[5], "\x01\x34\x40\x4b", 4);
     1208                        midi->sysEx(buffer, 8);
     1209                        memcpy(&buffer[5], "\x01\x3a\x10\x75", 4);
     1210                        midi->sysEx(buffer, 8);
     1211
     1212
     1213                        // Dream/Terratec GS SysEx
     1214                        memcpy(&buffer[0], "\x00\x20\x00\x00\x00\x12\x40", 7);
     1215               
     1216                        // GS Reset
     1217                        memcpy(&buffer[7], "\x00\x7F\x00\x41", 4);
     1218                        midi->sysEx(buffer, 11);
     1219                        g_system->delay_msecs (200);
     1220
     1221                        // Setup reverb and chorus as used with MT-32
     1222                        memcpy(&buffer[7], "\x01\x30\x00\x0f", 4);
     1223                        midi->sysEx(buffer, 11);
     1224                        memcpy(&buffer[7], "\x01\x34\x40\x4b", 4);
     1225                        midi->sysEx(buffer, 11);
     1226                        memcpy(&buffer[7], "\x01\x3a\x10\x75", 4);
     1227                        midi->sysEx(buffer, 11);
     1228
     1229       
     1230                        // Activate MT-32 compatible percussion set
     1231                        midi->getPercussionChannel()->programChange(0x7f);
     1232                }
     1233
     1234                // Set master volume
     1235                memcpy(&buffer[0], "\x7F\x7F\x04\x01\x00\x7F", 6);
     1236                midi->sysEx(buffer, 6);
     1237        }
     1238
    11761239        // Connect to the driver's timer
    11771240        midi->setTimerCallback(midi, &IMuseInternal::midiTimerCallback);
    11781241}
  • scumm\imuse_player.cpp

    old new  
    256256
    257257        case 0x9: // Key On
    258258                if (!_scanning) {
    259                         if (_isMT32 && !_se->isNativeMT32())
    260                                 param2 = (((param2 * 3) >> 2) + 32) & 0x7F;
     259                        if (_isMT32 && !_se->isNativeMT32() && param2)
     260                                param2 = (param2 << 1) / 3 + 43;
    261261                        if ((part = getPart(chan)) != 0)
    262262                                part->noteOn(param1, param2);
    263263                } else {