diff --git a/lib/hooks/useMultiTrackPlayer.ts b/lib/hooks/useMultiTrackPlayer.ts index 3399a80..ba41797 100644 --- a/lib/hooks/useMultiTrackPlayer.ts +++ b/lib/hooks/useMultiTrackPlayer.ts @@ -152,7 +152,7 @@ export function useMultiTrackPlayer(tracks: Track[], masterVolume: number = 1) { const panNode = audioContext.createStereoPanner(); const analyserNode = audioContext.createAnalyser(); analyserNode.fftSize = 256; - analyserNode.smoothingTimeConstant = 0.3; + analyserNode.smoothingTimeConstant = 0.8; // Set gain based on track volume and solo/mute state const trackGain = getTrackGain(track, tracks); @@ -161,8 +161,10 @@ export function useMultiTrackPlayer(tracks: Track[], masterVolume: number = 1) { // Set pan panNode.pan.setValueAtTime(track.pan, audioContext.currentTime); - // Connect: source -> gain -> pan -> effects -> analyser -> master gain -> destination - source.connect(gainNode); + // Connect: source -> analyser -> gain -> pan -> effects -> master gain -> destination + // Analyser is before gain so it shows raw audio levels independent of volume fader + source.connect(analyserNode); + analyserNode.connect(gainNode); gainNode.connect(panNode); // Apply effect chain @@ -173,9 +175,8 @@ export function useMultiTrackPlayer(tracks: Track[], masterVolume: number = 1) { console.log('[MultiTrackPlayer] Effects:', track.effectChain.effects); const { outputNode, effectNodes } = applyEffectChain(audioContext, panNode, track.effectChain); - // Insert analyser after effects, before master gain - outputNode.connect(analyserNode); - analyserNode.connect(masterGain); + // Connect to master gain + outputNode.connect(masterGain); console.log('[MultiTrackPlayer] Effect output connected with', effectNodes.length, 'effect nodes'); // Start playback from current position @@ -404,7 +405,7 @@ export function useMultiTrackPlayer(tracks: Track[], masterVolume: number = 1) { const panNode = audioContext.createStereoPanner(); const analyserNode = audioContext.createAnalyser(); analyserNode.fftSize = 256; - analyserNode.smoothingTimeConstant = 0.3; + analyserNode.smoothingTimeConstant = 0.8; // Set gain based on track volume and solo/mute state const trackGain = getTrackGain(track, latestTracks); @@ -413,14 +414,15 @@ export function useMultiTrackPlayer(tracks: Track[], masterVolume: number = 1) { // Set pan panNode.pan.setValueAtTime(track.pan, audioContext.currentTime); - // Connect: source -> gain -> pan -> effects -> analyser -> master gain -> destination - source.connect(gainNode); + // Connect: source -> analyser -> gain -> pan -> effects -> master gain -> destination + // Analyser is before gain so it shows raw audio levels independent of volume fader + source.connect(analyserNode); + analyserNode.connect(gainNode); gainNode.connect(panNode); // Apply effect chain const { outputNode, effectNodes } = applyEffectChain(audioContext, panNode, track.effectChain); - outputNode.connect(analyserNode); - analyserNode.connect(masterGain); + outputNode.connect(masterGain); // Start playback from current position source.start(0, pausedAtRef.current);