aboutsummaryrefslogtreecommitdiff
path: root/engines/sci/sound/midiparser_sci.cpp
AgeCommit message (Collapse)Author
2019-04-02SCI: implement SCI0 midi driver track initializationathrxx
I put this in an separate commit to make it easier to review/revert. I've tried to make this as minimum invasive as possible. That's why I put this in place of the former call to onNewSound(). SCI_0_LATE sound drivers (probably also SCI_0_EARLY, but I don't know that) do some midi track initialization, mostly resetting certain values and assigning voices (hardware channels) to midi parts. The information for this comes from the track header. The SCI0 version of the PC-98 sound driver relies on this code. The driver checks the channel flags with two different masks and assigns different sound channel types accordingly. This can't be done with the 0x4B event. Using the 0x4B event is sort of counter intuitive anyway, since only some of the SCI0 drivers even support that event. It seems that the only driver making use of onNewSound() was MT-32. I've adapted the driver to my changes, although I am quite sure that the sound will be unaffected. The only thing that the MT-32 driver does with the header information is checking whether a midi part should play or not and assign exactly one timbre (with exactly the same number) to that part if required.
2019-03-09JANITORIAL: Update all scummvm.org URLS to use httpsCameron Cawley
2017-10-04SCI: Set default MT-32 reverb before each soundRuud Klaver
Set the default reverb configuration present in either the MT-32 patch data or MT32.DRV of SCI0 games before playing each sound, as a previously played sound may have changed it. Also, do not perform a general reverb init, since the start of a sound will do that now. Closes gh-1023.
2017-06-18SCI: Switch SCI2 games to use Audio32Colin Snover
Upon investigation of Sound code across SCI32 games, it was determined that there are actually (at least) 3 different revisions, not just a single SCI2.1 version. This patch only changes the parts of Sound code that are relevant to the correct use of Audio32. Fixes Trac#9736, Trac#9756, Trac#9767, Trac#9791.
2017-04-23SCI32: Fix missing break statementColin Snover
2017-04-16SCI: Improve MidiParser_SCI robustness against bad sound resourcesColin Snover
1. KQ4 sound 104 has an extra 0xFC (MIDI Stop command/kEndOfTrack) at the end of the resource, which causes an out-of-bounds read because the filtering loop continues after the first 0xFC and unconditionally attempts to read 2 bytes (expecting there to always be a delta value + a command, whereas in this file there is only another kEndOfTrack command). This is corrected by exiting the filtering loop when a kEndOfTrack is encountered and there is not enough data remaining in the resource to continue reading. 2. KQ5 sound 699 is truncated, which causes the parser to attempt to read past the end of the resource. This is addressed by adding bounds checks that exit the mix loop early if there is no more data available to read. This allows truncated sounds to be played as far as possible (previously, trying to read truncated resources would result in a fatal error). 3. midiMixChannels allocates an arbitrary amount of raw memory for the mixed MIDI sequence, without performing any bounds checking when writing to this memory, potentially leading to a crash or silent corruption of adjacent memory. This is mitigated by using SciSpan instead of a raw pointer for the mixed data. Fixes Trac#9727.
2017-03-30SCI32: Hack around MIDI parser causing stuck harp animation in KQ7Colin Snover
The eventual proper fix for this is to change the current MIDI parser to work the same as in SSCI, but for now this workaround allows the game to continue. Fixes Trac#9696.
2017-03-27SCI: Implement bounds-checked reads of game resourcesColin Snover
2015-12-29SCI32: split up SCI2.1 into EARLY/MIDDLE/LATEMartin Kiewitz
- Detection works via signatures (couldn't find a better way) - new kString subcalls were introduced SCI2.1 LATE - kString now has signatures and is split via subcall table - kString fix, so that KQ7 doesn't crash, when starting a chapter - Sci2StringFunctionType removed, because no longer needed
2015-02-15SCI: Add more audio debugging outputWillem Jan Palenstijn
2015-02-15SCI: Fix version check for MIDI controller 4EWillem Jan Palenstijn
This is only supported since SCI1 middle, as verified with xmas1990, SCI1 mgoose, SQ4 floppy, LSL1, Jones floppy. Fixes missing sounds in Jones floppy.
2015-02-15SCI: Allow channel remapping from audio thread tooWillem Jan Palenstijn
2015-02-15SCI: Add debugging outputWillem Jan Palenstijn
2015-02-14SCI: Initialize voice counts in SCI1+Willem Jan Palenstijn
2014-02-18SCI: Make GPL headers consistent in themselves.Johannes Schickel
2014-01-27SCI: Fix breakage from f92df4c6Alyssa Milburn
2013-12-31SCI: Rewrite MIDI channel remappingWillem Jan Palenstijn
This adds MIDI state tracking to allow channels to be temporarily unmapped and later re-mapped when there are free device channels available again.
2013-09-22SCI: revert fix music start codeMartin Kiewitz
add workaround for eq2 the issue is known, but can't be properly fixed without rewriting the midiparser into a channel specific parser previous commit caused issues in kq5/french and others
2013-09-22SCI: fix music start code fixes eq2 bug #3037267Martin Kiewitz
we start at offset 10 for sound SCI1 games. This is hardcoded in the interpreter. Also removing not handling signals on tick 0. This fixes Eco Quest 2 / Gonzales dancing in room 530. Thanks to wjp for the help.
2013-09-21Merge branch 'master' into sci_midiparserWillem Jan Palenstijn
Conflicts: engines/sci/sound/midiparser_sci.cpp
2013-09-21SCI: fix dataInc signalling fixes bug #3035159m-kiewitz
we set signal in parseNextEvent on dataInc events, which then effectively triggered 2 cues through kDoSoundUpdateCues instead of one. Fixes Freddy Pharkas Ballad intro on floppy + demos
2013-09-21SCI: Handle !fireEvents in processEventWillem Jan Palenstijn
2013-09-21AUDIO: Simplify SCI inFastForward flag by moving it to MidiParserWillem Jan Palenstijn
2013-09-21SCI: Move MIDI event processing out of parseNextEventWillem Jan Palenstijn
2013-09-19SCI: Fix too strict assert triggering in LSL5Willem Jan Palenstijn
2013-09-16SCI: longbow intro night rider fix (with help of wjp) - seems to fix bug 3489094m-kiewitz
2013-09-15SCI: fix tabs in last commitm-kiewitz
2013-09-15SCI: disable signals when resuming music, so that debugger will work ↵m-kiewitz
properly for longbow intro
2013-07-19SCI: Add FIXMEWillem Jan Palenstijn
2013-07-08SCI: Rewrite the song loop comments in commit 6fa668e to make more senseFilippos Karapetis
2013-07-08SCI: Add some comments a possible TODO regarding song loopingFilippos Karapetis
2013-07-07SCI: Fix bug #3614566 - "LSL6: ScummVM locks up at Electro-Shock room"Filippos Karapetis
We now do the jumpToTick() for hold events after waiting for the delta of the current event, like we do for the signal set events. This keeps the fixes for the hold timings in QFG3, while not breaking LSL6. Many thanks to wjp for pinpointing the actual cause of the issue.
2013-04-16SCI: Don't suppress loop delta in SCI1 midiWillem Jan Palenstijn
This fixes bug #3293354.
2013-04-16SCI: Don't suppress end-of-track delta in SCI0 midiWillem Jan Palenstijn
This fixes the main part of bug #3487090. This seems to be a conversion error from SCI1's channel mixing to SCI0's channel filtering code.
2013-04-05SCI: Revert "Add a more generic solution for the problem found in bug #3605269"Willem Jan Palenstijn
This reverts commit c6320a28e483e52b489cae8e86774008e030492b. SSCI does not interpret signals on other channels than 15. Conflicts: engines/sci/sound/soundcmd.cpp
2013-04-02SCI: Add a more generic solution for the problem found in bug #3605269Filippos Karapetis
We now accept signals from all channels if channel 15 is missing. This is a very rare edge case, but our behavior is now somewhat closer to what the original interpreter seems to be doing. Mordack's appearance animation is now synced properly. The more generic workaround works for songs 1840 and 1843, but not for 1849, which is still problematic and we still resort to manually changing its dataInc selector
2012-09-07JANITORIAL: Remove underscores from MidiParser variable names.Alyssa Milburn
2011-11-20SCI: Reset parameters for all channels used by a song when it startsFilippos Karapetis
2011-08-28SCI: Fixed bug #3297883 - "SCI: LB1 (Amiga) - Intro stuck"Filippos Karapetis
2011-08-26SCI: Fixed bug #3311911 - "SCI: QFG3: Intro music abruptly stops"Filippos Karapetis
2011-05-12SCI: Added a warning for SCI0 games like in bug #3297881md5
LB1 Amiga doesn't contain MT-32 music tracks. Added a warning for this situation
2011-05-12GIT: Clean up: Suppress SVN tags, now uselessstrangerke
2010-11-27SCI: Removed bogus warningFilippos Karapetis
svn-id: r54512
2010-11-27SCI: Fix for bug #3119713 - "PQ2: song-specific reverb changes are ignored" ↵Filippos Karapetis
(thanks to waltervn) svn-id: r54509
2010-11-26SCI: Pull reverb default directly from control channel.Walter van Niftrik
svn-id: r54499
2010-11-26Fixed bug with r54485Filippos Karapetis
svn-id: r54488
2010-11-26SCI: set the reverb setting of the current song when a relevant event is ↵Filippos Karapetis
fired from the MIDI stream svn-id: r54485
2010-11-25SCI: Global reverb can't be 127. Some cleanupFilippos Karapetis
svn-id: r54482
2010-11-25SCI: implemented reverb handling and related functionalityFilippos Karapetis
svn-id: r54478
2010-11-24SCI: Some renaming and added several TODOs concerning reverbFilippos Karapetis
svn-id: r54461