fmtChunk(): Coder<FmtChunk>
Creates a coder for format chunks.
Encodes and decodes format chunk structures supporting:
- Extended formats with cbSize field (18+ bytes)
- Multiple audio format codes (PCM, IEEE float, A-law, μ-law, extensible)
The cbSize field is always encoded and decoded, so the chunk payload is
always 18 bytes and chunkSize should be 18. The canonical 16-byte PCM
fmt chunk, which omits cbSize, is not supported.
Basic format chunk encoding and decoding
Basic format chunk encoding and decoding
import { assertEquals } from "@std/assert"; import { fmtChunk } from "@binstruct/wav"; const fmtCoder = fmtChunk(); const testFmt = { chunkId: "fmt ", chunkSize: 18, // 16 PCM fields plus the 2-byte cbSize audioFormat: 1, // PCM numChannels: 2, // Stereo sampleRate: 44100, byteRate: 176400, blockAlign: 4, bitsPerSample: 16, cbSize: 0 }; const buffer = new Uint8Array(100); const bytesWritten = fmtCoder.encode(testFmt, buffer); const [decoded, bytesRead] = fmtCoder.decode(buffer); assertEquals(bytesRead, 26); assertEquals(bytesWritten, 26); // 4 (chunkId) + 4 (chunkSize) + 18 (fmt data) assertEquals(decoded.chunkId, "fmt "); assertEquals(decoded.audioFormat, 1); assertEquals(decoded.numChannels, 2); assertEquals(decoded.sampleRate, 44100); assertEquals(decoded.bitsPerSample, 16);
Coder<FmtChunk>
A coder that can encode/decode FmtChunk objects