fix(component): update oscillators frequency on preset change

Update oscillators frequency on preset change
This commit is contained in:
Daniele Lubrano 2025-03-26 14:48:47 +01:00
parent 348fc1e8c4
commit dcc91e038d

View file

@ -25,6 +25,16 @@ const presets: Preset[] = [
{ baseFrequency: 440, beatFrequency: 10, name: 'Custom' }, { baseFrequency: 440, beatFrequency: 10, name: 'Custom' },
]; ];
function computeBinauralBeatOscillatorFrequencies(
baseFrequency: number,
beatFrequency: number,
) {
return {
leftFrequency: baseFrequency - beatFrequency / 2,
rightFrequency: baseFrequency + beatFrequency / 2,
};
}
export function BinauralModal({ onClose, show }: BinauralProps) { export function BinauralModal({ onClose, show }: BinauralProps) {
const [baseFrequency, setBaseFrequency] = useState<number>(440); // Default to A4 note const [baseFrequency, setBaseFrequency] = useState<number>(440); // Default to A4 note
const [beatFrequency, setBeatFrequency] = useState<number>(10); // Default to 10 Hz difference const [beatFrequency, setBeatFrequency] = useState<number>(10); // Default to 10 Hz difference
@ -61,10 +71,10 @@ export function BinauralModal({ onClose, show }: BinauralProps) {
) )
return; return;
leftOscillatorRef.current.frequency.value = const { leftFrequency, rightFrequency } =
baseFrequency - beatFrequency / 2; computeBinauralBeatOscillatorFrequencies(baseFrequency, beatFrequency);
rightOscillatorRef.current.frequency.value = leftOscillatorRef.current.frequency.value = leftFrequency;
baseFrequency + beatFrequency / 2; rightOscillatorRef.current.frequency.value = rightFrequency;
// Pan oscillators to left and right // Pan oscillators to left and right
const leftPanner = audioContext.createStereoPanner(); const leftPanner = audioContext.createStereoPanner();
@ -104,6 +114,16 @@ export function BinauralModal({ onClose, show }: BinauralProps) {
} }
}, [volume]); }, [volume]);
useEffect(() => {
// Update base frequency for both left and right oscillators when it changes
if (leftOscillatorRef.current && rightOscillatorRef.current) {
const { leftFrequency, rightFrequency } =
computeBinauralBeatOscillatorFrequencies(baseFrequency, beatFrequency);
leftOscillatorRef.current.frequency.value = leftFrequency;
rightOscillatorRef.current.frequency.value = rightFrequency;
}
}, [baseFrequency, beatFrequency]);
useEffect(() => { useEffect(() => {
// Cleanup when component unmounts // Cleanup when component unmounts
return () => { return () => {