The AU file format is a simple audio file format, being developed by Sun Microsystems. The format was common on on early Web pages.
Originally it was headerless, being simply 8-bit µ-law-encoded data at an 8000 Hz sample rate. Newer files have a header, an optional information chunk and then the data (in big endian format).
AU Audio files must have a signature (tag) .snd (hex: 2E 73 6E 64) at the beginning of the audio file.
AU file have a header that consists of six unsigned 32-bit words, which define: signature, data offset, data size, encoding, sample rate and number of channels.
Sum of data offset and data size gives audio file full length. All data values are stored in big-endian (most significant byte first) format.
Let's examine the sample
When inspecting sample.au file's text data using any Hex Viewer, like Active@ Disk Editor, which is included in Active@ File Recovery package, we can see it starts with a tag .snd (hex: 2E, 73, 6E, 64). Next to it, at offset 4, there is a data offset, which is 24 (hex: 00, 00, 00, 18), big-endian (highest byte first). Next 4 bytes at offset 8 define the size of the data in AU file: 1,652 (hex: 00 00 06 74). Total audio file size is 1,676 = 24 + 1,652 (sum of data offset and data size). Thus reading of all 1,652 consecutive bytes starting from the position of detected .snd header provide us with all AU file data.
|0||4||signature, must be 2E 73 6E 64 (four ASCII characters ".snd")|
|4||4||data offset in bytes, big-endian|
|8||4||data size in bytes, big-endian|
|12||4||encoding: 1 = 8-bit G.711 µ-law; 2 = 8-bit linear PCM; 3 = 16-bit linear PCM, ...|
|16||4||sample rate, the number of samples/second, big-endian|
|20||4||channels, the number of interleaved channels, e.g., 1 for mono, 2 for stereo, ...|
This example just specifies AU start signature and calculates file size based on size of data chunk.
Syntax of the signature definition language you can read here.
[SND_HEADER] DESCRIPTION=AU Audio File EXTENSION=au BEGIN=SND_BEGIN SCRIPT=SND_SCRIPT [SND_BEGIN] .snd=0|0 [SND_SCRIPT] value = read(dword, 12) if (value == 0) goto exit value = read(dword, 16) if (value == 0) goto exit value = read(dword, 20) if (value == 0) goto exit offset = read(dword, 4) offset = endian(dword, offset) if (offset < 24) goto exit value = and(offset, 3) if (value != 0) goto exit size = read(dword, 8) size = endian(dword, size) if (size == 0) goto exit size = sum(size, offset)
This document is available in PDF format,
which requires Adobe® Acrobat® Reader