diff --git a/lib/hooks/useMultiTrackPlayer.ts b/lib/hooks/useMultiTrackPlayer.ts index ba41797..2bdd6bc 100644 --- a/lib/hooks/useMultiTrackPlayer.ts +++ b/lib/hooks/useMultiTrackPlayer.ts @@ -61,15 +61,15 @@ export function useMultiTrackPlayer(tracks: Track[], masterVolume: number = 1) { const track = tracksRef.current[index]; if (!track) return; - const dataArray = new Uint8Array(analyser.frequencyBinCount); - analyser.getByteTimeDomainData(dataArray); + const dataArray = new Float32Array(analyser.fftSize); + analyser.getFloatTimeDomainData(dataArray); - // Calculate peak level (more responsive than RMS for visual meters) + // Calculate peak level using float data (-1 to +1 range) let peak = 0; for (let i = 0; i < dataArray.length; i++) { - const normalized = Math.abs((dataArray[i] - 128) / 128); - if (normalized > peak) { - peak = normalized; + const abs = Math.abs(dataArray[i]); + if (abs > peak) { + peak = abs; } } diff --git a/lib/hooks/useRecording.ts b/lib/hooks/useRecording.ts index 606a98d..a120a2b 100644 --- a/lib/hooks/useRecording.ts +++ b/lib/hooks/useRecording.ts @@ -71,19 +71,19 @@ export function useRecording(): UseRecordingReturn { if (!analyserRef.current) return; const analyser = analyserRef.current; - const dataArray = new Uint8Array(analyser.frequencyBinCount); + const dataArray = new Float32Array(analyser.fftSize); const updateLevel = () => { if (!isMonitoringRef.current) return; - analyser.getByteTimeDomainData(dataArray); + analyser.getFloatTimeDomainData(dataArray); - // Calculate peak level (more responsive than RMS for visual meters) + // Calculate peak level using float data (-1 to +1 range) let peak = 0; for (let i = 0; i < dataArray.length; i++) { - const normalized = Math.abs((dataArray[i] - 128) / 128); - if (normalized > peak) { - peak = normalized; + const abs = Math.abs(dataArray[i]); + if (abs > peak) { + peak = abs; } }