diff options
-rw-r--r-- | engines/agi/sound_2gs.cpp | 43 |
1 files changed, 36 insertions, 7 deletions
diff --git a/engines/agi/sound_2gs.cpp b/engines/agi/sound_2gs.cpp index 65d60d392b..7d33f963bd 100644 --- a/engines/agi/sound_2gs.cpp +++ b/engines/agi/sound_2gs.cpp @@ -174,9 +174,6 @@ uint32 SoundGen2GS::generateOutput() { // triangle wave to modulate the frequency of both oscillators. // In Apple IIGS the vibrato and the envelope are updated at the // same time, so the vibrato speed depends on ENVELOPE_COEF. - // Note: None of the instruments in the current mappings from - // MIDI program number to instrument use vibrato, but some of - // the choices are possibly still wrong. // Advance oscillators int s0 = 0; @@ -411,6 +408,12 @@ void SoundGen2GS::midiNoteOn(int channel, int note, int velocity) { g->seg = 0; g->a = 0; + + // Print debug messages for instruments with swap mode or vibrato enabled + if (g->osc[0].swap || g->osc[1].swap) + debugC(2, kDebugLevelSound, "Detected swap mode in a playing instrument. This is rare and is not tested well..."); + if (i->vibDepth > 0) + debugC(2, kDebugLevelSound, "Detected vibrato in a playing instrument. Vibrato is not implemented, playing without..."); } double SoundGen2GS::midiKeyToFreq(int key, double finetune) { @@ -534,8 +537,8 @@ bool IIgsInstrumentHeader::read(Common::SeekableReadStream &stream, bool ignoreA // Parse the generator mode byte to separate fields. wave[i][k].halt = b & 0x1; // Bit 0 = HALT - wave[i][k].loop = !(b & 0x2); // Bit 1 = LOOP - wave[i][k].swap = (b & 0x3) == 0x3; // HALT|LOOP = SWAP + wave[i][k].loop = !(b & 0x2); // Bit 1 =!LOOP + wave[i][k].swap = (b & 0x6) == 0x6; // Bit 1&2 = SWAP wave[k][k].chn = (b >> 4) > 0; // Output channel (left or right) } @@ -634,12 +637,38 @@ static const IIgsMidiProgramMapping progToInstMappingV2 = { 6 }; -/** Older Apple IIGS AGI instrument set. Used only by Space Quest I (AGI v1.002). */ +// Older Apple IIGS AGI instrument set. Used only by Space Quest I (AGI v1.002). +// +// Instrument 0 uses vibrato. +// Instrument 1 uses vibrato. +// Instrument 3 uses vibrato. +// Instrument 5 has swap mode enabled for the first oscillator. +// Instruemnt 9 uses vibrato. +// Instrument 10 uses vibrato. +// Instrument 12 uses vibrato. +// Instrument 15 uses vibrato. +// Instrument 16 uses vibrato. +// Instrument 18 uses vibrato. static const IIgsInstrumentSetInfo instSetV1 = { 1192, 26, "7ee16bbc135171ffd6b9120cc7ff1af2", "edd3bf8905d9c238e02832b732fb2e18", &progToInstMappingV1 }; -/** Newer Apple IIGS AGI instrument set (AGI v1.003+). Used by all others than Space Quest I. */ +// Newer Apple IIGS AGI instrument set (AGI v1.003+). Used by all others than Space Quest I. +// +// Instrument 0 uses vibrato. +// Instrument 1 uses vibrato. +// Instrument 3 uses vibrato. +// Instrument 6 has swap mode enabled for the first oscillator. +// Instrument 11 uses vibrato. +// Instrument 12 uses vibrato. +// Instrument 14 uses vibrato. +// Instrument 17 uses vibrato. +// Instrument 18 uses vibrato. +// Instrument 20 uses vibrato. +// +// In KQ1 intro and in LSL intro one (and the same, or at least similar) +// instrument is using vibrato. In PQ intro there is also one instrument +// using vibrato. static const IIgsInstrumentSetInfo instSetV2 = { 1292, 28, "b7d428955bb90721996de1cbca25e768", "c05fb0b0e11deefab58bc68fbd2a3d07", &progToInstMappingV2 }; |