AU Signature Format Specification & Recovery Example

AU Audio Signature Format: Specification & AU Recovery Example

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.

AU audiofile - signature inspection

More info:

AU Files Header:

offset size description
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, ...

AU Audio Format Specifications

Active@ File Recovery Custom Scripting Example

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)