WAVE-hul Module
1 Introduction
The WAVE-hul module recognizes and validates the Audio for Windows format (WAVE) [WAVE, WAVEFORMAT]. WAVE is a variant of the Microsoft RIFF format [RIFF], which is itself an implementation of the Electronic Arts IFF 85 format [IFF].
The module can be invoked with the following command-line option:
jhove ... -m WAVE-hul ...
2 Coverage
The WAVE-hul module recognizes and validates the following public profiles:
- PCMWAVEFORMAT [PCMWAVEFORMAT]
- WAVEFORMATEX [WAVEFORMATEX]
- WAVEFORMATEXTENSIBLE [WAVEFORMATEXTENSIBLE]
- EBU Technical Specification 3285, Broadcast Wave Format (BWF) version 0, 1 and 2 [BWF, BWF Supp 1, BWF Supp 3, BWF Supp 4]
- EBU Technical Specification 3306, RF64 [RF64]
3 Well-Formedness
The following criteria must be met by a WAVE object for JHOVE to consider it well-formed:
- “RIFF” or “RF64” at byte offset 0; “WAVE” at offset 8
- All chunk structures are well-formed: a four-character printable ASCII ID, followed by a 32-bit unsigned integer size, followed by a size-length data block (if size is odd, then the data block includes a final padding byte of 0x00)
- If RF64, the first chunk is a Data Size 64 chunk
- A Format chunk exists
- A Data chunk exists
4 Validity
The following criteria must be met by a WAVE file for JHOVE to consider it valid:
- The file is well-formed
- All chunk IDs begin with printable ASCII
- The Format chunk appears before the Data chunk
- The following chunks appear no more than once:
- Broadcast Audio Extension
- Cart
- Cue Points
- Data
- Format
- Instrument
- Link
- MPEG Audio Extension
- Peak Envelope
5 Representation Information
The base MIME type is reported as audio/vnd.wave, but may be extended with a codec parameter as described in RFC 2361 [RFC 2361].
In addition to the standard JHOVE representation information, the following WAVE-specific properties are reported:
- Property “WAVEMetadata” of type PROPERTY and arity LIST
- Properties capturing the technical attributes of the WAVE image from all chunks
- …
The module reports audio properties using the draft standard AES-X098B, Core audio metadata XML definition, developed by the Audio Engineering Society (AES) SC-03-06 Working Group on Digital Library and Archive Systems.
The module can recognize and process the following chunks:
Top-level chunks
| ID | List Type | Name | Property | References |
|---|---|---|---|---|
bext |
Broadcast Audio Extension | BroadcastAudioExtension | [BWF] | |
cue |
Cue Points | CuePoints | [WAVE] | |
data |
Data | Data | [WAVE] | |
ds64 |
Data Size 64 | [RF64] | ||
fact |
Fact | Fact | [WAVE] | |
fmt |
Format | [WAVE, WAVEFORMAT, PCMWAVEFORMAT, WAVEFORMATEX, WAVEFORMATEXTENSIBLE] |
||
inst |
Instrument | Instrument | [MDSU] | |
labl |
Label | Label | ||
levl |
Peak Envelope | PeakEnvelope | [BWF Supp 3] | |
link |
Link | Link | [BWF Supp 4] | |
list |
adtl |
Associated Data List | ||
LIST |
adtl |
Associated Data List | [WAVE] | |
LIST |
exif |
Exif List | Exif | [Exif] |
LIST |
INFO |
Info List | ListInfo | [WAVE] |
mext |
MPEG Audio Extension | MPEG | [BWF Supp 1] | |
note |
Note | Note | ||
smpl |
Sample | Sample | [MDSU] |
Associated Data List chunks
| ID | Name | Property | References |
|---|---|---|---|
labl |
Label | Label | [WAVE] |
ltxt |
Text with Data Length | LabeledTextItem | [WAVE] |
note |
Note | Note | [WAVE] |
Exif List chunks
| ID | Name | Property | References |
|---|---|---|---|
ecor |
Make | Manufacturer | [Exif] |
emdl |
Model | Model | [Exif] |
erel |
Related Information | RelatedImageFile | [Exif] |
etim |
Time | TimeCreated | [Exif] |
ever |
Version | ExifVersion | [Exif] |
Info List chunks
| ID | Name | Property | References |
|---|---|---|---|
IARL |
Archival Location | ArchivalLocation | [WAVE] |
IART |
Artist | Artist | [WAVE] |
ICMS |
Commissioned | Commissioned | [WAVE] |
ICMT |
Comments | Comments | [WAVE] |
ICOP |
Copyright | Copyright | [WAVE] |
ICRD |
Creation Date | CreationDate | [WAVE] |
ICRP |
Cropped | Cropped | [WAVE] |
IDIM |
Dimensions | Dimensions | [WAVE] |
IDPI |
Dots Per Inch | DotsPerInch | [WAVE] |
IENG |
Engineer | Engineer | [WAVE] |
IGNR |
Genre | Genre | [WAVE] |
IKEY |
Keywords | Keywords | [WAVE] |
ILGT |
Lightness | Lightness | [WAVE] |
IMED |
Medium | Medium | [WAVE] |
INAM |
Name | Name | [WAVE] |
IPLT |
Palette Setting | PaletteSetting | [WAVE] |
IPRD |
Product | Product | [WAVE] |
ISBJ |
Subject | Subject | [WAVE] |
ISFT |
Software | Software | [WAVE] |
ISHP |
Sharpness | Sharpness | [WAVE] |
ISRC |
Source | Source | [WAVE] |
ISRF |
Source Form | SourceForm | [WAVE] |
ITCH |
Technician | Technician | [WAVE] |
5.1 Profiles
WAVE is a format for uncompressed or compressed sampled audio. The format is defined informally by references to various Microsoft API data structures:
The baseline fmt chunk is defined by the WAVEFORMAT structure with a length of 14 bytes:
WORD wFormatTag WORD nChannels DWORD nSamplesPerSec DWORD nAvgBytesPerSec WORD nBlockAlign
Where WORD indicates a 16-bit unsigned integer and DWORD indicates a 32-bit unsigned integer.
The specific form of the sampled data is specified by the fmt chunk’s wFormatTag field. For a list of registered wFormatTag values, see RFC 2361 [RFC 2361].
PCMWAVEFORMAT
This is an extension to the WAVEFORMAT profile in which the fmt chunk is defined by the PCMWAVEFORMAT structure with a length of 16 bytes [PCMWAVEFORMAT]:
WAVEFORMAT WORD wBitsPerSample
Profile requirements include:
- wFormatTag = 0x0001
WAVEFORMATEX
This is an extension to the PCMWAVEFORMAT profile supporting both PCM and non-PCM audio formats [WAVEFORMATEX]. The fmt chunk is defined by the WAVEFORMATEX structure with a length ≥ 18 bytes:
PCMWAVEFORMAT WORD cbSize
Profile requirements include:
- wFormatTag ≠ 0xFFFE
- If wFormatTag = 0x0001 then
- nAvgBytesPerSec = nSamplesPerSec × nBlockAlign (recommended)
- nBlockAlign = nChannels × ceiling(wBitsPerSample / 8)
- wBitsPerSample = 8 or 16
WAVEFORMATEXTENSIBLE
This is the most recent version of the Microsoft WAVE format for audio sample data with greater than two channels or 16-bit sampling [WAVEFORMATEXTENSIBLE]. The fmt chunk is defined by the WAVEFORMATEXTENSIBLE structure with a length ≥ 40 bytes:
WAVEFORMATEX UNION samples { WORD wValidBitsPerSample WORD wSamplesPerBlock WORD wReserved } DWORD dwChannelMask GUID subFormat { DWORD f1 WORD f2 WORD f3 CHAR f4\[8\] }
Where UNION is a C-style union structure and CHAR is an 8-bit unsigned integer.
Profile requirements include:
- wFormatTag = 0xFFFE
- nBlockAlign = nChannels × ceiling(wBitsPerSample / 8)
- wBitsPerSample is a multiple of 8
- cbSize > 21
- wValidBitsPerSample ≤ wBitsPerSample
BWF
Broadcast Wave Format is an extension of the WAVEFORMATEX profile, defined by the European Broadcast Union (EBU) as EBU Technical Specification 3285 and its supplements [BWF, BWF Supp 1, BWF Supp 2, BWF Supp 3, BWF Supp 4, BWF Supp 5, BWF Supp 6].
Profile requirements include:
bextchunk exists- wFormatTag = 0x0001 or 0x0050
- If wFormatTag = 0x0050 then
factchunk exists
RF64
The RF64 format was defined by the European Broadcast Union (EBU) in EBU Technical Specification 3306 to allow WAVE format files and chunks to exceed 4 gigabytes in size [RF64].
Profile requirements include:
- “RF64” at byte offset 0
6 Additional Module Properties
- Nominal file extension: .wav
- Alternative file extensions: .bwf, .rf64