Difference between revisions of "SCUMM/Technical Reference/Sound resources"

Jump to navigation Jump to search
→‎iMUSE: replace dead external link with ScummVM wiki link
(→‎Mac0: I forgot the instrument mapping)
(→‎iMUSE: replace dead external link with ScummVM wiki link)
 
(9 intermediate revisions by 2 users not shown)
Line 1: Line 1:
=Music=
=Music=
Todo:
* Adlib, GM, MT-32 etc formats
* Digital
* iMUSE (separate tracks and specific markers in each song format)


==Early v5==
==Early v5==
Line 18: Line 13:
The redundant header is possibly due to building on a legacy implementation, or for easier identification in the table stored in the .000 index file.
The redundant header is possibly due to building on a legacy implementation, or for easier identification in the table stored in the .000 index file.


The music block may contain any combination of ROL (Roland MT-32), ADL (Adlib/OPL FM), or SPK (PC speaker) blocks. They can also store a single SBL block for digitized sound (described in a later section). Aside from SBL, each of these blocks follow the same basic pattern.
The music block may contain any combination of ROL (Roland MT-32), ADL (AdLib/OPL FM), or SPK (PC speaker) blocks. They can also store a single SBL block for digitized sound (described in a later section). Aside from SBL, each of these blocks follow the same basic pattern.


   Block name        4 bytes ("ROL ", or "ADL ", or "SPK ")
   Block name        4 bytes ("ROL ", or "ADL ", or "SPK ")
Line 26: Line 21:
Every track is stored in MIDI format, in order to make use of the iMUSE technology through System Exclusive (SysEx) messages.
Every track is stored in MIDI format, in order to make use of the iMUSE technology through System Exclusive (SysEx) messages.


Due to the predominance of the Sound Blaster and Adlib/OPL FM technology at the time, in at least MI2 every musical SOUN block contains an ADL block.
Due to the predominance of the Sound Blaster and AdLib/OPL FM technology at the time, in at least MI2 every musical SOUN block contains an ADL block.
 
==iMUSE==
 
From SCUMM v5 onwards, LucasArts games used a dynamic music playback system called iMUSE. This basically consists of standard MIDI data, with embedded System Exclusive (SysEx) messages that act as markers in the song. iMUSE allows operations like conditional jumping & looping, adjusting the volume of parts, turning parts on and off, changing instruments, and detuning parts.
 
You can find the original patent document [http://pat2pdf.org/pat2pdf/foo.pl?number=5315057 here], and some technical details [[SCUMM/Technical Reference/iMuse data|can be found here]].


==Mac0==
==Mac0==
Line 79: Line 80:
   Block size        4 bytes
   Block size        4 bytes
   Sound header      4 bytes ("AUhd" or "WVhd")
   Sound header      4 bytes ("AUhd" or "WVhd")
  Block size        4 bytes
   Unknown          3 bytes (always 00 00 80)
   Unknown          3 bytes (always 00 00 80)
   Data header      4 bytes ("AUdt" or "WVdt")
   Data header      4 bytes ("AUdt" or "WVdt")
  Block size        4 bytes
   VOC data          variable
   VOC data          variable


AUhd and AUdt are used in Monkey Island, while WVhd and WVdt are used in the non-interactive demo of Sam & Max. The actual sound data is stored in the Creative VOC format, without the identifying header.
AUhd and AUdt are used in Monkey Island, while WVhd and WVdt are used in the non-interactive demo of Sam & Max. The actual sound data is stored in the Creative VOC format, without the header information. The implied data offset is 0x1A, and the VOC version is 0x010A.


==Early v5 - CD tracks==
==Early v5 - CD tracks==


Games that use CD tracks (Loom/CD, MI1/CD, Zak256/FM-TOWNS) are a bit different. For MI1/CD at least, the "SOU " block size is always 32 bytes and presumably points to the CD track to play.
Games that use CD tracks (Loom/CD, MI1/CD, Zak256/FM-TOWNS) are a bit different. For MI1/CD at least, the "SOUN" block size is always 32 bytes and presumably points to the CD track to play.
 
Here's some notes by cocomonk22:
Values from offsets 0-23 (0x00-0x17) are all the same, so just copy data from an existing SOUN.
At offset 24 (0x18) track number in hex format (for new music not in original start with track decimal 24 or hex 18).
At offset 25 (0x19) seems to be loop, opening uses 01, scummbar uses ff.
The six remaining values 26-31 (0x1a-0x1f) are all 00 if you want the music to start at the beginning of the track.
 
An example of music not starting at the beginning:
The scene at the lookout following the intro uses the same music as the opening, but starts at position 1 min 36 sec. Hex values are 01 23 30 00 00 00. 01 23 30 is equivalent to 1 35 48 in decimal.


==v5-v6 - MONSTER.SOU==
==v5-v6 - MONSTER.SOU==
Line 100: Line 112:
   Block name        4 bytes ("VCTL")
   Block name        4 bytes ("VCTL")
   Block size        4 bytes
   Block size        4 bytes
   Lip-sync tags    variable
   Lip-sync tags    variable * 2 bytes LE
   Sound data        variable ("Crea" block / VOC file)
   Sound data        variable ("Crea" block / VOC file)


The lip-sync tags provide timing information. In v5 the number of tags is stored in the calling text, according to the formula ((num_tags / 2) << 1) + 8. The "Crea" block is an entire Creative VOC file.
The lip-sync tags provide timing information, and are 16-bit LE values, representing positions in the speech file. Lip synching is basically just toggling the speaking animation on and off whenever the speech goes past the positions listed in the lip-synch tags. In v5 the number of tags is stored in the calling text, according to the formula (num_tags << 1) + 8. The "Crea" block is an entire Creative VOC file.


===Compressed===
===Compressed===
Line 137: Line 149:
  TOWS - FM Towns
  TOWS - FM Towns
  SBL  - Sound Blaster digitized sound (Creative VOC file)
  SBL  - Sound Blaster digitized sound (Creative VOC file)
  ADL  - Adlib (OPL FM)
  ADL  - AdLib (OPL FM)
  AMI  - Amiga MOD
  AMI  - Amiga MOD
  ROL  - Roland MT-32
  ROL  - Roland MT-32
125

edits

Navigation menu