ACIDCAT . FILE FORMAT REFERENCE

vawt Wavetable Anatomy

vawt containerPolymer / Sampler
rev 2026.07
magic vawt
endian little
container own
sample 76 61 77 74

A .wt is a vawt wavetable: a fixed 12-byte header, then raw samples -- 32-bit float, or 16-bit if one flag bit says so. The header names the length of one single-cycle wave and how many waves are stacked; the data is those waves laid end to end, frame-major, no interleave. Surge and Bitwig both write this container and disagree on exactly one thing: Bitwig stores int16, Surge stores float32, and only the flags word says which. Neither producer ever varies. The .wt extension is also shared with at least two unrelated formats, so dispatch on the magic, never on the name. Hover any field or byte to light its exact span and read the decode. Color marks kind, the way syntax highlighting does (see the key). Example: vawt + 2048 samples/wave + 64 waves, a real 512 KB float32 table.

file regions

Top to bottom, what a reader walks. There is no footer: the file is exactly 12 + frame_count * frame_samples * 2 bytes.

vawt header0x00 . 12 bytes . little-endian

The whole header, drawn below as a byte map. Four fields, all little-endian: the magic, the wave length, the wave count, and the offset where samples begin.

the whole header (12 bytes)

From a 64-wave Surge table. The last field decides how wide a sample is, and it is the one that gets misread.

sample data0x0C . to EOF

Immediately after the header: frame_count * frame_samples samples, laid out frame-major. They are 32-bit float unless flag 0x04 is set, in which case they are signed 16-bit. Wave 0's complete cycle comes first, then wave 1's, and so on. No per-wave header, no interleave. For int16, flag 0x08 selects full scale (-32768..+32767); without it a full-scale sample reaches only about +/-16384.

formatfloat32 LE, or int16 LE with flag 0x04; frame-major
per-wave bytesframe_samples * 4, or * 2 with flag 0x04
wave i at12 + i * frame_samples * width
total samplesframe_count * frame_samples
file size12 + total_samples * width, plus a <wtmeta> XML block if flag 0x10
wave-length variantsframe_samples in the wild

frame_samples is not fixed. 2048 is by far the most common.

2048the usual resolution, by far the most common
256lower-resolution tables, the next most common
1024rare
not vawtthe BWBM beat-map chunk lives inside a WAV; this is its own file