From 71cfe8a16eadfaa2a9c424c5e6820f5e36a827b3 Mon Sep 17 00:00:00 2001 From: "[poww10s]" <[theironminer@gmail.com]> Date: Wed, 18 Nov 2020 17:59:20 -0500 Subject: [PATCH] add LFO component and add prop lists --- src/features/timbre/Timbre.js | 97 ++++++++++++++++++- src/features/timbre/parameters/LFO.js | 60 ++++++++++++ src/features/timbre/parameters/Mixer.js | 13 +-- src/features/timbre/parameters/VCO.js | 33 ++++++- .../timbre/parameters/parameterSlice.js | 8 ++ 5 files changed, 193 insertions(+), 18 deletions(-) create mode 100644 src/features/timbre/parameters/LFO.js diff --git a/src/features/timbre/Timbre.js b/src/features/timbre/Timbre.js index 46df65b..3ce663e 100644 --- a/src/features/timbre/Timbre.js +++ b/src/features/timbre/Timbre.js @@ -4,17 +4,110 @@ import Mixer from './parameters/Mixer'; import Pitch from './parameters/Pitch'; import Filter from './parameters/Filter'; import EG from './parameters/EG'; +import Amp from './parameters/Amp'; +import LFO from './parameters/LFO'; export function Timbre(props) { return (
- - + + + + +
); } diff --git a/src/features/timbre/parameters/LFO.js b/src/features/timbre/parameters/LFO.js new file mode 100644 index 0000000..abd7fa1 --- /dev/null +++ b/src/features/timbre/parameters/LFO.js @@ -0,0 +1,60 @@ +import React from 'react'; +import { useSelector, useDispatch } from 'react-redux'; +import { selectById, parameterUpdated } from './parameterSlice.js'; +import { Slider, SelectList, Checkbox } from '../../helpers/Helpers'; + +export default function LFO(props) { + const parameters = useSelector((state) => selectById(state, props.id)); + const dispatch = useDispatch(); + + return ( +
+ + dispatch( + parameterUpdated({ + id: props.id, + changes: { waveform: value }, + }) + ) + } + /> + + dispatch( + parameterUpdated({ + id: props.id, + changes: { keySync: value }, + }) + ) + } + /> + + dispatch( + parameterUpdated({ + id: props.id, + changes: { tempoSync: value }, + }) + ) + } + /> + + dispatch( + parameterUpdated({ + id: props.id, + changes: { frequency: value }, + }) + ) + } + /> +
+ ); +} diff --git a/src/features/timbre/parameters/Mixer.js b/src/features/timbre/parameters/Mixer.js index ccf13e5..f65b80f 100644 --- a/src/features/timbre/parameters/Mixer.js +++ b/src/features/timbre/parameters/Mixer.js @@ -1,18 +1,7 @@ import React from 'react'; import { useSelector, useDispatch } from 'react-redux'; import { selectById, parameterUpdated } from './parameterSlice.js'; - -const Slider = (props) => { - return ( - props.onChange(e.target.value)} - /> - ); -}; +import { Slider } from '../../helpers/Helpers'; export default function Mixer(props) { const parameters = useSelector((state) => selectById(state, props.id)); diff --git a/src/features/timbre/parameters/VCO.js b/src/features/timbre/parameters/VCO.js index 0c99d7c..1236294 100644 --- a/src/features/timbre/parameters/VCO.js +++ b/src/features/timbre/parameters/VCO.js @@ -9,6 +9,30 @@ export default function VCO(props) { const dispatch = useDispatch(); return (
+ + dispatch( + parameterUpdated({ + id: props.id, + changes: { waveform: value }, + }) + ) + } + /> + + dispatch( + parameterUpdated({ + id: props.id, + changes: { dwgsOrModType: value }, + }) + ) + } + /> - dispatch( parameterUpdated({ id: props.id, - changes: { waveform: value }, + changes: { lfoMod: value }, }) ) } diff --git a/src/features/timbre/parameters/parameterSlice.js b/src/features/timbre/parameters/parameterSlice.js index 9cf98f4..f4a223c 100644 --- a/src/features/timbre/parameters/parameterSlice.js +++ b/src/features/timbre/parameters/parameterSlice.js @@ -83,9 +83,17 @@ const parametersSlice = createSlice({ }, 'lfo1': { id: 'lfo1', + waveform: 'Saw', + keySync: 'Off', + tempoSync: false, + frequency: 0, }, 'lfo2': { id: 'lfo2', + waveform: 'Saw', + keySync: 'Off', + tempoSync: false, + frequency: 0, }, }, }),