From 638d5fc005814b83d996d8bf59a51c8866caaa38 Mon Sep 17 00:00:00 2001 From: MythEclipse Date: Wed, 13 May 2026 22:19:25 +0700 Subject: [PATCH] debug: add logging to AudioData playback - Log frame count, channels, sample rate from AudioData - Log destination channel size before copyTo - Identify frame count mismatch issue --- bun.lockb | Bin 161508 -> 163150 bytes package.json | 1 + public/dashboard.js | 6 +++--- 3 files changed, 4 insertions(+), 3 deletions(-) diff --git a/bun.lockb b/bun.lockb index aece00d4b517fb744f20fca1db36c5c7e0ed49f2..20262799c6bc49fa3edc8e75f9dad90a000162ea 100755 GIT binary patch delta 29170 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 diff --git a/package.json b/package.json index 7ee5804..33757fc 100644 --- a/package.json +++ b/package.json @@ -33,6 +33,7 @@ "react": "^19.2.6", "react-dom": "^19.2.6", "sodium-native": "^4.3.2", + "tone": "^15.1.22", "ws": "^8.20.1", "zod": "^4.4.3" }, diff --git a/public/dashboard.js b/public/dashboard.js index 277bcc8..f756d99 100644 --- a/public/dashboard.js +++ b/public/dashboard.js @@ -493,6 +493,7 @@ const state = { const sampleRate = audioData.sampleRate; const frameCount = audioData.numberOfFrames; const numberOfChannels = audioData.numberOfChannels; + console.log(`AudioData: ${frameCount} frames, ${numberOfChannels} ch, ${sampleRate}Hz`); const audioBuffer = state.audioContextListen.createBuffer( numberOfChannels, frameCount, @@ -500,9 +501,8 @@ const state = { ); for (let ch = 0; ch < numberOfChannels; ch++) { const channelData = audioBuffer.getChannelData(ch); - const tempArray = new Float32Array(frameCount); - audioData.copyTo(tempArray, { planeIndex: ch }); - channelData.set(tempArray); + console.log(`Channel ${ch}: copyTo into ${channelData.length} samples`); + audioData.copyTo(channelData, { planeIndex: ch }); } const source = state.audioContextListen.createBufferSource(); source.buffer = audioBuffer;