[TOC] [Prev] [Next]

SOUND FILES


VOC Files

These are standard .VOC files in the Creative Labs format.

The DF engine only accepts MONO 8-bit 11KHz (11025 Hz) .VOC files.

Note that sounds are looped (eg. the water and wind) using REPEAT/END REPEAT markers.

[by galt@dsd.es.com]

Creative Voice File (VOC) Format:

HEADER (bytes 00-19)
Series of DATA BLOCKS (bytes 1A+) [Must end w/ Terminator Block]

HEADER:
byte # Description
00-12 Creative Voice File
13-15 1A 1A 00 (eof to abort printing of file)
16-17 Version number (minor,major) (VOC-HDR puts 0A 01)
18-19 2's Comp of Ver. # + 1234h (VOC-HDR puts 29 11)

DATA BLOCK:

Data Block: TYPE(1-byte), SIZE(3-bytes), INFO(0+ bytes)

NOTE: Terminator Block is an exception -- it has only the TYPE byte.

TYPE Description Size (3-byte int) Info
00 Terminator(NONE) (NONE)
01Sound data 2+length of data *
02Sound continue length of dataVoice Data
03Silence 3 **
04Marker 2 Marker# (2 bytes)
05ASCII length of string null terminated string
06Repeat 2 Count# (2 bytes)
07End repeat 0 (NONE)


*Sound Info Format:**Silence Info Format:
00 Sample Rate 00-01 Length of silence - 1
01 Compression Type 02 Sample Rate
02+ Voice Data


Marker# -- Driver keeps the most recent marker in a status byte
Count# -- Number of repetitions + 1
Count# may be 1 to FFFE for 0 - FFFD repetitions
or FFFF for endless repetitions
Sample Rate -- SR byte = 256-(1000000/sample_rate)
Length of silence -- in units of sampling cycle
Compression Type -- of voice data
8-bits = 0
4-bits = 1
2.6-bits = 2
2-bits = 3
Multi DAC = 3+(# of channels) [interesting-- this isn't in the developer's manual]


VOIC Resources (VOC Files)

Those LFD resources store .VOC files, in the Creative Labs format.

It seems that all the VOIC resources are in the jedisfx.lfd file.


GMD Files

They contain the musics.

Note: numbers in GMD files are all in big endian byte order.

[by Alex Novikov]

The header of GMD file (or the LFD GMID resource) consists of two fields:

GMD_Header IS
{
Magicchar[4] // the string 'MIDI'
Sizeint32// Size of the whole file excluding header // big endian byte order
}

The order of bytes in the Size field is big endian: the first byte is the highest byte, the 4th byte is the lowest byte of the value (this order is normal for Mac, but inverted for PC).

Then follow a variable number of chunks in format:

GMD_Chunk IS
{
Typechar[4] // chunk type
Sizeint32// Size of the chunk excluding header // big endian byte order
}

The field Size has the big endian order of bytes - same as the field Size of the file header.

The following Chunks are encountered:

MDpg
Varied length, usually 14 (0Eh)
Very strange content - mostly doesn't change from file to file, but if it does - some new byte is INSERTED between usual ones (with chunk size preserved, so the last byte of chunk goes).

MThd
6 bytes long.
Normal MIDI header. Indicates MIDI format 2.

MTHD_CHUNK IS
{
Format INVERTED_INT16// always 2 (MIDI2 format)
NTracksINVERTED_INT16// Number of tracks in the file
DivisionINVERTED_INT16// always 1E0h (tempo constant)
}

INVERTED_INT16 is an int16 with big endian byte order.

MTrk
Normal MIDI format 0(2) track data with the exception that "running status" (i.e. if one MIDI event followed by the same MIDI event with different parameters, the MIDI event code can omitted) is not used/supported. You cannot omit MIDI event codes.This basically means that GMD MTrk data are compatible with the MIDI standard, but MTrk from external MIDIs can be (and often are) incompatible with the GMD standard. See SMF (Standard MIDI File) specs for more info on MTrk chunk content.

The additional data in GMD's MTrk chunks is internal iMuse commands. Internal iMuse commands are stored as SysEx (System Exclusive) messages. They usually look like:

F0 Size 7D 03 TEXT 00 F7
F0 identifier of SysEx message
Size value of message size in MIDI variable length format
7D 03 probably an identifier of iMuse message
TEXT a text string of several characters
00 string terminator
F7 SysEx message terminator

The encounteded messages are (TEXT part):

start new
stalk trans #// # is a number appears to be a float
fight trans #,#
engage trans #
from fight #,#
from stalk #,#,#
from boss #
clear callback
to X// X= A,B,C...
to Xslow // X=A,B,C...

The number of parameters may vary. And, actually, the effect of these messages is not really known.

There are also iMuse messages beginning with 7D 01 whose format is unknown. They seem to have something to do with looping the in-level music.


GMID Resources (GMD Files)

Those LFD resources store .GMD general midi files.

See the GMD discussion just above.