[Scummvm-cvs-logs] CVS: scummvm/scumm imuse.cpp,1.85,1.86
Jamieson Christian
jamieson630 at users.sourceforge.net
Thu Nov 21 14:08:07 CET 2002
Update of /cvsroot/scummvm/scummvm/scumm
In directory sc8-pr-cvs1:/tmp/cvs-serv19320/scummvm/scumm
Modified Files:
imuse.cpp
Log Message:
Fixed Adlib instruments not getting initialized in certain cases.
Index: imuse.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/scumm/imuse.cpp,v
retrieving revision 1.85
retrieving revision 1.86
diff -u -d -r1.85 -r1.86
--- imuse.cpp 21 Nov 2002 19:05:35 -0000 1.85
+++ imuse.cpp 21 Nov 2002 22:07:40 -0000 1.86
@@ -666,6 +666,7 @@
MidiDriver *_md;
MidiChannelGM _midi_channels[16];
+ Instrument _part_instr[32]; // Adlib custom instruments
Instrument _glob_instr[32]; // Adlib custom instruments
byte _midi_program_last[16];
@@ -5045,11 +5046,9 @@
void IMuseGM::part_set_instrument (Part *part, Instrument *instr)
{
- if (!part->_mc)
- update_pris();
- if (!part->_mc)
- return;
- _md->sysEx_customInstrument (part->_mc->gm()->_chan, 'ADL ', (byte *)instr);
+ Instrument *i = &_part_instr[part->_slot];
+ memcpy(i, instr, sizeof(Instrument));
+ part->changed (pcProgram);
}
void IMuseGM::set_instrument(uint slot, byte *data)
@@ -5101,18 +5100,26 @@
if (what & pcEffectLevel)
midiEffectLevel(mc->_chan, part->_effect_level);
- if (what & pcProgram && part->_program < 128) {
+ if (what & pcProgram) {
if (part->_player->_isGM) {
- _midi_program_last [part->_chan] = part->_program;
- if (part->_bank) {
- midiControl0(mc->_chan, part->_bank);
- midiProgram(mc->_chan, part->_program, part->_player->_mt32emulate);
- midiControl0(mc->_chan, 0);
- } else {
- midiProgram(mc->_chan, part->_program, part->_player->_mt32emulate);
+ if (part->_program < 128) {
+ _midi_program_last [part->_chan] = part->_program;
+ if (part->_bank) {
+ midiControl0(mc->_chan, part->_bank);
+ midiProgram(mc->_chan, part->_program, part->_player->_mt32emulate);
+ midiControl0(mc->_chan, 0);
+ } else {
+ midiProgram(mc->_chan, part->_program, part->_player->_mt32emulate);
+ }
+ }
+ } else {
+ debug (0, "Setting instrument (%d)", (int) _part_instr [part->_slot].oplvl_1);
+ if (_part_instr [part->_slot].oplvl_1 != 0) {
+ _md->sysEx_customInstrument (mc->_chan, 'ADL ', (byte *) (&_part_instr [part->_slot]));
+ } else if (part->_program < 32) {
+ memcpy (&_part_instr [part->_slot], &_glob_instr[part->_program], sizeof (Instrument));
+ _md->sysEx_customInstrument (mc->_chan, 'ADL ', (byte *) (&_part_instr [part->_slot]));
}
- } else if (part->_program < 32) {
- part_set_instrument(part, &_glob_instr[part->_program]);
}
}
More information about the Scummvm-git-logs
mailing list