mirror of
https://github.com/remvze/moodist.git
synced 2025-12-17 17:04:15 +00:00
fix(component): update oscillators frequency on preset change
Update oscillators frequency on preset change
This commit is contained in:
parent
348fc1e8c4
commit
dcc91e038d
1 changed files with 24 additions and 4 deletions
|
|
@ -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 () => {
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue