A Wave64 file is a run of chunks, each named by a 16-byte GUID. Every number is little-endian. Sony’s own description is a PDF white paper that was not used here, so this page rests on libsndfile and FFmpeg, which read and write the format, and on the MultimediaWiki.
Chunk
| Offset | Size | Type | Name | Description |
|---|---|---|---|---|
| 0 | 16 | GUID | ID | names the chunk, as the bytes listed below |
| 16 | 8 | u64 | size | the size of the whole chunk, including this 24-byte header |
| 24 | size − 24 | bytes | data | the chunk’s data |
The size rule differs from WAV’s, where a chunk’s size leaves out its header.
Alignment
Each chunk starts on an 8-byte boundary, so after a chunk a reader skips to the next multiple of 8. libsndfile and FFmpeg both follow this rule: FFmpeg’s reader rounds each chunk’s size up to a multiple of 8, and libsndfile’s reader skips the remainder and its writer pads the format chunk with zeros. Neither writes padding after the data chunk.
The MultimediaWiki describes the older RIFF rule instead: one pad byte after data of odd length. The two rules agree on chunks already a multiple of 8.
The outer chunk
| Offset | Size | Type | Name | Description |
|---|---|---|---|---|
| 0 | 16 | GUID | riff | the bytes below |
| 16 | 8 | u64 | size | the size of the file |
| 24 | 16 | GUID | wave | the form type |
| 40 | … | chunks | the other chunks, starting at offset 40 |
FFmpeg’s test for the format is the two GUIDs: riff at offset 0 and
wave at offset 24.
GUIDs
Bytes are as they appear in the file. The first four spell the chunk’s WAV name, in lower case, where the GUID is built from one; the other 12 bytes are fixed.
| Name | GUID | File bytes | Page |
|---|---|---|---|
riff | 66666972-912E-11CF-A5D6-28DB04C10000 | 72 69 66 66 2E 91 CF 11 A5 D6 28 DB 04 C1 00 00 | above |
wave | 65766177-ACF3-11D3-8CD1-00C04F8EDB8A | 77 61 76 65 F3 AC D3 11 8C D1 00 C0 4F 8E DB 8A | above |
fmt | 20746D66-ACF3-11D3-8CD1-00C04F8EDB8A | 66 6D 74 20 F3 AC D3 11 8C D1 00 C0 4F 8E DB 8A | Format |
fact | 74636166-ACF3-11D3-8CD1-00C04F8EDB8A | 66 61 63 74 F3 AC D3 11 8C D1 00 C0 4F 8E DB 8A | Fact |
data | 61746164-ACF3-11D3-8CD1-00C04F8EDB8A | 64 61 74 61 F3 AC D3 11 8C D1 00 C0 4F 8E DB 8A | Data |
levl | 6C76656C-ACF3-11D3-8CD1-00C04F8EDB8A | 6C 65 76 6C F3 AC D3 11 8C D1 00 C0 4F 8E DB 8A | Other chunks |
list | 7473696C-912F-11CF-A5D6-28DB04C10000 | 6C 69 73 74 2F 91 CF 11 A5 D6 28 DB 04 C1 00 00 | Other chunks |
junk | 6B6E756A-ACF3-11D3-8CD1-00C04F8EDB8A | 6A 75 6E 6B F3 AC D3 11 8C D1 00 C0 4F 8E DB 8A | Other chunks |
bext | 74786562-ACF3-11D3-8CD1-00C04F8EDB8A | 62 65 78 74 F3 AC D3 11 8C D1 00 C0 4F 8E DB 8A | Other chunks |
| marker | ABF76256-392D-11D2-86C7-00C04F8EDB8A | 56 62 F7 AB 2D 39 D2 11 86 C7 00 C0 4F 8E DB 8A | Other chunks |
| summary list | 925F94BC-525A-11D2-86DC-00C04F8EDB8A | BC 94 5F 92 5A 52 D2 11 86 DC 00 C0 4F 8E DB 8A | Other chunks |
| acid | EA1C076D-EFA3-4C78-9057-7F79EE252AAE | 6D 07 1C EA A3 EF 78 4C 90 57 7F 79 EE 25 2A AE | Other chunks |
Sources differ on two of these. libsndfile’s test for levl swaps bytes
8 and 9 (D1 8C) and its test for bext has AA at
byte 7 and the same swap. The table follows the MultimediaWiki, whose GUIDs fit the
pattern of the others. A reader might accept both.
Example
A file holding two frames of 16-bit stereo PCM at 44,100 Hz. No padding is needed, since the data ends on a multiple of 8.
| Offset | Size | Field | Value |
|---|---|---|---|
| 0 | 16 | riff GUID | |
| 16 | 8 | file size | 70 00 00 00 00 00 00 00: 112 |
| 24 | 16 | wave GUID | |
| 40 | 16 | fmt GUID | |
| 56 | 8 | chunk size | 28 00 00 00 00 00 00 00: 40, the 24-byte header and 16 bytes of data |
| 64 | 16 | format fields | see Format and data |
| 80 | 16 | data GUID | |
| 96 | 8 | chunk size | 20 00 00 00 00 00 00 00: 32, the header and 8 bytes of samples |
| 104 | 8 | samples | two sample frames |