From d055ffa9415a56c5f4c35197597a66e7e2744c55 Mon Sep 17 00:00:00 2001 From: Oliver Bryan Date: Sun, 25 Jan 2026 11:32:25 +0000 Subject: [PATCH] keyboard + octave in sidebar --- src/Index.tsx | 39 +++++++++++++++++++++++++++++---------- 1 file changed, 29 insertions(+), 10 deletions(-) diff --git a/src/Index.tsx b/src/Index.tsx index e02623d..2318b24 100644 --- a/src/Index.tsx +++ b/src/Index.tsx @@ -1,7 +1,10 @@ import ShapeCanvas from "@/components/canvas/ShapeCanvas"; +import ColorKeyboard from "@/components/controls/ColorKeyboard"; +import OctaveSelector from "@/components/controls/OctaveSelector"; import PresetSelector from "@/components/controls/PresetSelector"; import { Slider } from "@/components/ui/slider"; import { Toggle } from "@/components/ui/toggle"; +import { colorScale, noteToFrequency } from "@/constants/colorScale"; import { useAudioContext } from "@/hooks/useAudioContext"; import { useShapeState } from "@/hooks/useShapeState"; import { useSynth } from "@/hooks/useSynth"; @@ -56,10 +59,27 @@ function Index() { nodes.oscillatorA.detune.value = detune; nodes.oscillatorB.detune.value = detune; + const note = + colorScale.find((entry) => entry.color.toLowerCase() === state.color.toLowerCase())?.note ?? + colorScale[0].note; + const frequency = noteToFrequency(note, state.octave); + nodes.oscillatorA.frequency.value = frequency; + nodes.oscillatorB.frequency.value = frequency; + const grain = mapGrainToNoise(state.grain); const noiseDb = grain === 0 ? Number.NEGATIVE_INFINITY : -40 + (-12 - -40) * grain; nodes.noise.volume.value = noiseDb; - }, [state.preset, state.roundness, state.size, state.wobble, state.grain, synthRef, pitchTime]); + }, [ + state.preset, + state.roundness, + state.size, + state.wobble, + state.grain, + state.color, + state.octave, + synthRef, + pitchTime, + ]); const sidebarContent = (
@@ -73,6 +93,14 @@ function Index() { Shape setState({ ...state, preset })} />
+
+ Note/Colour + setState({ ...state, color })} /> +
+
+ Octave + setState({ ...state, octave })} /> +
setState({ ...state, wobbleRandomness: v })} />
-
- Noise - setState({ ...state, grain: v })} - /> -
);