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:
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] |
ID | Name | Property | References |
---|---|---|---|
labl |
Label | Label | [WAVE] |
ltxt |
Text with Data Length | LabeledTextItem | [WAVE] |
note |
Note | Note | [WAVE] |
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] |
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:
bext
chunk exists- wFormatTag = 0x0001 or 0x0050
- If wFormatTag = 0x0050 then
fact
chunk 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