mirror of
https://github.com/libretro/scummvm.git
synced 2025-02-19 18:51:09 +00:00
Added 'MAC ' subtype of 'SOU ', used in MacOS variants of some games, and contains MIDI data; also ignore 'Mac0' and 'Mac1' sounds for now till we add playback support
svn-id: r4092
This commit is contained in:
parent
b104ca24eb
commit
0dff20fd5b
62
resource.cpp
62
resource.cpp
@ -574,11 +574,15 @@ int Scumm::readSoundResource(int type, int idx)
|
||||
break;
|
||||
case MKID('ROL '):
|
||||
if (!_use_adlib)
|
||||
pri = 1;
|
||||
pri = 2;
|
||||
break;
|
||||
case MKID('GMD '):
|
||||
if (!_use_adlib)
|
||||
pri = 2;
|
||||
pri = 3;
|
||||
break;
|
||||
case MKID('MAC '):
|
||||
if (!_use_adlib)
|
||||
pri = 1;
|
||||
break;
|
||||
}
|
||||
|
||||
@ -602,6 +606,60 @@ int Scumm::readSoundResource(int type, int idx)
|
||||
fileSeek(_fileHandle, -8, SEEK_CUR);
|
||||
fileRead(_fileHandle, createResource(type, idx, total_size), total_size);
|
||||
return 1;
|
||||
} else if (basetag == MKID('Mac0')) {
|
||||
debug(1, "Ignoring base tag Mac0 in sound %d, size %d", idx, total_size);
|
||||
debug(1, "It was at position %d", filePos(_fileHandle));
|
||||
|
||||
/* Offset
|
||||
0x14, 0x1C, 0x20, 0x24 - offsets of channel 1/2/3/4 chunk-
|
||||
Each channel has tag "Chan", followed by its length. At the end
|
||||
of each chan follows either an empty "Done" chunk (length 0) or an
|
||||
empty "Loop" chunk. Maybe "Loop" indicates the song should be
|
||||
played forever?!?.
|
||||
|
||||
For Mac1, it follows a chunk "Inst" contains the same data as a
|
||||
MacOS 'snd ' resource, i.e. sampled sound data (8bit). This is
|
||||
used for sound effects (like the sea gull in Monkey Island).
|
||||
|
||||
For Mac0, there can be various different subchunks it seems. The
|
||||
following combinations appear in MI
|
||||
ORGA, SHAK, BASS (ID 101)
|
||||
ORGA, MARI, BASS (ID 108)
|
||||
VIBE, WHIS, BASS (ID 104)
|
||||
ORGA, SHAK, VIBE (ID 110)
|
||||
Guess is that these are instrument names: Organ, Marimba, Whistle...
|
||||
Maybe there is a mapping table someplace?
|
||||
|
||||
What follows are four byte "commands" it seems, like this (hex):
|
||||
01 68 4F 49
|
||||
01 68 00 40
|
||||
01 68 4F 49
|
||||
...
|
||||
01 68 00 40
|
||||
02 1C 5B 40
|
||||
00 B4 00 40
|
||||
...
|
||||
01 68 37 3C
|
||||
00 18 37 38
|
||||
04 20 3E 34
|
||||
01 68 4A 3C
|
||||
|
||||
More data:
|
||||
00 09 3E 10
|
||||
01 5F 00 40
|
||||
00 9C 36 40
|
||||
00 CC 00 40
|
||||
00 18 42 49
|
||||
00 18 45 3C
|
||||
01 29 4A 3C
|
||||
00 0F 00 40
|
||||
|
||||
Maybe I am mistaken when I think it's four byte, some other parts
|
||||
seem to suggest it's 2 byte oriented, or even variable lenght...
|
||||
*/
|
||||
} else if (basetag == MKID('Mac1')) {
|
||||
debug(1, "Ignoring base tag Mac1 in sound %d, size %d", idx, total_size);
|
||||
debug(1, "It was at position %d", filePos(_fileHandle));
|
||||
} else {
|
||||
error("Unrecognized base tag %c%c%c%c in sound %d",
|
||||
basetag & 0xff, basetag >> 8, basetag >> 16, basetag >> 24, idx);
|
||||
|
Loading…
x
Reference in New Issue
Block a user