aboutsummaryrefslogtreecommitdiff
path: root/engines/sci/resource_audio.cpp
AgeCommit message (Collapse)Author
2019-05-27SCI: Fix MSVC warningsFilippos Karapetis
- Remove unused parameters - Initialize potentially uninitialized variables - Use Common::String instead of a fixed buffer - Remove redundant parentheses - Change float suffix to be uppercase - Fix spacing - Fix integer left shifts with boolean variables - Fix potential division by zero - Fix missing breaks
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.
2018-12-28SCI32: Fix QFG4 Rusalka flowers dialogueVhati
Fixes mixed up text/audio when giving her flowers, bug #10849
2018-12-23SCI32: Fix QFG4CD Look Grate missing audiosluicebox
Fixes a broken message due to wrong audio tuple, bug #10848
2018-12-02SCI: Add some TODOs for better handling of wrong / missing resourcesFilippos Karapetis
2018-12-02SCI: Fix LB2 Yvette/Tut missing sync resource (#1373)sluicebox
Fixes a missing resource in the game. bug #9956
2018-11-28SCI32: Fix GK1 fortune teller messages, bug #10819 (#1423)sluicebox
2017-09-20SCI: Fix detection of end of audio map & entry size in SCI32Colin Snover
Torin RU map 38140 has an unusual terminator entry; instead of a normal terminating entry of 11 FFs, its terminating entry is 03 FF FF FF FF C4 36 01 FF FF FF. So, two changes are made: 1. The end-of-map check is now the same as in SSCI1.1+ and only checks that the final byte of the Audio36 tuple is 0xFF, instead of the entire tuple; 2. The unneeded entry size heuristic has been turned off for all SCI32 games. A quick check of the English versions of LB2CD, EQ1CD, SQ4CD, and KQ6CD, as well as all English SCI32 games, indicates that this approach seems to be working correctly. Fixes Trac#10188.
2017-09-03SCI32: Ignore bad audio map entries on GK2 DE CD 6Colin Snover
This patch also cleans up the GK2 audio map blacklisting code to reduce the number of redundant checks being made during audio map processing. Fixes Trac#10172.
2017-08-26SCI32: Ignore invalid audio maps in Phant2 FRColin Snover
Fixes Trac#10049.
2017-08-26SCI32: Ignore invalid audio map in GK2 DEColin Snover
Fixes Trac#10143.
2017-08-26SCI32: Limit existing bad audio map resource skips by languageColin Snover
Since audio maps change when game speech is localised, it makes sense to limit audio map skips by language until it turns out that the same problem exists in more than one language release, so we do not accidentally skip a map that is bad in one language, but OK in another language.
2017-07-24SCI32: Fix ResourceManager::changeAudioDirectoryColin Snover
Fixes Trac#9577.
2017-07-23SCI: Keep audio maps out of the LRU cacheColin Snover
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-06-08SCI32: Fix wave resource patch offsetColin Snover
This bug was only reproducible when loading a game using the multi-disc RESSFX.00x bundles. Fixes Trac#9832.
2017-05-13SCI: Dispose uncached volume file streamsColin Snover
The stream returned by a call to ResourceManager::getVolumeFile either MUST (when returning an I/O stream from a Common::FSNode) or must NOT (when returning a Common::File *) be deleted by the caller, depending upon some internal implementation details of ResourceSource that should never have been exposed to callers. FSNode streams that should have been deleted were not being deleted all the time, which leaked and eventually caused ScummVM to run out of FDs. This commit improves this situation by shielding callers from these internal details by centralizing the destruction logic in one place, so FSNode read streams stop being leaked and callers no longer need to know stuff about the internals of the ResourceSource they are trying to read in order to avoid leaking or breaking the volume file cache. Fixes Trac#9782.
2017-05-10SCI: Fix reading of Rave data from compressed KQ6 audio volumesColin Snover
Refs Trac#9764.
2017-05-10SCI: Fix support for ScummVM compressed audio volumesColin Snover
The runtime code for this had previously relied on hot patching volume file offsets at the moment that a resource was loaded, instead of correcting file offsets when reading audio maps. The code added for sanity checking audio volumes started to report warnings because the offsets being received were for the original uncompressed audio volume, which (naturally) is larger than the compressed audio volume. This commit also deduplicates code between addResource and updateResource, and tweaks a validation-related error message for improved clarity. Fixes Trac#9764.
2017-05-08SCI: Fix unnecessary copy of Common::StringColin Snover
2017-05-08SCI: Improve detection and reporting of resource errorsColin Snover
Simple assertions in the resource manager are not sufficient to track down resource corruption issues, and some error conditions that were being checked already were either ignored or only raised as warnings that casual users would be unlikely to see. Ideally, error handling in ResourceManager would be improved to the point where errors would correctly propagate out of it (so the warning dialogue could be displayed from outside), but right now error codes are dropped all over the place, and it would take more effort to fix that without much benefit for the current situation. If/until someone has the energy to fix that, the warning dialogue is simply shown from ResourceManager::scanNewSources. Refs Trac#9764.
2017-03-30SCI32: Skip bad map 405 on CD 1 of PQ:SWATColin Snover
The resources on CD 1 are corrupt and point to invalid locations in the CD 1 RESOURCE.AUD. This can be noticed during the briefing on the Lucy Long callup, where descriptions of the map are missing and eventually the game gets stuck waiting for missing audio to finish playback.
2017-03-30SCI32: Fix audio, wave, VMD, Duck, CLUT, TGA, ZZZ, Etc patchesColin Snover
Specifically, audio patches are used in at least PQ:SWAT (40103.AUD), Lighthouse (9103.AUD), and the GK2 demo (300.AUD).
2017-03-30SCI: Print more detailed information on audio header size mismatchColin Snover
2017-03-30SCI: Fix incorrect read of LB2/MG256 audio sizesColin Snover
This happened to work previously because the size was not checked for validity, and because the audio player calculates its own size so this value was never actually used.
2017-03-30SCI32: Ignore invalid audio map entries in GK2Colin Snover
The invalid entries, which are on CD 6, appear to correspond to audio that's on CD 4 (though not with the correct offset for CD 4's RESOURCE.AUD). Skipping the invalid map entries on CD 6 should cause these audio files to be loaded from the CD 4 audio bundle if they are requested during chapter six since ScummVM combines resources from all CDs and matches on their IDs.
2017-03-30SCI: Update formatting strings to match updated Span APIColin Snover
2017-03-27SCI: Implement bounds-checked reads of game resourcesColin Snover
2017-01-11SCI32: Remove unnecessary call to unallocColin Snover
When the Resource is deleted, it will deallocate the memory, so it is not necessary to do that manually.
2017-01-09SCI32: Fix kSetLanguageColin Snover
2016-12-03SCI: Fix invalid read of LB2 audio map 448Colin Snover
2016-12-03SCI: Remove use of snprintfColin Snover
2016-09-29SCI32: Improve MGDX supportColin Snover
Audio directory switching is temporarily disabled because it causes use-after-free in the resource manager.
2016-08-19SCI32: Enable multi-disc audio resourcesColin Snover
Phant1, PQ:SWAT, GK2, and Phant2 all have different audio maps and audio volumes on each CD. In order to make this work within ScummVM, where CDs are never swapped, each RESOURCE.AUD for these games must be renamed to RESAUD.00x and each RESOURCE.SFX renamed to RESSFX.00x.
2016-06-22SCI: Assert on seeks past the end of audio resource bundlesColin Snover
This should never be allowed to happen, but currently does on multi-CD games with different resource bundles on difference CDs (Phant1, PQ:SWAT, GK2) because the resource manager does not yet have the ability to handle this situation.
2016-06-20SCI32: Rewrite digital audio engineColin Snover
This provides a complete implementation of kDoAudio through SCI2.1mid, plus partial implementation of SCI3 features. Digital audio calls shunted through kDoSound have also been updated to go through the SCI32 audio mixer, though these shunts are a bit hacky because the ScummVM implementation of kDoSound does not currently match how SSCI kDoSound is designed. It is probably possible in the future to just replace the SCI1.1 audio code (audio.cpp) with the new SCI32 code, since the major differences seem to be that (1) SCI1.1 only supported one digital audio playback channel (this is configurable already), (2) it had extra commands for CD audio playback and queued sample playback.
2016-03-08SCI: Truncate channel data in case it goes beyond resource sizeMartin Kiewitz
Fixes invalid memory access during kq5 floppy ending
2016-03-01SCI: Use uint32 instead of unsigned intFilippos Karapetis
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: Use sound resource priority by default for songsWillem Jan Palenstijn
SCI1 sound resources can have an embedded priority. We now use that by default, unless an explicit DoSound/SetPriority call overrides it. Thanks waltervn. This fixes relative priority of songs in at least PQ3 room 29. Also increase savegame version to 33.
2014-10-28SCI: Remove trailing whitespaceFilippos Karapetis
2014-10-03SCI: Fix reading SCI1 midi channel flagsWillem Jan Palenstijn
Thanks waltervn
2014-02-18SCI: Make GPL headers consistent in themselves.Johannes Schickel
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-12-31SCI: Reduce indentation depthWillem Jan Palenstijn
2013-12-11SCI: rave support (KQ6 hires portrait lip sync)Martin Kiewitz
Thanks to wjp and [md5] for helping
2013-12-10SCI: Add handling for the RAVE resource type, found in KQ6CDFilippos Karapetis
This contains the sync data in the Windows version of KQ6CD. Note that currently the sync36 resource is 2 bytes bigger (it contains 2 bytes from the RAVE resource). Some test code has also been added to dump the RAVE sync resources
2013-04-20SCI: Fix memory leakWillem Jan Palenstijn
2012-02-20COMMON: Move isFoo functions to namespace Common, add doxygen commentsMax Horn
2012-02-15ALL: Avoid using is* macros from ctype.hMax Horn
On some systems, passing signed chars to macros like isspace() etc. lead to a runtime error. Hence, mark these macros as forbidden by default, and introduce otherwise equivalent alternatives for them.