wavFile(): Coder<WavFile>
Creates a coder for complete WAV files.
Encodes and decodes WAV files laid out as exactly three chunks in this order:
- RIFF header chunk
- Format chunk
- Data chunk with audio samples
Files carrying additional chunks (fact, LIST) or a different chunk order
are not handled; compose factChunk and listChunk manually for
those.
Complete WAV file encoding and decoding
Complete WAV file encoding and decoding
import { assertEquals } from "@std/assert"; import { wavFile } from "@binstruct/wav"; const wavCoder = wavFile(); const testWav = { riff: { chunkId: "RIFF" as const, chunkSize: 1038, // total file size minus the 8-byte RIFF header format: "WAVE" as const }, fmt: { chunkId: "fmt " as const, chunkSize: 18, // 16 PCM fields plus the 2-byte cbSize audioFormat: 1, // PCM numChannels: 1, // Mono sampleRate: 44100, byteRate: 88200, blockAlign: 2, bitsPerSample: 16, cbSize: 0 }, data: { chunkId: "data" as const, chunkSize: 1000, audioData: new Array(1000).fill(0) } }; const buffer = new Uint8Array(2048); const bytesWritten = wavCoder.encode(testWav, buffer); const [decoded, bytesRead] = wavCoder.decode(buffer); assertEquals(bytesRead, bytesWritten); assertEquals(bytesWritten, 1046); // 12 (RIFF) + 26 (fmt) + 1008 (data) assertEquals(decoded.riff.chunkId, "RIFF"); assertEquals(decoded.riff.format, "WAVE"); assertEquals(decoded.fmt.audioFormat, 1); assertEquals(decoded.fmt.numChannels, 1); assertEquals(decoded.fmt.sampleRate, 44100); assertEquals(decoded.data.audioData.length, 1000);
Coder<WavFile>
A coder that can encode/decode WavFile objects