RIFF1991

TODO: overview

Source: https://www.mmsp.ece.mcgill.ca/Documents/AudioFormats/WAVE/Docs/riffmci.pdf


[RIFF1991] Multimedia Programming Interface and Data Specifications 1.0 (1991). See pages 56-65.

TODO: implement spec_detail widget

{
  "id": "RIFF1991",
  "publication_year": 1991,
  "authority": "IBM and Microsoft",
  "title": "Multimedia Programming Interface and Data Specifications",
  "publication_date": "1991-08",
  "title_short": "RIFF",
  "version": "1.0",
  "see": "pages 56-65"
}

Learning References

Fields defined in this spec

Chunk Name Name
as Specified
Bytes Type Type
as Specified
conditionDescriptionWRID
RIFF-WAVE id ckID 4 u8[4] FOURCC id = RIFF WRID>RIFF-WAVE>id
RIFF-WAVE size ckSize 4 u32 DWORD WRID>RIFF-WAVE>size
RIFF-WAVE form_type formType 4 u8[4] FOURCC form_type = WAVE WRID>RIFF-WAVE>form_type
data id ckID 4 u8[4] FOURCC id = data WRID>RIFF-WAVE>data>id
data size ckSize 4 u32 DWORD WRID>RIFF-WAVE>data>size
data data ckData size u8[size] ckData[ckSize] WRID>RIFF-WAVE>data>data
LIST-INFO id ckID 4 u8[4] FOURCC id = LIST WRID>RIFF-WAVE>LIST-INFO>id
LIST-INFO size ckSize 4 u32 DWORD WRID>RIFF-WAVE>LIST-INFO>size
LIST-INFO list_type (text) 4 u8[4] FOURCC list_type = INFO WRID>RIFF-WAVE>LIST-INFO>list_type
IARL id ckID 4 u8[4] FOURCC id = IARL WRID>RIFF-WAVE>LIST-INFO>IARL>id
IARL size ckSize 4 u32 DWORD WRID>RIFF-WAVE>LIST-INFO>IARL>size
IARL text (text) size ZSTR ZSTR Archival Location. Indicates where the subject of the file is archived. WRID>RIFF-WAVE>LIST-INFO>IARL>text
IGNR id ckID 4 u8[4] FOURCC id = IGNR WRID>RIFF-WAVE>LIST-INFO>IGNR>id
IGNR size ckSize 4 u32 DWORD WRID>RIFF-WAVE>LIST-INFO>IGNR>size
IGNR text (text) size ZSTR ZSTR Genre. Describes the original work, such as "landscape", "portrait", "still life", etc. WRID>RIFF-WAVE>LIST-INFO>IGNR>text
IKEY id ckID 4 u8[4] FOURCC id = IKEY WRID>RIFF-WAVE>LIST-INFO>IKEY>id
IKEY size ckSize 4 u32 DWORD WRID>RIFF-WAVE>LIST-INFO>IKEY>size
IKEY text (text) size ZSTR ZSTR Keywords. Provides a list of keywords that refer to the file or subject of the file. Separate multiple keywords with a semicolon and a blank. For example, "Seattle; aerial view; scenery". WRID>RIFF-WAVE>LIST-INFO>IKEY>text
ILGT id ckID 4 u8[4] FOURCC id = ILGT WRID>RIFF-WAVE>LIST-INFO>ILGT>id
ILGT size ckSize 4 u32 DWORD WRID>RIFF-WAVE>LIST-INFO>ILGT>size
ILGT text (text) size ZSTR ZSTR Lightness. Describes the changes in lightness settings on the digitizer required to produce the file. Note that the format of this information depends on hardware used. WRID>RIFF-WAVE>LIST-INFO>ILGT>text
IMED id ckID 4 u8[4] FOURCC id = IMED WRID>RIFF-WAVE>LIST-INFO>IMED>id
IMED size ckSize 4 u32 DWORD WRID>RIFF-WAVE>LIST-INFO>IMED>size
IMED text (text) size ZSTR ZSTR Medium. Describes the original subject of the file, such as "computer image", "drawing", "lithograph", and so forth. WRID>RIFF-WAVE>LIST-INFO>IMED>text
INAM id ckID 4 u8[4] FOURCC id = INAM WRID>RIFF-WAVE>LIST-INFO>INAM>id
INAM size ckSize 4 u32 DWORD WRID>RIFF-WAVE>LIST-INFO>INAM>size
INAM text (text) size ZSTR ZSTR Name. Stores the title of the subject of the file, such as "Seattle From Above". WRID>RIFF-WAVE>LIST-INFO>INAM>text
IPLT id ckID 4 u8[4] FOURCC id = IPLT WRID>RIFF-WAVE>LIST-INFO>IPLT>id
IPLT size ckSize 4 u32 DWORD WRID>RIFF-WAVE>LIST-INFO>IPLT>size
IPLT text (text) size ZSTR ZSTR Palette Setting. Specifies the number of colors requested when digitizing an image, such as "256". WRID>RIFF-WAVE>LIST-INFO>IPLT>text
IPRD id ckID 4 u8[4] FOURCC id = IPRD WRID>RIFF-WAVE>LIST-INFO>IPRD>id
IPRD size ckSize 4 u32 DWORD WRID>RIFF-WAVE>LIST-INFO>IPRD>size
IPRD text (text) size ZSTR ZSTR Product. Specifies the name of the title the file was originally intended for, such as "Encyclopedia of Pacific Northwest Geography". WRID>RIFF-WAVE>LIST-INFO>IPRD>text
ISBJ id ckID 4 u8[4] FOURCC id = ISBJ WRID>RIFF-WAVE>LIST-INFO>ISBJ>id
ISBJ size ckSize 4 u32 DWORD WRID>RIFF-WAVE>LIST-INFO>ISBJ>size
ISBJ text (text) size ZSTR ZSTR Subject. Describes the contents of the file, such as "Aerial view of Seattle". WRID>RIFF-WAVE>LIST-INFO>ISBJ>text
ISFT id ckID 4 u8[4] FOURCC id = ISFT WRID>RIFF-WAVE>LIST-INFO>ISFT>id
ISFT size ckSize 4 u32 DWORD WRID>RIFF-WAVE>LIST-INFO>ISFT>size
ISFT text (text) size ZSTR ZSTR Software. Identifies the name of the software package used to create the file, such as "Microsoft WaveEdit". WRID>RIFF-WAVE>LIST-INFO>ISFT>text
ISHP id ckID 4 u8[4] FOURCC id = ISHP WRID>RIFF-WAVE>LIST-INFO>ISHP>id
ISHP size ckSize 4 u32 DWORD WRID>RIFF-WAVE>LIST-INFO>ISHP>size
ISHP text (text) size ZSTR ZSTR Sharpness. Identifies the changes in sharpness for the digitizer required to produce the file (the format depends on the hardware used). WRID>RIFF-WAVE>LIST-INFO>ISHP>text
IART id ckID 4 u8[4] FOURCC id = IART WRID>RIFF-WAVE>LIST-INFO>IART>id
IART size ckSize 4 u32 DWORD WRID>RIFF-WAVE>LIST-INFO>IART>size
IART text (text) size ZSTR ZSTR Artist. Lists the artist of the original subject of the file. For example, "Michaelangelo". WRID>RIFF-WAVE>LIST-INFO>IART>text
ISRC id ckID 4 u8[4] FOURCC id = ISRC WRID>RIFF-WAVE>LIST-INFO>ISRC>id
ISRC size ckSize 4 u32 DWORD WRID>RIFF-WAVE>LIST-INFO>ISRC>size
ISRC text (text) size ZSTR ZSTR Source. Identifies the name of the person or organization who supplied the original subject of the file. For example, "Trey Research". WRID>RIFF-WAVE>LIST-INFO>ISRC>text
ISRF id ckID 4 u8[4] FOURCC id = ISRF WRID>RIFF-WAVE>LIST-INFO>ISRF>id
ISRF size ckSize 4 u32 DWORD WRID>RIFF-WAVE>LIST-INFO>ISRF>size
ISRF text (text) size ZSTR ZSTR Source Form. Identifies the original form of the material that was digitized, such as "slide", "paper", "map", and so forth. This is not necessarily the same as IMED. WRID>RIFF-WAVE>LIST-INFO>ISRF>text
ITCH id ckID 4 u8[4] FOURCC id = ITCH WRID>RIFF-WAVE>LIST-INFO>ITCH>id
ITCH size ckSize 4 u32 DWORD WRID>RIFF-WAVE>LIST-INFO>ITCH>size
ITCH text (text) size ZSTR ZSTR Technician. Identifies the technician who digitized the subject file. For example, "Smith, John." WRID>RIFF-WAVE>LIST-INFO>ITCH>text
ICMS id ckID 4 u8[4] FOURCC id = ICMS WRID>RIFF-WAVE>LIST-INFO>ICMS>id
ICMS size ckSize 4 u32 DWORD WRID>RIFF-WAVE>LIST-INFO>ICMS>size
ICMS text (text) size ZSTR ZSTR Commissioned. Lists the name of the person or organization that commissioned the subject of the file. For example, "Pope Julian II". WRID>RIFF-WAVE>LIST-INFO>ICMS>text
ICMT id ckID 4 u8[4] FOURCC id = ICMT WRID>RIFF-WAVE>LIST-INFO>ICMT>id
ICMT size ckSize 4 u32 DWORD WRID>RIFF-WAVE>LIST-INFO>ICMT>size
ICMT text (text) size ZSTR ZSTR Comments. Provides general comments about the file or the subject of the file. If the comment is several sentences long, end each sentence with a period. Do not include newline characters. WRID>RIFF-WAVE>LIST-INFO>ICMT>text
ICOP id ckID 4 u8[4] FOURCC id = ICOP WRID>RIFF-WAVE>LIST-INFO>ICOP>id
ICOP size ckSize 4 u32 DWORD WRID>RIFF-WAVE>LIST-INFO>ICOP>size
ICOP text (text) size ZSTR ZSTR Copyright. Records the copyright information for the file. For example, "Copyright Encyclopedia International 1991." If there are multiple copyrights, separate them by a semicolon followed by a space. WRID>RIFF-WAVE>LIST-INFO>ICOP>text
ICRD id ckID 4 u8[4] FOURCC id = ICRD WRID>RIFF-WAVE>LIST-INFO>ICRD>id
ICRD size ckSize 4 u32 DWORD WRID>RIFF-WAVE>LIST-INFO>ICRD>size
ICRD text (text) size ZSTR ZSTR Creation date. Specifies the date the subject of the file was created. List dates in year-month-day format, padding one-digit months and days with a zero on the left. For example, "1553-05-03" for May 3, 1553. WRID>RIFF-WAVE>LIST-INFO>ICRD>text
ICRP id ckID 4 u8[4] FOURCC id = ICRP WRID>RIFF-WAVE>LIST-INFO>ICRP>id
ICRP size ckSize 4 u32 DWORD WRID>RIFF-WAVE>LIST-INFO>ICRP>size
ICRP text (text) size ZSTR ZSTR Cropped. Describes whether an image has been cropped and, if so, how it was cropped. For example, "lower right corner". IDIM Dimensions. Specifies the size of the original subject of the file. For example, "8.5 in h, 11 in w". WRID>RIFF-WAVE>LIST-INFO>ICRP>text
IDPI id ckID 4 u8[4] FOURCC id = IDPI WRID>RIFF-WAVE>LIST-INFO>IDPI>id
IDPI size ckSize 4 u32 DWORD WRID>RIFF-WAVE>LIST-INFO>IDPI>size
IDPI text (text) size ZSTR ZSTR Dots Per Inch. Stores dots per inch setting of the digitizer used to produce the file, such as "300". WRID>RIFF-WAVE>LIST-INFO>IDPI>text
IENG id ckID 4 u8[4] FOURCC id = IENG WRID>RIFF-WAVE>LIST-INFO>IENG>id
IENG size ckSize 4 u32 DWORD WRID>RIFF-WAVE>LIST-INFO>IENG>size
IENG text (text) size ZSTR ZSTR Engineer. Stores the name of the engineer who worked on the file. If there are multiple engineers, separate the names by a semicolon and a blank. For example, "Smith, John; Adams, Joe". WRID>RIFF-WAVE>LIST-INFO>IENG>text
CSET id ckID 4 u8[4] FOURCC id = CSET WRID>RIFF-WAVE>CSET>id
CSET size ckSize 4 u32 DWORD WRID>RIFF-WAVE>CSET>size
CSET code_page wCodePage 2 u16 WORD Specifies the code page used for file elements. If the CSET chunk is not present, or if this field has value zero, assume standard ISO 8859/1 code page (identical to code page 1004 without code points defined in hex columns 0, 1, 8, and 9). WRID>RIFF-WAVE>CSET>code_page
CSET country_code wCountryCode 2 u16 WORD Specifies the country code used for file elements. See “ Country Codes,” following this section, for a list of currently defined country codes. If the CSET chunk is not present, or if this field has value zero, assume USA (country code 001). WRID>RIFF-WAVE>CSET>country_code
CSET language wLanguage 2 u16 WORD Specify the language and dialect used for file elements. See “Language and Dialect Codes,” later in this chapter, for a list of language and dialect codes. If the CSET chunk is not present, or if these fields have value zero, assume US English (language code 9, dialect code 1). WRID>RIFF-WAVE>CSET>language
CSET dialect wDialect 2 u16 WORD Specify the language and dialect used for file elements. See “Language and Dialect Codes,” later in this chapter, for a list of language and dialect codes. If the CSET chunk is not present, or if these fields have value zero, assume US English (language code 9, dialect code 1). WRID>RIFF-WAVE>CSET>dialect
fact id ckID 4 u8[4] FOURCC id = fact WRID>RIFF-WAVE>fact>id
fact size ckSize 4 u32 DWORD WRID>RIFF-WAVE>fact>size
fact samples dwFileSize 4 u32 DWORD Number of samples. RIFF1991 named this field dwFileSize, even though it's documented as "Number of samples" WRID>RIFF-WAVE>fact>samples
cue id ckID 4 u8[4] FOURCC id = "cue " WRID>RIFF-WAVE>cue>id
cue size ckSize 4 u32 DWORD WRID>RIFF-WAVE>cue>size
cue cue_points dwCuePoints 4 u32 DWORD Count of cue points. The number of times the cue-point struct repeats within this chunk. WRID>RIFF-WAVE>cue>cue_points
cue name dwName 4 u32 DWORD cue-point field: Specifies the cue point name. Each record must have a unique dwName field. WRID>RIFF-WAVE>cue>name
cue position dwPostion 4 u32 DWORD cue-point field: Specifies the sample position of the cue point. This is the sequential sample number within the play order. See plst chunk, for a discussion of the play order. WRID>RIFF-WAVE>cue>position
cue chunk_id fccChunk 4 u8[4] FOURCC cue-point field: Specifies the name or chunk ID of the chunk containing the cue point. WRID>RIFF-WAVE>cue>chunk_id
cue chunk_start dwChunkStart 4 u32 DWORD cue-point field: Specifies the file position of the start of the chunk containing the cue point. This is a byte offset relative to the start of the data section of the ‘wavl’ LIST chunk. WRID>RIFF-WAVE>cue>chunk_start
cue block_start dwBlockStart 4 u32 DWORD cue-point field: Specifies the file position of the start of the block containing the position. This is a byte offset relative to the start of the data section of the ‘wavl’ LIST chunk. WRID>RIFF-WAVE>cue>block_start
cue sample_offset dwSampleOffset 4 u32 DWORD cue-point field: Specifies the sample offset of the cue point relative to the start of the block. WRID>RIFF-WAVE>cue>sample_offset
plst id ckID 4 u8[4] FOURCC id = plst WRID>RIFF-WAVE>plst>id
plst size ckSize 4 u32 DWORD WRID>RIFF-WAVE>plst>size
plst segments dwSegments 4 u32 DWORD Count of play segments. WRID>RIFF-WAVE>plst>segments
plst name dwName 4 u32 DWORD play-segment field: Specifies the cue point name. This value must match one of the names listed in the cue cue-point table. WRID>RIFF-WAVE>plst>name
plst length dwLength 4 u32 DWORD play-segment field: Specifies the length of the section in samples. WRID>RIFF-WAVE>plst>length
plst loops dwLoops 4 u32 DWORD play-segment field: Specifies the number of times to play the section. WRID>RIFF-WAVE>plst>loops
JUNK id ckID 4 u8[4] FOURCC id = JUNK WRID>RIFF-WAVE>JUNK>id
JUNK size ckSize 4 u32 DWORD WRID>RIFF-WAVE>JUNK>size
JUNK padding padding size u8[size] BYTE[ckSize] WRID>RIFF-WAVE>JUNK>padding
LIST-adtl id ckID 4 u8[4] FOURCC id = LIST WRID>RIFF-WAVE>LIST-adtl>id
LIST-adtl size ckSize 4 u32 DWORD WRID>RIFF-WAVE>LIST-adtl>size
LIST-adtl list_type list-type 4 u8[4] FOURCC list_type = adtl WRID>RIFF-WAVE>LIST-adtl>list_type
labl id ckID 4 u8[4] FOURCC id = labl The ‘labl’ chunk contains a label, or title, to associate with a cue point. WRID>RIFF-WAVE>LIST-adtl>labl>id
labl size ckSize 4 u32 DWORD WRID>RIFF-WAVE>LIST-adtl>labl>size
labl name dwName 4 u32 DWORD Specifies the cue point name. This value must match one of the names listed in the cue chunk' cue-point table. WRID>RIFF-WAVE>LIST-adtl>labl>name
labl text data size ZSTR ZSTR Specifies a NULL-terminated string containing a text label. WRID>RIFF-WAVE>LIST-adtl>labl>text
note id ckID 4 u8[4] FOURCC id = note The ‘note’ chunk contains comment text for a cue point WRID>RIFF-WAVE>LIST-adtl>note>id
note size ckSize 4 u32 DWORD WRID>RIFF-WAVE>LIST-adtl>note>size
note name dwName 4 u32 DWORD Specifies the cue point name. This value must match one of the names listed in the cue chunk' cue-point table. WRID>RIFF-WAVE>LIST-adtl>note>name
note text data size ZSTR ZSTR Specifies a NULL-terminated string containing comment text. WRID>RIFF-WAVE>LIST-adtl>note>text
ltxt id ckID 4 u8[4] FOURCC id = ltxt The “ ltxt” chunk contains text that is associated with a data segment of specific length WRID>RIFF-WAVE>LIST-adtl>ltxt>id
ltxt size ckSize 4 u32 DWORD WRID>RIFF-WAVE>LIST-adtl>ltxt>size
ltxt name dwName 4 u32 DWORD Specifies the cue point name. This value must match one of the names listed in the cue chunk' cue-point table. WRID>RIFF-WAVE>LIST-adtl>ltxt>name
ltxt sample_length dwSampleLength 4 u32 DWORD Specifies the number of samples in the segment of waveform data. WRID>RIFF-WAVE>LIST-adtl>ltxt>sample_length
ltxt purpose dwPurpose 4 u32 DWORD Specifies the type or purpose of the text. For example, dwPurpose can specify a FOURCC code like 'scrp' for script text or 'capt' for close-caption text. WRID>RIFF-WAVE>LIST-adtl>ltxt>purpose
ltxt country_code wCountry 2 u16 WORD Specifies the country code for the text. See "Country Codes" in CSET chunk, for a current list of country codes. WRID>RIFF-WAVE>LIST-adtl>ltxt>country_code
ltxt language wLanguage 2 u16 WORD Specify the language for the text. See "Language and Dialect Codes" in CSET chunk, for a current list of language and dialect codes. WRID>RIFF-WAVE>LIST-adtl>ltxt>language
ltxt dialect wDialect 2 u16 WORD Specify the dialect codes for the text. See "Language and Dialect Codes" in CSET chunk, for a current list of language and dialect codes. WRID>RIFF-WAVE>LIST-adtl>ltxt>dialect
ltxt code_page wCodePage 2 u16 WORD Specifies the code page for the text. See CSET chunk for details. WRID>RIFF-WAVE>LIST-adtl>ltxt>code_page
ltxt text data size-20 u8[size-20] BYTE[ckSize-20] WRID>RIFF-WAVE>LIST-adtl>ltxt>text
file id ckID 4 u8[4] FOURCC id = file The 'file' chunk contains information described in other file formats (for example, an 'RDIB' file or an ASCII text file). WRID>RIFF-WAVE>LIST-adtl>file>id
file size ckSize 4 u32 DWORD WRID>RIFF-WAVE>LIST-adtl>file>size
file name dwName 4 u32 DWORD Specifies the cue point name. This value must match one of the names listed in the cue chunk' cue-point table. WRID>RIFF-WAVE>LIST-adtl>file>name
file media_type dwMedType 4 DWORD DWORD Specifies the cue point name. This value must match one of the names listed in the cue-point table.Specifies the file type contained in the fileData field. If the fileData section contains a RIFF form, the dwMedType field is the same as the RIFF form type for the file. This field can contain a zero value. WRID>RIFF-WAVE>LIST-adtl>file>media_type
file file_data fileData size-8 u8[size-8] BYTE[ckSize-8] Contains the media file. WRID>RIFF-WAVE>LIST-adtl>file>file_data
LIST-wavl id ckID 4 u8[4] FOURCC id = LIST WRID>RIFF-WAVE>LIST-wavl>id
LIST-wavl size ckSize 4 u32 DWORD WRID>RIFF-WAVE>LIST-wavl>size
LIST-wavl list_type list-type 4 u8[4] FOURCC list_type = wavl WRID>RIFF-WAVE>LIST-wavl>list_type
slnt id ckID 4 u8[4] FOURCC id = slnt The ‘slnt’ chunk represents silence, not necessarily a repeated zero volume or baseline sample. WRID>RIFF-WAVE>LIST-wavl>slnt>id
slnt size ckSize 4 u32 DWORD WRID>RIFF-WAVE>LIST-wavl>slnt>size
slnt samples dwFileSize 4 u32 DWORD Number of samples. WRID>RIFF-WAVE>LIST-wavl>slnt>samples
data id ckID 4 u8[4] FOURCC id = data This is the same as WRID>RIFF-WAVE>data, it can also be enclosed in this list type. WRID>RIFF-WAVE>LIST-wavl>data>id
data size ckSize 4 u32 DWORD WRID>RIFF-WAVE>LIST-wavl>data>size
data data ckData size u8[size] ckData[ckSize] WRID>RIFF-WAVE>LIST-wavl>data>data
fmt id ckID 4 u8[4] FOURCC id = "fmt " WRID>RIFF-WAVE>fmt >id
fmt size ckSize 4 u32 DWORD WRID>RIFF-WAVE>fmt >size
fmt format_tag wFormatTag 2 u16 WORD = 0x0001 A number indicating the WAVE format category of the file. The content of the portion of the ‘fmt’ chunk, and the interpretation of the waveform data, depend on this value. WRID>RIFF-WAVE>fmt >format_tag
fmt channels wChannels 2 u16 WORD The number of channels represented in the waveform data, such as 1 for mono or 2 for stereo. WRID>RIFF-WAVE>fmt >channels
fmt samples_per_sec dwSamplesPerSec 4 u32 DWORD The sampling rate (in samples per second) at which each channel should be played. WRID>RIFF-WAVE>fmt >samples_per_sec
fmt avg_bytes_per_sec dwAvgBytesPerSec 4 u32 DWORD The average number of bytes per second at which the waveform data should be transferred. Playback software can estimate the buffer size using this value. WRID>RIFF-WAVE>fmt >avg_bytes_per_sec
fmt block_align wBlockAlign 2 u16 WORD The block alignment (in bytes) of the waveform data. Playback software needs to process a multiple of block_align bytes of data at a time, so the value of block_align can be used for buffer alignment. The block_align field should be equal to the following formula, rounded to the next whole number: channels x ( bits_per_sample / 8 ) WRID>RIFF-WAVE>fmt >block_align
fmt bits_per_sample wBitsPerSample 2 u16 WORD The bits_per_sample field specifies the number of bits of data used to represent each sample of each channel. If there are multiple channels, the sample size is the same for each channel. The block_align field should be equal to the following formula, rounded to the next whole number: channels x ( bits_per_sample / 8 ) WRID>RIFF-WAVE>fmt >bits_per_sample

Related Chunks

  • [plst] : Play order for cue points. Very rare.
  • [CSET] : Character set information. Code page, language, etc. Very Rare.
  • [cue] : A series of positions in the waveform data chunk.
  • [LIST-wavl] : A LIST of audio and/or silence chunks: data, slnt
  • [RIFF-WAVE] : Container structure for multimedia data.
  • [LIST-adtl] : A LIST of CuePoint annotation chunks.
  • [fact] : Number of samples for compressed audio in data chunk.
  • [LIST-INFO] : A LIST of descripitve text chunks.
  • [data] : TODO: description of data
  • [fmt] : Format of audio samples in data chunk.
  • [JUNK] : padding, filler or outdated information