diff --git a/src/features/editor/Timbre.js b/src/features/editor/Timbre.js index 130c58a..40ba78c 100644 --- a/src/features/editor/Timbre.js +++ b/src/features/editor/Timbre.js @@ -115,10 +115,18 @@ export default function Timbre(props) { /> - - - - +
+
+ + + +
+
- +
); } diff --git a/src/features/editor/parameters/Amp.js b/src/features/editor/parameters/Amp.js index 53adfc0..2826042 100644 --- a/src/features/editor/parameters/Amp.js +++ b/src/features/editor/parameters/Amp.js @@ -1,9 +1,8 @@ import React from 'react'; -import { Knob } from '../../utils/components'; +import { Knob, Checkbox } from '../../utils/components'; import Card from '../card'; import { useSelector, useDispatch } from 'react-redux'; import { selectById, parameterUpdated } from './parameterSlice.js'; -import { Slider, Checkbox } from '../../helpers/Helpers'; export default function Amp(props) { const parameters = useSelector((state) => selectById(state, props.id)); @@ -11,7 +10,83 @@ export default function Amp(props) { return ( -

Amp Level

+
+
+

Amp Level

+ + dispatch( + parameterUpdated({ + id: props.id, + changes: { ampLevel: value }, + }) + ) + } + /> +
+
+

Pan Pot

+ + dispatch( + parameterUpdated({ + id: props.id, + changes: { panpot: value }, + }) + ) + } + /> +
+
+
+
+

Keyboard Track

+ + dispatch( + parameterUpdated({ + id: props.id, + changes: { ampTrack: value }, + }) + ) + } + /> +
+
+

Distortion

+ + dispatch( + parameterUpdated({ + id: props.id, + changes: { distortion: value }, + }) + ) + } + /> +
+
+
+ ); +} + +export const VocoderAmp = (props) => { + const parameters = useSelector((state) => selectById(state, props.id)); + const dispatch = useDispatch(); + + return ( +
+ {`${props.name}`} + Amp Level -

PanPot

+ Direct Level dispatch( parameterUpdated({ id: props.id, - changes: { panpot: value }, + changes: { directLevel: value }, }) ) } /> -

Amp Keyboard Tracking

+ Amp Keyboard Tracking - dispatch( - parameterUpdated({ - id: props.id, - changes: { distortion: value }, - }) - ) - } - /> - - ); -} - -export const VocoderAmp = (props) => { - const parameters = useSelector((state) => selectById(state, props.id)); - const dispatch = useDispatch(); - - return ( -
- {`${props.name}`} - Amp Level - - dispatch( - parameterUpdated({ - id: props.id, - changes: { ampLevel: value }, - }) - ) - } - /> - Direct Level - - dispatch( - parameterUpdated({ - id: props.id, - changes: { directLevel: value }, - }) - ) - } - /> - Amp Keyboard Tracking - - dispatch( - parameterUpdated({ - id: props.id, - changes: { ampTrack: value }, - }) - ) - } - /> - dispatch( parameterUpdated({ diff --git a/src/features/editor/parameters/EG.js b/src/features/editor/parameters/EG.js index 03c4e65..787ac3f 100644 --- a/src/features/editor/parameters/EG.js +++ b/src/features/editor/parameters/EG.js @@ -1,83 +1,170 @@ import React from 'react'; +import Card from '../card'; import { useSelector, useDispatch } from 'react-redux'; import { selectById, parameterUpdated } from './parameterSlice.js'; -import { Slider, Checkbox } from '../../helpers/Helpers'; +import { Knob, Checkbox } from '../../utils/components'; export default function EG(props) { - const parameters = useSelector((state) => selectById(state, props.id)); + const parameters_eg_1 = useSelector((state) => selectById(state, props.id1)); + const parameters_eg_2 = useSelector((state) => selectById(state, props.id2)); const dispatch = useDispatch(); return ( -
- {`${props.name}`} - Attack - - dispatch( - parameterUpdated({ - id: props.id, - changes: { attack: value }, - }) - ) - } - /> - Decay - - dispatch( - parameterUpdated({ - id: props.id, - changes: { decay: value }, - }) - ) - } - /> - Sustain - - dispatch( - parameterUpdated({ - id: props.id, - changes: { sustain: value }, - }) - ) - } - /> - Release - - dispatch( - parameterUpdated({ - id: props.id, - changes: { release: value }, - }) - ) - } - /> - - dispatch( - parameterUpdated({ - id: props.id, - changes: { egReset: value }, - }) - ) - } - /> -
+ +
+
+

Attack

+ + dispatch( + parameterUpdated({ + id: props.id1, + changes: { attack: value }, + }) + ) + } + /> +
+
+

Decay

+ + dispatch( + parameterUpdated({ + id: props.id1, + changes: { decay: value }, + }) + ) + } + /> +
+
+

Sustain

+ + dispatch( + parameterUpdated({ + id: props.id1, + changes: { sustain: value }, + }) + ) + } + /> +
+
+

Release

+ + dispatch( + parameterUpdated({ + id: props.id1, + changes: { release: value }, + }) + ) + } + /> +
+
+

EG 1 Reset

+ + dispatch( + parameterUpdated({ + id: props.id1, + changes: { egReset: value }, + }) + ) + } + /> +
+
+
+
+

Attack

+ + dispatch( + parameterUpdated({ + id: props.id2, + changes: { attack: value }, + }) + ) + } + /> +
+
+

Decay

+ + dispatch( + parameterUpdated({ + id: props.id2, + changes: { decay: value }, + }) + ) + } + /> +
+
+

Sustain

+ + dispatch( + parameterUpdated({ + id: props.id2, + changes: { sustain: value }, + }) + ) + } + /> +
+
+

Release

+ + dispatch( + parameterUpdated({ + id: props.id2, + changes: { release: value }, + }) + ) + } + /> +
+
+

EG 2 Reset

+ + dispatch( + parameterUpdated({ + id: props.id2, + changes: { egReset: value }, + }) + ) + } + /> +
+
+
); } diff --git a/src/features/editor/parameters/Filter.js b/src/features/editor/parameters/Filter.js index ccac83e..326bcb5 100644 --- a/src/features/editor/parameters/Filter.js +++ b/src/features/editor/parameters/Filter.js @@ -11,8 +11,8 @@ export default function Filter(props) { return ( -
-

Filter Type

+
+

Filter Type

dispatch( parameterUpdated({ id: props.id, - changes: { tempoSync: value }, - }) - ) - } - /> - - dispatch( - parameterUpdated({ - id: props.id, - changes: { syncNote: value }, + changes: { waveform: value }, }) ) } />
- Frequency - - dispatch( - parameterUpdated({ - id: props.id, - changes: { frequency: value }, - }) - ) - } - /> -
+
+

Key Sync

+ + dispatch( + parameterUpdated({ + id: props.id, + changes: { syncNote: value }, + }) + ) + } + /> +
+
+
+

Frequency

+ + dispatch( + parameterUpdated({ + id: props.id, + changes: { frequency: value }, + }) + ) + } + /> +
+
+ ); } diff --git a/src/features/editor/parameters/Mixer.js b/src/features/editor/parameters/Mixer.js index df1c8b0..a39ec49 100644 --- a/src/features/editor/parameters/Mixer.js +++ b/src/features/editor/parameters/Mixer.js @@ -2,7 +2,7 @@ import React from 'react'; import Card from '../card'; import { useSelector, useDispatch } from 'react-redux'; import { selectById, parameterUpdated } from './parameterSlice.js'; -import { Slider } from '../../helpers/Helpers'; +import { Knob } from '../../utils/components'; export default function Mixer(props) { const parameters = useSelector((state) => selectById(state, props.id)); @@ -11,12 +11,11 @@ export default function Mixer(props) { return (
-
+

Volume 1

- dispatch( parameterUpdated({ @@ -27,12 +26,11 @@ export default function Mixer(props) { } />
-
+

Volume 2

- dispatch( parameterUpdated({ @@ -43,12 +41,11 @@ export default function Mixer(props) { } />
-
+

Volume 3

- dispatch( parameterUpdated({ diff --git a/src/features/editor/parameters/Patches.js b/src/features/editor/parameters/Patches.js index fb8be2e..7c72baf 100644 --- a/src/features/editor/parameters/Patches.js +++ b/src/features/editor/parameters/Patches.js @@ -1,66 +1,75 @@ import React from 'react'; import { useSelector, useDispatch } from 'react-redux'; import { selectById, parameterUpdated } from './parameterSlice.js'; +import Card from '../card'; +import { Select, Knob } from '../../utils/components'; import { Slider, SelectList } from '../../helpers/Helpers'; const Patch = (props) => { return ( -
- Source - - props.onChange({ - source: value, - destination: props.patch.destination, - modIntensity: props.patch.modIntensity, - }) - } - /> - Destination - - props.onChange({ - source: props.patch.source, - destination: value, - modIntensity: props.patch.modIntensity, - }) - } - /> - Mod Intensity - - props.onChange({ - source: props.patch.source, - destination: props.patch.destination, - modIntensity: value, - }) - } - /> +
+
+

Source

+ + props.onChange({ + source: props.patch.source, + destination: value, + modIntensity: props.patch.modIntensity, + }) + } + /> +
+
+

Mod Intensity

+ + props.onChange({ + source: props.patch.source, + destination: props.patch.destination, + modIntensity: value, + }) + } + /> +
); }; @@ -70,59 +79,57 @@ export default function Patches(props) { const dispatch = useDispatch(); return ( -
- {`${props.name}`} - - dispatch( - parameterUpdated({ - id: props.id, - changes: { - patch1: value, - }, - }) - ) - } - /> -
- - dispatch( - parameterUpdated({ - id: props.id, - changes: { - patch2: value, - }, - }) - ) - } - /> -
- - dispatch( - parameterUpdated({ - id: props.id, - changes: { patch3: value }, - }) - ) - } - /> -
- - dispatch( - parameterUpdated({ - id: props.id, - changes: { patch4: value }, - }) - ) - } - /> -
+ +
+ + dispatch( + parameterUpdated({ + id: props.id, + changes: { + patch1: value, + }, + }) + ) + } + /> + + dispatch( + parameterUpdated({ + id: props.id, + changes: { + patch2: value, + }, + }) + ) + } + /> + + dispatch( + parameterUpdated({ + id: props.id, + changes: { patch3: value }, + }) + ) + } + /> + + dispatch( + parameterUpdated({ + id: props.id, + changes: { patch4: value }, + }) + ) + } + /> +
+
); } diff --git a/src/features/editor/parameters/Pitch.js b/src/features/editor/parameters/Pitch.js index 0f710ad..11e64e2 100644 --- a/src/features/editor/parameters/Pitch.js +++ b/src/features/editor/parameters/Pitch.js @@ -2,7 +2,7 @@ import React from 'react'; import Card from '../card'; import { useSelector, useDispatch } from 'react-redux'; import { selectById, parameterUpdated } from './parameterSlice.js'; -import { Select } from '../../utils/components'; +import { Select, Knob } from '../../utils/components'; import { Slider } from '../../helpers/Helpers'; export default function Pitch(props) { @@ -11,31 +11,47 @@ export default function Pitch(props) { return ( -
-
-
-

- Voice Assign -

- + dispatch( + parameterUpdated({ + id: props.id, + changes: { voiceAssign: value }, + }) + ) + } + /> +
+
+

Trigger Mode

+ - dispatch( - parameterUpdated({ - id: props.id, - changes: { triggerMode: value }, - }) - ) - } - /> -
-
+

Portamento

- dispatch( @@ -118,11 +113,13 @@ export default function Pitch(props) { } />
-
+ +
+

Bend Range

- dispatch( @@ -134,13 +131,13 @@ export default function Pitch(props) { } />
-
+

Vibrato Intensity

- dispatch( @@ -152,7 +149,7 @@ export default function Pitch(props) { } />
-
+
); diff --git a/src/features/editor/parameters/VCO.js b/src/features/editor/parameters/VCO.js index 03a5824..e8107a4 100644 --- a/src/features/editor/parameters/VCO.js +++ b/src/features/editor/parameters/VCO.js @@ -44,7 +44,7 @@ export default function VCO(props) { />
-
+

Waveform Mod

-
+

LFO Mod

-
+
-
+
); } -export { Select, Knob }; +export { Select, Knob, Checkbox }; diff --git a/src/index.css b/src/index.css index 820ef8e..d2a5c7c 100644 --- a/src/index.css +++ b/src/index.css @@ -20,18 +20,21 @@ code { @layer base { h3 { - @apply pointer-events-none select-none; + @apply pointer-events-none select-none text-lg font-semibold text-gray-900; } } @layer components { .btn { - @apply mx-4 my-1 bg-gray-100 rounded-md w-32 h-10 border-transparent hover:bg-gray-200; + @apply w-2/3 font-semibold text-gray-700 rounded-md border px-2 py-2 border-gray-300 shadow-sm hover:bg-gray-50 focus:border-blue-500 focus:outline-none focus:ring-2 focus:ring-blue-500; } .btn:disabled { - @apply opacity-60 hover:bg-gray-100 cursor-default; + @apply line-through opacity-50 hover:bg-white cursor-default; } .select { @apply select-none block rounded-md border-gray-300 shadow-sm focus:border-indigo-300 focus:ring focus:ring-indigo-200 focus:ring-opacity-50; } + .checkbox { + @apply rounded-md border-2 text-blue-500 mt-2 w-6 h-6; + } }