From 5408b89050727feeb6acf584a795ef5786f2f412 Mon Sep 17 00:00:00 2001 From: Iro <155815508+Iro96@users.noreply.github.com> Date: Wed, 3 Sep 2025 11:39:54 +0700 Subject: [PATCH] fix(audio): wrap buffer in Float32Array to allow safe indexing (#543) --- packages/audio/src/encoding/wav.ts | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/packages/audio/src/encoding/wav.ts b/packages/audio/src/encoding/wav.ts index e86dad5e1..6d955f9d0 100644 --- a/packages/audio/src/encoding/wav.ts +++ b/packages/audio/src/encoding/wav.ts @@ -7,8 +7,9 @@ function writeString(dataView: DataView, offset: number, string: string) { } export function toWav(buffer: ArrayBufferLike, sampleRate: number, channel = 1) { + const samples = new Float32Array(buffer) // allows indexing const numChannels = channel - const numSamples = buffer.byteLength + const numSamples = samples.length // Create the WAV file container const arrayBuffer = new ArrayBuffer(44 + numSamples * 2) @@ -34,10 +35,10 @@ export function toWav(buffer: ArrayBufferLike, sampleRate: number, channel = 1) writeString(dataView, 36, 'data') dataView.setUint32(40, numSamples * 2, true) - // Write the PCM samples + // PCM samples const offset = 44 for (let i = 0; i < numSamples; i++) { - const sample = Math.max(-1, Math.min(1, buffer[i])) + const sample = Math.max(-1, Math.min(1, samples[i])) const value = sample < 0 ? sample * 0x8000 : sample * 0x7FFF dataView.setInt16(offset + i * 2, value, true) }