function fmtChunk
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.

Examples

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);

Return Type

Coder<FmtChunk>

A coder that can encode/decode FmtChunk objects

Usage

import { fmtChunk } from ".";