Microsoft DirectX 8.1 (C++)

Song Form

Not implemented in DirectX 8.1.

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. See Toolgraph Form.

<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.