Microsoft DirectX 8.0 (C++)

Song Form

Not implemented in DirectX 8.0.

The following notation shows the organization of the top-level chunk of a song file. This form can also be contained within a Container Form.

RIFF( 'DMSO'
    <sngh-ck>       // Song header chunk
    [<guid-ck>]     // GUID for song
    [<vers-ck>]     // Optional version info
    [<UNFO-list>]   // Name, author, copyright information, comments
    [<DMCN-form>]   // Container of objects embedded in file
    <segl-list>     // Segments
    [<tlgl-list>]   // Toolgraphs
    [<DMAP-form>]   // Audiopath shared by all segments
    <srsl-list>     // Segment references
)

<sngh-ck>

This chunk contains the basic header information for a song.

<sngh-ck> -> sngh ( <DMUS_IO_SONG_HEADER> )

<guid-ck>, <vers-ck>, <UNFO-list>

See Common Chunks.

<DMCN-form>

See Container Form.

<segl-list>

<segl-list> -> LIST( 'segl'
    <ssgl-list>...
    )

The song segments list contains an array of segments, each of which is described in the following list.

<ssgl-list> -> LIST( 'ssgl'    
    [<DMSG-form>]
    [<DMRF-list>] 
    )

This list consists of either a Segment Form or a Reference List.

<tlgl-list>

<tlgl-list> -> LIST( 'tlgl'
    <DMTG-form>...  
    )

The toolgraph list consists of an array of Toolgraph Forms.

<DMAP-form>

This chunk describes audiopaths shared by all segments in the song. See Audiopath Form.

<srsl-list>

The last chunk in the song form is an array of segment reference lists that are organized as follows:

<srsl-list> -> LIST( 'srsl'
    <sgrl-list>...
    )

<sgrl-list> -> LIST( 'sgrl' 
    <sgrh-ck>       // Segment reference header
    <segh-ck>       // Segment header
    [<UNFO-list>]   // Name, author, copyright, comments
    [<strh-ck>]     // Segment transition chunk
    [<trsl-list>]   // Track references
    )

This list starts with a segment reference header.

<sgrh-ck> -> ( 'sgrh' <DMUS_IO_SEGREF_HEADER> )

Next is a segment header. For the syntax of the <segh-ck> chunk, see Segment Form.

For <UNFO-list>, see Common Chunks.

The segment transition chunk specifies valid transitions from other segments to this segment. It is organized as follows:

<strh-ck> -> ( strh
    <DMUS_IO_TRANSITION_DEF>    // Default transition
    <DMUS_IO_TRANSITION_DEF>... // Additional transitions
    )

The last part of the segment reference list chunk contains track references that are used to create a segment from tracks in multiple segments:

<trsl-list> -> LIST( 'trsl'
    <tkrl-list>...
    )

This list consists in turn of an array of track reference lists, each of which is organized as follows:

<tkrl-list> -> ( 'tkrl'
    <tkrh-ck>       // Track reference header chunk
    <trkh-ck>       // Track header chunk
    [<trkx-ck>]     // Track flags 
    )

This list consists of three chunks. The first consists of a header structure that identifies the segment containing the track:

tkrh-ck -> tkrh( <DMUS_IO_TRACKREF_HEADER> )

For the other two chunks of the track reference list, see Track Form.