remove old styles and begin phase out old elements
This commit is contained in:
@@ -0,0 +1,7 @@
|
|||||||
|
module.exports = {
|
||||||
|
style: {
|
||||||
|
postcss: {
|
||||||
|
plugins: [require('tailwindcss'), require('autoprefixer')],
|
||||||
|
},
|
||||||
|
},
|
||||||
|
};
|
||||||
Generated
+581
-204
File diff suppressed because it is too large
Load Diff
+11
-5
@@ -3,7 +3,9 @@
|
|||||||
"version": "0.1.0",
|
"version": "0.1.0",
|
||||||
"private": true,
|
"private": true,
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@reduxjs/toolkit": "^1.4.0",
|
"@craco/craco": "^6.1.1",
|
||||||
|
"@reduxjs/toolkit": "^1.5.1",
|
||||||
|
"@tailwindcss/forms": "^0.3.2",
|
||||||
"@testing-library/jest-dom": "^4.2.4",
|
"@testing-library/jest-dom": "^4.2.4",
|
||||||
"@testing-library/react": "^9.5.0",
|
"@testing-library/react": "^9.5.0",
|
||||||
"@testing-library/user-event": "^7.2.1",
|
"@testing-library/user-event": "^7.2.1",
|
||||||
@@ -20,9 +22,9 @@
|
|||||||
"styled-components": "^5.2.1"
|
"styled-components": "^5.2.1"
|
||||||
},
|
},
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"start": "react-scripts start",
|
"start": "craco start",
|
||||||
"build": "react-scripts build",
|
"build": "craco build",
|
||||||
"test": "react-scripts test",
|
"test": "craco test",
|
||||||
"eject": "react-scripts eject"
|
"eject": "react-scripts eject"
|
||||||
},
|
},
|
||||||
"eslintConfig": {
|
"eslintConfig": {
|
||||||
@@ -41,6 +43,10 @@
|
|||||||
]
|
]
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"babel-plugin-styled-components": "^1.11.1"
|
"@tailwindcss/postcss7-compat": "^2.0.4",
|
||||||
|
"autoprefixer": "^9.8.6",
|
||||||
|
"babel-plugin-styled-components": "^1.11.1",
|
||||||
|
"postcss": "^7.0.35",
|
||||||
|
"tailwindcss": "npm:@tailwindcss/postcss7-compat@^2.0.4"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
-44
@@ -1,44 +0,0 @@
|
|||||||
.App {
|
|
||||||
text-align: center;
|
|
||||||
}
|
|
||||||
|
|
||||||
.App-logo {
|
|
||||||
height: 40vmin;
|
|
||||||
pointer-events: none;
|
|
||||||
}
|
|
||||||
|
|
||||||
@media (prefers-reduced-motion: no-preference) {
|
|
||||||
.App-logo {
|
|
||||||
animation: App-logo-float infinite 3s ease-in-out;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
.App-header {
|
|
||||||
min-height: 100vh;
|
|
||||||
display: flex;
|
|
||||||
flex-direction: row;
|
|
||||||
align-items: center;
|
|
||||||
justify-content: center;
|
|
||||||
font-size: calc(10px + 2vmin);
|
|
||||||
}
|
|
||||||
|
|
||||||
.App-link {
|
|
||||||
color: rgb(112, 76, 182);
|
|
||||||
}
|
|
||||||
.App-spacer {
|
|
||||||
min-height: 100vh;
|
|
||||||
min-width: 15vw;
|
|
||||||
border-right: 1px solid black;
|
|
||||||
}
|
|
||||||
|
|
||||||
@keyframes App-logo-float {
|
|
||||||
0% {
|
|
||||||
transform: translateY(0);
|
|
||||||
}
|
|
||||||
50% {
|
|
||||||
transform: translateY(10px);
|
|
||||||
}
|
|
||||||
100% {
|
|
||||||
transform: translateY(0px);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
+3
-8
@@ -1,17 +1,12 @@
|
|||||||
import React from 'react';
|
import React from 'react';
|
||||||
import Menu from './features/menu';
|
import Menu from './features/menu';
|
||||||
import TimbreSwitcher from './features/timbre/timbreSwitcher';
|
import TimbreSwitcher from './features/timbre/timbreSwitcher';
|
||||||
import './App.css';
|
|
||||||
|
|
||||||
function App() {
|
function App() {
|
||||||
return (
|
return (
|
||||||
<div className='App'>
|
<div className='grid grid-cols-6 grid-rows-1 gap-4 h-screen'>
|
||||||
<header className='App-header'>
|
<Menu className='col-span-1' />
|
||||||
<div className='App-spacer'>
|
<TimbreSwitcher className='col-span-5' />
|
||||||
<Menu />
|
|
||||||
</div>
|
|
||||||
<TimbreSwitcher />
|
|
||||||
</header>
|
|
||||||
</div>
|
</div>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,6 +1,5 @@
|
|||||||
import { useRef, useState, useEffect } from 'react';
|
import { useRef, useState, useEffect } from 'react';
|
||||||
import './menu.css';
|
import { Select } from '../utils/components';
|
||||||
import { SelectList } from '../helpers/Helpers';
|
|
||||||
import { useDispatch, useSelector } from 'react-redux';
|
import { useDispatch, useSelector } from 'react-redux';
|
||||||
import {
|
import {
|
||||||
parameterUpdateIndex,
|
parameterUpdateIndex,
|
||||||
@@ -31,10 +30,11 @@ export default function Menu() {
|
|||||||
}, [file, dispatch]);
|
}, [file, dispatch]);
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<div className='menu'>
|
<div className='flex flex-col justify-around border-solid border-r-2 border-gray-400 px-4'>
|
||||||
<div className='menu-patch-container'>
|
<div className='menu-patch-container'>
|
||||||
<div className='patch-name'>
|
<div className='patch-name'>
|
||||||
<input
|
<input
|
||||||
|
className='block w-full rounded-md bg-gray-100 border-transparent hover:bg-gray-200 focus:bg-white focus:ring-1'
|
||||||
placeholder='Patch Name'
|
placeholder='Patch Name'
|
||||||
type='text'
|
type='text'
|
||||||
maxLength='12'
|
maxLength='12'
|
||||||
@@ -49,32 +49,32 @@ export default function Menu() {
|
|||||||
}}
|
}}
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
<div className='patch-load'>
|
<div className='my-1 flex flex-col items-center'>
|
||||||
<button
|
<button
|
||||||
className='menu-button'
|
className='mx-4 my-1 bg-gray-100 rounded-md w-32 h-10 border-transparent hover:bg-gray-200'
|
||||||
onClick={() => {
|
onClick={() => {
|
||||||
dispatch(parameterRefreshAll());
|
dispatch(parameterRefreshAll());
|
||||||
}}>
|
}}>
|
||||||
New Patch
|
New Patch
|
||||||
</button>
|
</button>
|
||||||
<button
|
<button
|
||||||
className='menu-button'
|
className='mx-4 my-1 bg-gray-100 rounded-md w-32 h-10 border-transparent hover:bg-gray-200'
|
||||||
onClick={() => {
|
onClick={() => {
|
||||||
fileRef.current.click();
|
fileRef.current.click();
|
||||||
}}>
|
}}>
|
||||||
Load Patch
|
Load Patch
|
||||||
</button>
|
</button>
|
||||||
<button
|
<button
|
||||||
className='menu-button'
|
className='mx-4 my-1 bg-gray-100 rounded-md w-32 h-10 border-transparent hover:bg-gray-200'
|
||||||
onClick={() => {
|
onClick={() => {
|
||||||
return_file_from_store(state);
|
return_file_from_store(state);
|
||||||
}}>
|
}}>
|
||||||
Save Patch
|
Save Patch
|
||||||
</button>
|
</button>
|
||||||
<input
|
<input
|
||||||
|
className='hidden'
|
||||||
type='file'
|
type='file'
|
||||||
accept='.syx'
|
accept='.syx'
|
||||||
className='menu-file-input'
|
|
||||||
ref={fileRef}
|
ref={fileRef}
|
||||||
onChange={(e) => {
|
onChange={(e) => {
|
||||||
loadFile(e.target.files[0]);
|
loadFile(e.target.files[0]);
|
||||||
@@ -82,7 +82,8 @@ export default function Menu() {
|
|||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
<div className='patch-settings'>
|
<div className='patch-settings'>
|
||||||
<SelectList
|
<Select
|
||||||
|
className=''
|
||||||
value={state.patch.mode}
|
value={state.patch.mode}
|
||||||
list={[
|
list={[
|
||||||
{ value: 'Single' },
|
{ value: 'Single' },
|
||||||
|
|||||||
@@ -1,54 +0,0 @@
|
|||||||
.menu {
|
|
||||||
height: 100vh;
|
|
||||||
min-width: 15vw;
|
|
||||||
display: flex;
|
|
||||||
flex-direction: column;
|
|
||||||
flex-wrap: nowrap;
|
|
||||||
justify-content: space-around;
|
|
||||||
align-items: stretch;
|
|
||||||
}
|
|
||||||
|
|
||||||
.menu-patch-container > * {
|
|
||||||
margin-top: 10pt;
|
|
||||||
}
|
|
||||||
|
|
||||||
input[type='text'] {
|
|
||||||
font-family: 'Roboto', sans-serif;
|
|
||||||
text-indent: 8pt;
|
|
||||||
width: 70%;
|
|
||||||
padding: 6pt 0;
|
|
||||||
outline: none;
|
|
||||||
border-radius: 4pt;
|
|
||||||
border: 1px solid gainsboro;
|
|
||||||
}
|
|
||||||
input[type='text']:hover {
|
|
||||||
border-color: silver;
|
|
||||||
}
|
|
||||||
input[type='text']:focus {
|
|
||||||
border: 2px solid dodgerblue;
|
|
||||||
}
|
|
||||||
|
|
||||||
.menu-button {
|
|
||||||
width: 65%;
|
|
||||||
display: block;
|
|
||||||
padding: 4pt;
|
|
||||||
margin: 8px auto;
|
|
||||||
outline: none;
|
|
||||||
}
|
|
||||||
|
|
||||||
h2 {
|
|
||||||
text-align: left;
|
|
||||||
font-size: x-large;
|
|
||||||
font-weight: 400;
|
|
||||||
}
|
|
||||||
|
|
||||||
.menu-file-input {
|
|
||||||
display: none;
|
|
||||||
}
|
|
||||||
|
|
||||||
.patch-settings {
|
|
||||||
font-size: small;
|
|
||||||
width: 75%;
|
|
||||||
margin: 10pt auto;
|
|
||||||
line-height: 1.5em;
|
|
||||||
}
|
|
||||||
@@ -2,12 +2,11 @@ import React from 'react';
|
|||||||
import { useSelector } from 'react-redux';
|
import { useSelector } from 'react-redux';
|
||||||
import { selectById } from './timbreSlice.js';
|
import { selectById } from './timbreSlice.js';
|
||||||
import { ArpeggA, ArpeggB } from './parameters/Arpeggios';
|
import { ArpeggA, ArpeggB } from './parameters/Arpeggios';
|
||||||
import styles from './Timbre.module.css';
|
|
||||||
|
|
||||||
export default function Arpeggio(props) {
|
export default function Arpeggio(props) {
|
||||||
const ids = useSelector((state) => selectById(state, props.id));
|
const ids = useSelector((state) => selectById(state, props.id));
|
||||||
return (
|
return (
|
||||||
<div className={styles.timbreStyle}>
|
<div>
|
||||||
<ArpeggA id={ids.arpeggA} />
|
<ArpeggA id={ids.arpeggA} />
|
||||||
<ArpeggB id={ids.arpeggB} />
|
<ArpeggB id={ids.arpeggB} />
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -2,12 +2,11 @@ import React from 'react';
|
|||||||
import { useSelector } from 'react-redux';
|
import { useSelector } from 'react-redux';
|
||||||
import { ModFX, Delay, EQ } from './parameters/ModFX';
|
import { ModFX, Delay, EQ } from './parameters/ModFX';
|
||||||
import { selectById } from './timbreSlice.js';
|
import { selectById } from './timbreSlice.js';
|
||||||
import styles from './Timbre.module.css';
|
|
||||||
|
|
||||||
export default function Effects(props) {
|
export default function Effects(props) {
|
||||||
const ids = useSelector((state) => selectById(state, props.id));
|
const ids = useSelector((state) => selectById(state, props.id));
|
||||||
return (
|
return (
|
||||||
<div className={styles.timbreStyle}>
|
<div>
|
||||||
<ModFX id={ids.modfx} />
|
<ModFX id={ids.modfx} />
|
||||||
<Delay id={ids.delay} />
|
<Delay id={ids.delay} />
|
||||||
<EQ id={ids.eq} />
|
<EQ id={ids.eq} />
|
||||||
|
|||||||
@@ -9,12 +9,11 @@ import Amp from './parameters/Amp';
|
|||||||
import LFO from './parameters/LFO';
|
import LFO from './parameters/LFO';
|
||||||
import Patches from './parameters/Patches';
|
import Patches from './parameters/Patches';
|
||||||
import { selectById } from './timbreSlice.js';
|
import { selectById } from './timbreSlice.js';
|
||||||
import styles from './Timbre.module.css';
|
|
||||||
|
|
||||||
export default function Timbre(props) {
|
export default function Timbre(props) {
|
||||||
const ids = useSelector((state) => selectById(state, props.id));
|
const ids = useSelector((state) => selectById(state, props.id));
|
||||||
return (
|
return (
|
||||||
<div className={styles.timbreStyle}>
|
<div>
|
||||||
<VCO
|
<VCO
|
||||||
name='VCO 1'
|
name='VCO 1'
|
||||||
id={ids.vco1}
|
id={ids.vco1}
|
||||||
@@ -118,7 +117,7 @@ export default function Timbre(props) {
|
|||||||
<Amp name='Amp' id={ids.amp} />
|
<Amp name='Amp' id={ids.amp} />
|
||||||
<EG name='EG 1' id={ids.eg1} />
|
<EG name='EG 1' id={ids.eg1} />
|
||||||
<EG name='EG 2' id={ids.eg2} />
|
<EG name='EG 2' id={ids.eg2} />
|
||||||
<div className={styles.lineBreak} />
|
<div />
|
||||||
<LFO
|
<LFO
|
||||||
name='LFO 1'
|
name='LFO 1'
|
||||||
id={ids.lfo1}
|
id={ids.lfo1}
|
||||||
|
|||||||
@@ -1,130 +0,0 @@
|
|||||||
.timbreStyle {
|
|
||||||
display: flex;
|
|
||||||
flex-wrap: wrap;
|
|
||||||
flex-direction: row;
|
|
||||||
justify-content: center;
|
|
||||||
}
|
|
||||||
|
|
||||||
.lineBreak {
|
|
||||||
width: 0%;
|
|
||||||
}
|
|
||||||
|
|
||||||
@media only screen and (max-width: 1920px) {
|
|
||||||
.lineBreak {
|
|
||||||
width: 100%;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@media only screen and (max-width: 1440px) {
|
|
||||||
.lineBreak {
|
|
||||||
width: 0%;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@media only screen and (max-width: 990px) {
|
|
||||||
.lineBreak {
|
|
||||||
width: 0%;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@media only screen and (max-width: 920px) {
|
|
||||||
.lineBreak {
|
|
||||||
width: 100%;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
.buttonContainer {
|
|
||||||
position: fixed;
|
|
||||||
top: 0;
|
|
||||||
left: 25%;
|
|
||||||
}
|
|
||||||
|
|
||||||
.buttonContainer > button:hover {
|
|
||||||
background: white;
|
|
||||||
color: slateblue;
|
|
||||||
border: 2px solid slateblue;
|
|
||||||
}
|
|
||||||
.buttonContainer > button:focus {
|
|
||||||
background: slateblue;
|
|
||||||
color: white;
|
|
||||||
border: 2px solid slateblue;
|
|
||||||
}
|
|
||||||
|
|
||||||
.tabs {
|
|
||||||
height: 100vh;
|
|
||||||
display: flex;
|
|
||||||
flex-direction: column;
|
|
||||||
}
|
|
||||||
|
|
||||||
.tabList {
|
|
||||||
border-bottom: 1px solid black;
|
|
||||||
display: none;
|
|
||||||
flex-direction: row;
|
|
||||||
list-style-type: none;
|
|
||||||
justify-content: center;
|
|
||||||
top: 0;
|
|
||||||
padding: 0;
|
|
||||||
margin: 0;
|
|
||||||
width: 85vw;
|
|
||||||
background: white;
|
|
||||||
}
|
|
||||||
.tab {
|
|
||||||
height: 1.25em;
|
|
||||||
width: 4em;
|
|
||||||
background: white;
|
|
||||||
color: slategrey;
|
|
||||||
font-size: 0.75em;
|
|
||||||
margin: 0.75em 1em;
|
|
||||||
padding: 0.25em 1em;
|
|
||||||
border: 2px solid slategrey;
|
|
||||||
border-radius: 3px;
|
|
||||||
outline: none;
|
|
||||||
-webkit-touch-callout: none; /* iOS Safari */
|
|
||||||
-webkit-user-select: none; /* Safari */
|
|
||||||
-khtml-user-select: none; /* Konqueror HTML */
|
|
||||||
-moz-user-select: none; /* Old versions of Firefox */
|
|
||||||
-ms-user-select: none; /* Internet Explorer/Edge */
|
|
||||||
user-select: none;
|
|
||||||
transition: all 0.2s ease-in-out;
|
|
||||||
}
|
|
||||||
|
|
||||||
.tab:hover {
|
|
||||||
background: white;
|
|
||||||
color: slateblue;
|
|
||||||
border: 2px solid slateblue;
|
|
||||||
}
|
|
||||||
.selected,
|
|
||||||
.selected:hover {
|
|
||||||
background: slateblue;
|
|
||||||
color: white;
|
|
||||||
border: 2px solid slateblue;
|
|
||||||
transition: 0.2s ease-in-out;
|
|
||||||
}
|
|
||||||
@keyframes slideeffect {
|
|
||||||
0% {
|
|
||||||
opacity: 0.5;
|
|
||||||
}
|
|
||||||
100% {
|
|
||||||
opacity: 1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
.tabPanel {
|
|
||||||
padding: 1em 0;
|
|
||||||
height: 100%;
|
|
||||||
animation: slideeffect 0.6s ease-in-out;
|
|
||||||
opacity: 1;
|
|
||||||
overflow-y: scroll;
|
|
||||||
}
|
|
||||||
.tabPanel::-webkit-scrollbar {
|
|
||||||
width: 0.3em;
|
|
||||||
}
|
|
||||||
|
|
||||||
.tabPanel::-webkit-scrollbar-track,
|
|
||||||
.tabPanel::-webkit-scrollbar-thumb {
|
|
||||||
background-color: transparent;
|
|
||||||
}
|
|
||||||
|
|
||||||
.tabPanel:hover::-webkit-scrollbar-thumb {
|
|
||||||
background-color: lightgray;
|
|
||||||
border-radius: 6px;
|
|
||||||
}
|
|
||||||
@@ -10,105 +10,104 @@ import { VocoderFilter, FCMod } from './parameters/Filter';
|
|||||||
import { VocoderAmp } from './parameters/Amp';
|
import { VocoderAmp } from './parameters/Amp';
|
||||||
import Levels from './parameters/Levels';
|
import Levels from './parameters/Levels';
|
||||||
import Pans from './parameters/Pans';
|
import Pans from './parameters/Pans';
|
||||||
import styles from './Timbre.module.css';
|
|
||||||
|
|
||||||
export default function Vocoder(props) {
|
export default function Vocoder(props) {
|
||||||
const ids = useSelector((state) => selectById(state, props.id));
|
const ids = useSelector((state) => selectById(state, props.id));
|
||||||
return (
|
return (
|
||||||
<div className={styles.timbreStyle}>
|
<div>
|
||||||
<VCO
|
<VCO
|
||||||
name="VCO"
|
name='VCO'
|
||||||
id={ids.vco}
|
id={ids.vco}
|
||||||
waveforms={[
|
waveforms={[
|
||||||
{ value: 'Saw' },
|
{ value: 'Saw' },
|
||||||
{ value: 'Square' },
|
{ value: 'Square' },
|
||||||
{ value: 'Triangle' },
|
{ value: 'Triangle' },
|
||||||
{ value: 'Sine' },
|
{ value: 'Sine' },
|
||||||
{ value: 'Vox Wave' },
|
{ value: 'Vox Wave' },
|
||||||
{ value: 'DWGS' },
|
{ value: 'DWGS' },
|
||||||
{ value: 'Noise' },
|
{ value: 'Noise' },
|
||||||
{ value: 'Audio In' },
|
{ value: 'Audio In' },
|
||||||
]}
|
]}
|
||||||
dwgsOrModTypeName="DWGS"
|
dwgsOrModTypeName='DWGS'
|
||||||
dwgsOrModType={[
|
dwgsOrModType={[
|
||||||
{ value: 'SynSine1' },
|
{ value: 'SynSine1' },
|
||||||
{ value: 'SynSine2' },
|
{ value: 'SynSine2' },
|
||||||
{ value: 'SynSine3' },
|
{ value: 'SynSine3' },
|
||||||
{ value: 'SynSine4' },
|
{ value: 'SynSine4' },
|
||||||
{ value: 'SynSine5' },
|
{ value: 'SynSine5' },
|
||||||
{ value: 'SynSine6' },
|
{ value: 'SynSine6' },
|
||||||
{ value: 'SynSine7' },
|
{ value: 'SynSine7' },
|
||||||
{ value: 'SynBass1' },
|
{ value: 'SynBass1' },
|
||||||
{ value: 'SynBass2' },
|
{ value: 'SynBass2' },
|
||||||
{ value: 'SynBass3' },
|
{ value: 'SynBass3' },
|
||||||
{ value: 'SynBass4' },
|
{ value: 'SynBass4' },
|
||||||
{ value: 'SynBass5' },
|
{ value: 'SynBass5' },
|
||||||
{ value: 'SynBass6' },
|
{ value: 'SynBass6' },
|
||||||
{ value: 'SynBass7' },
|
{ value: 'SynBass7' },
|
||||||
{ value: 'SynWave1' },
|
{ value: 'SynWave1' },
|
||||||
{ value: 'SynWave2' },
|
{ value: 'SynWave2' },
|
||||||
{ value: 'SynWave3' },
|
{ value: 'SynWave3' },
|
||||||
{ value: 'SynWave4' },
|
{ value: 'SynWave4' },
|
||||||
{ value: 'SynWave5' },
|
{ value: 'SynWave5' },
|
||||||
{ value: 'SynWave6' },
|
{ value: 'SynWave6' },
|
||||||
{ value: 'SynWave7' },
|
{ value: 'SynWave7' },
|
||||||
{ value: 'SynWave8' },
|
{ value: 'SynWave8' },
|
||||||
{ value: 'SynWave9' },
|
{ value: 'SynWave9' },
|
||||||
{ value: '5thWave1' },
|
{ value: '5thWave1' },
|
||||||
{ value: '5thWave2' },
|
{ value: '5thWave2' },
|
||||||
{ value: '5thWave3' },
|
{ value: '5thWave3' },
|
||||||
{ value: 'Digi1' },
|
{ value: 'Digi1' },
|
||||||
{ value: 'Digi2' },
|
{ value: 'Digi2' },
|
||||||
{ value: 'Digi3' },
|
{ value: 'Digi3' },
|
||||||
{ value: 'Digi4' },
|
{ value: 'Digi4' },
|
||||||
{ value: 'Digi5' },
|
{ value: 'Digi5' },
|
||||||
{ value: 'Digi6' },
|
{ value: 'Digi6' },
|
||||||
{ value: 'Digi7' },
|
{ value: 'Digi7' },
|
||||||
{ value: 'Digi8' },
|
{ value: 'Digi8' },
|
||||||
{ value: 'Endless' },
|
{ value: 'Endless' },
|
||||||
{ value: 'E.Piano1' },
|
{ value: 'E.Piano1' },
|
||||||
{ value: 'E.Piano2' },
|
{ value: 'E.Piano2' },
|
||||||
{ value: 'E.Piano3' },
|
{ value: 'E.Piano3' },
|
||||||
{ value: 'E.Piano4' },
|
{ value: 'E.Piano4' },
|
||||||
{ value: 'Organ1' },
|
{ value: 'Organ1' },
|
||||||
{ value: 'Organ2' },
|
{ value: 'Organ2' },
|
||||||
{ value: 'Organ3' },
|
{ value: 'Organ3' },
|
||||||
{ value: 'Organ4' },
|
{ value: 'Organ4' },
|
||||||
{ value: 'Organ5' },
|
{ value: 'Organ5' },
|
||||||
{ value: 'Organ6' },
|
{ value: 'Organ6' },
|
||||||
{ value: 'Organ7' },
|
{ value: 'Organ7' },
|
||||||
{ value: 'Clav1' },
|
{ value: 'Clav1' },
|
||||||
{ value: 'Clav2' },
|
{ value: 'Clav2' },
|
||||||
{ value: 'Guitar1' },
|
{ value: 'Guitar1' },
|
||||||
{ value: 'Guitar2' },
|
{ value: 'Guitar2' },
|
||||||
{ value: 'Guitar3' },
|
{ value: 'Guitar3' },
|
||||||
{ value: 'Bass1' },
|
{ value: 'Bass1' },
|
||||||
{ value: 'Bass2' },
|
{ value: 'Bass2' },
|
||||||
{ value: 'Bass3' },
|
{ value: 'Bass3' },
|
||||||
{ value: 'Bass4' },
|
{ value: 'Bass4' },
|
||||||
{ value: 'Bass5' },
|
{ value: 'Bass5' },
|
||||||
{ value: 'Bell1' },
|
{ value: 'Bell1' },
|
||||||
{ value: 'Bell2' },
|
{ value: 'Bell2' },
|
||||||
{ value: 'Bell3' },
|
{ value: 'Bell3' },
|
||||||
{ value: 'Bell4' },
|
{ value: 'Bell4' },
|
||||||
{ value: 'Voice1' },
|
{ value: 'Voice1' },
|
||||||
{ value: 'Voice2' },
|
{ value: 'Voice2' },
|
||||||
{ value: 'Voice3' },
|
{ value: 'Voice3' },
|
||||||
{ value: 'Voice4' },
|
{ value: 'Voice4' },
|
||||||
]}
|
]}
|
||||||
/>
|
/>
|
||||||
<AudioIn name="Audio In" id={ids.audioIn} />
|
<AudioIn name='Audio In' id={ids.audioIn} />
|
||||||
<Mixer name="Mixer" id={ids.mixer} />
|
<Mixer name='Mixer' id={ids.mixer} />
|
||||||
<Pitch name="Pitch" id={ids.pitch} />
|
<Pitch name='Pitch' id={ids.pitch} />
|
||||||
<VocoderFilter name="Filter" id={ids.filter} />
|
<VocoderFilter name='Filter' id={ids.filter} />
|
||||||
<FCMod name="FC Mod" id={ids.fcMod} />
|
<FCMod name='FC Mod' id={ids.fcMod} />
|
||||||
<VocoderAmp name="Amp" id={ids.amp} />
|
<VocoderAmp name='Amp' id={ids.amp} />
|
||||||
<EG name="EG" id={ids.eg} />
|
<EG name='EG' id={ids.eg} />
|
||||||
<div className={styles.lineBreak} />
|
<div />
|
||||||
<LFO name="LFO 1" id={ids.lfo1} />
|
<LFO name='LFO 1' id={ids.lfo1} />
|
||||||
<LFO name="LFO 2" id={ids.lfo2} />
|
<LFO name='LFO 2' id={ids.lfo2} />
|
||||||
<Levels name="Levels" id={ids.levels} />
|
<Levels name='Levels' id={ids.levels} />
|
||||||
<Pans name="Pans" id={ids.pans} />
|
<Pans name='Pans' id={ids.pans} />
|
||||||
</div>
|
</div>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2,134 +2,133 @@ import React from 'react';
|
|||||||
import { useSelector, useDispatch } from 'react-redux';
|
import { useSelector, useDispatch } from 'react-redux';
|
||||||
import { selectById, parameterUpdated } from './parameterSlice.js';
|
import { selectById, parameterUpdated } from './parameterSlice.js';
|
||||||
import { Slider, Checkbox } from '../../helpers/Helpers';
|
import { Slider, Checkbox } from '../../helpers/Helpers';
|
||||||
import styles from './Parameters.module.css';
|
|
||||||
|
|
||||||
export default function Amp(props) {
|
export default function Amp(props) {
|
||||||
const parameters = useSelector((state) => selectById(state, props.id));
|
const parameters = useSelector((state) => selectById(state, props.id));
|
||||||
const dispatch = useDispatch();
|
const dispatch = useDispatch();
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<div className={styles.container}>
|
<div>
|
||||||
<span className={styles.header}>{`${props.name}`}</span>
|
<span>{`${props.name}`}</span>
|
||||||
Amp Level
|
Amp Level
|
||||||
<Slider
|
<Slider
|
||||||
parameter={parameters.ampLevel}
|
parameter={parameters.ampLevel}
|
||||||
min={0}
|
min={0}
|
||||||
max={127}
|
max={127}
|
||||||
onChange={(value) =>
|
onChange={(value) =>
|
||||||
dispatch(
|
dispatch(
|
||||||
parameterUpdated({
|
parameterUpdated({
|
||||||
id: props.id,
|
id: props.id,
|
||||||
changes: { ampLevel: value },
|
changes: { ampLevel: value },
|
||||||
})
|
})
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
/>
|
/>
|
||||||
PanPot
|
PanPot
|
||||||
<Slider
|
<Slider
|
||||||
parameter={parameters.panpot}
|
parameter={parameters.panpot}
|
||||||
min={-63}
|
min={-63}
|
||||||
max={63}
|
max={63}
|
||||||
onChange={(value) =>
|
onChange={(value) =>
|
||||||
dispatch(
|
dispatch(
|
||||||
parameterUpdated({
|
parameterUpdated({
|
||||||
id: props.id,
|
id: props.id,
|
||||||
changes: { panpot: value },
|
changes: { panpot: value },
|
||||||
})
|
})
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
/>
|
/>
|
||||||
Amp Keyboard Tracking
|
Amp Keyboard Tracking
|
||||||
<Slider
|
<Slider
|
||||||
parameter={parameters.ampTrack}
|
parameter={parameters.ampTrack}
|
||||||
min={-63}
|
min={-63}
|
||||||
max={63}
|
max={63}
|
||||||
onChange={(value) =>
|
onChange={(value) =>
|
||||||
dispatch(
|
dispatch(
|
||||||
parameterUpdated({
|
parameterUpdated({
|
||||||
id: props.id,
|
id: props.id,
|
||||||
changes: { ampTrack: value },
|
changes: { ampTrack: value },
|
||||||
})
|
})
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
/>
|
/>
|
||||||
<Checkbox
|
<Checkbox
|
||||||
name="Distortion"
|
name='Distortion'
|
||||||
parameter={parameters.distortion}
|
parameter={parameters.distortion}
|
||||||
onChange={(value) =>
|
onChange={(value) =>
|
||||||
dispatch(
|
dispatch(
|
||||||
parameterUpdated({
|
parameterUpdated({
|
||||||
id: props.id,
|
id: props.id,
|
||||||
changes: { distortion: value },
|
changes: { distortion: value },
|
||||||
})
|
})
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
export const VocoderAmp = (props) => {
|
export const VocoderAmp = (props) => {
|
||||||
const parameters = useSelector((state) => selectById(state, props.id));
|
const parameters = useSelector((state) => selectById(state, props.id));
|
||||||
const dispatch = useDispatch();
|
const dispatch = useDispatch();
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<div className={styles.container}>
|
<div>
|
||||||
<span className={styles.header}>{`${props.name}`}</span>
|
<span>{`${props.name}`}</span>
|
||||||
Amp Level
|
Amp Level
|
||||||
<Slider
|
<Slider
|
||||||
parameter={parameters.ampLevel}
|
parameter={parameters.ampLevel}
|
||||||
min={0}
|
min={0}
|
||||||
max={127}
|
max={127}
|
||||||
onChange={(value) =>
|
onChange={(value) =>
|
||||||
dispatch(
|
dispatch(
|
||||||
parameterUpdated({
|
parameterUpdated({
|
||||||
id: props.id,
|
id: props.id,
|
||||||
changes: { ampLevel: value },
|
changes: { ampLevel: value },
|
||||||
})
|
})
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
/>
|
/>
|
||||||
Direct Level
|
Direct Level
|
||||||
<Slider
|
<Slider
|
||||||
parameter={parameters.directLevel}
|
parameter={parameters.directLevel}
|
||||||
min={0}
|
min={0}
|
||||||
max={127}
|
max={127}
|
||||||
onChange={(value) =>
|
onChange={(value) =>
|
||||||
dispatch(
|
dispatch(
|
||||||
parameterUpdated({
|
parameterUpdated({
|
||||||
id: props.id,
|
id: props.id,
|
||||||
changes: { directLevel: value },
|
changes: { directLevel: value },
|
||||||
})
|
})
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
/>
|
/>
|
||||||
Amp Keyboard Tracking
|
Amp Keyboard Tracking
|
||||||
<Slider
|
<Slider
|
||||||
parameter={parameters.ampTrack}
|
parameter={parameters.ampTrack}
|
||||||
min={-63}
|
min={-63}
|
||||||
max={63}
|
max={63}
|
||||||
onChange={(value) =>
|
onChange={(value) =>
|
||||||
dispatch(
|
dispatch(
|
||||||
parameterUpdated({
|
parameterUpdated({
|
||||||
id: props.id,
|
id: props.id,
|
||||||
changes: { ampTrack: value },
|
changes: { ampTrack: value },
|
||||||
})
|
})
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
/>
|
/>
|
||||||
<Checkbox
|
<Checkbox
|
||||||
name="Distortion"
|
name='Distortion'
|
||||||
parameter={parameters.distortion}
|
parameter={parameters.distortion}
|
||||||
onChange={(value) =>
|
onChange={(value) =>
|
||||||
dispatch(
|
dispatch(
|
||||||
parameterUpdated({
|
parameterUpdated({
|
||||||
id: props.id,
|
id: props.id,
|
||||||
changes: { distortion: value },
|
changes: { distortion: value },
|
||||||
})
|
})
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -2,16 +2,15 @@ import React from 'react';
|
|||||||
import { useSelector, useDispatch } from 'react-redux';
|
import { useSelector, useDispatch } from 'react-redux';
|
||||||
import { selectById, parameterUpdated } from './parameterSlice.js';
|
import { selectById, parameterUpdated } from './parameterSlice.js';
|
||||||
import { Slider, SelectList, Checkbox } from '../../helpers/Helpers';
|
import { Slider, SelectList, Checkbox } from '../../helpers/Helpers';
|
||||||
import styles from './Parameters.module.css';
|
|
||||||
|
|
||||||
const ArpeggA = (props) => {
|
const ArpeggA = (props) => {
|
||||||
const parameters = useSelector((state) => selectById(state, props.id));
|
const parameters = useSelector((state) => selectById(state, props.id));
|
||||||
const dispatch = useDispatch();
|
const dispatch = useDispatch();
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<div className={styles.horizontalContainer}>
|
<div>
|
||||||
<span className={styles.header}>Arpeggio A.</span>
|
<span>Arpeggio A.</span>
|
||||||
<div className={styles.container}>
|
<div>
|
||||||
Tempo
|
Tempo
|
||||||
<Slider
|
<Slider
|
||||||
min={20}
|
min={20}
|
||||||
@@ -61,8 +60,8 @@ const ArpeggA = (props) => {
|
|||||||
}
|
}
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
<div className={styles.divider} />
|
<div />
|
||||||
<div className={styles.container}>
|
<div>
|
||||||
Type
|
Type
|
||||||
<SelectList
|
<SelectList
|
||||||
value={parameters.type}
|
value={parameters.type}
|
||||||
@@ -107,11 +106,11 @@ const ArpeggB = (props) => {
|
|||||||
const dispatch = useDispatch();
|
const dispatch = useDispatch();
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<div className={styles.horizontalContainer}>
|
<div>
|
||||||
<span className={styles.header}>Arpeggio B.</span>
|
<span>Arpeggio B.</span>
|
||||||
<div className={styles.container}>
|
<div>
|
||||||
<Checkbox
|
<Checkbox
|
||||||
name="Latch"
|
name='Latch'
|
||||||
parameter={parameters.latch}
|
parameter={parameters.latch}
|
||||||
onChange={(value) =>
|
onChange={(value) =>
|
||||||
dispatch(
|
dispatch(
|
||||||
@@ -137,7 +136,7 @@ const ArpeggB = (props) => {
|
|||||||
}
|
}
|
||||||
/>
|
/>
|
||||||
<Checkbox
|
<Checkbox
|
||||||
name="Key Sync"
|
name='Key Sync'
|
||||||
parameter={parameters.keySync}
|
parameter={parameters.keySync}
|
||||||
onChange={(value) =>
|
onChange={(value) =>
|
||||||
dispatch(
|
dispatch(
|
||||||
@@ -149,8 +148,8 @@ const ArpeggB = (props) => {
|
|||||||
}
|
}
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
<div className={styles.divider} />
|
<div />
|
||||||
<div className={styles.container}>
|
<div>
|
||||||
Last Step
|
Last Step
|
||||||
<SelectList
|
<SelectList
|
||||||
labelFunction={(v) => `Step ${v.value}`}
|
labelFunction={(v) => `Step ${v.value}`}
|
||||||
|
|||||||
@@ -2,83 +2,82 @@ import React from 'react';
|
|||||||
import { useSelector, useDispatch } from 'react-redux';
|
import { useSelector, useDispatch } from 'react-redux';
|
||||||
import { selectById, parameterUpdated } from './parameterSlice.js';
|
import { selectById, parameterUpdated } from './parameterSlice.js';
|
||||||
import { Slider, Checkbox } from '../../helpers/Helpers';
|
import { Slider, Checkbox } from '../../helpers/Helpers';
|
||||||
import styles from './Parameters.module.css';
|
|
||||||
|
|
||||||
export default function EG(props) {
|
export default function EG(props) {
|
||||||
const parameters = useSelector((state) => selectById(state, props.id));
|
const parameters = useSelector((state) => selectById(state, props.id));
|
||||||
const dispatch = useDispatch();
|
const dispatch = useDispatch();
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<div className={styles.container}>
|
<div>
|
||||||
<span className={styles.header}>{`${props.name}`}</span>
|
<span>{`${props.name}`}</span>
|
||||||
Attack
|
Attack
|
||||||
<Slider
|
<Slider
|
||||||
parameter={parameters.attack}
|
parameter={parameters.attack}
|
||||||
min={0}
|
min={0}
|
||||||
max={127}
|
max={127}
|
||||||
onChange={(value) =>
|
onChange={(value) =>
|
||||||
dispatch(
|
dispatch(
|
||||||
parameterUpdated({
|
parameterUpdated({
|
||||||
id: props.id,
|
id: props.id,
|
||||||
changes: { attack: value },
|
changes: { attack: value },
|
||||||
})
|
})
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
/>
|
/>
|
||||||
Decay
|
Decay
|
||||||
<Slider
|
<Slider
|
||||||
parameter={parameters.decay}
|
parameter={parameters.decay}
|
||||||
min={0}
|
min={0}
|
||||||
max={127}
|
max={127}
|
||||||
onChange={(value) =>
|
onChange={(value) =>
|
||||||
dispatch(
|
dispatch(
|
||||||
parameterUpdated({
|
parameterUpdated({
|
||||||
id: props.id,
|
id: props.id,
|
||||||
changes: { decay: value },
|
changes: { decay: value },
|
||||||
})
|
})
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
/>
|
/>
|
||||||
Sustain
|
Sustain
|
||||||
<Slider
|
<Slider
|
||||||
parameter={parameters.sustain}
|
parameter={parameters.sustain}
|
||||||
min={0}
|
min={0}
|
||||||
max={127}
|
max={127}
|
||||||
onChange={(value) =>
|
onChange={(value) =>
|
||||||
dispatch(
|
dispatch(
|
||||||
parameterUpdated({
|
parameterUpdated({
|
||||||
id: props.id,
|
id: props.id,
|
||||||
changes: { sustain: value },
|
changes: { sustain: value },
|
||||||
})
|
})
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
/>
|
/>
|
||||||
Release
|
Release
|
||||||
<Slider
|
<Slider
|
||||||
parameter={parameters.release}
|
parameter={parameters.release}
|
||||||
min={0}
|
min={0}
|
||||||
max={127}
|
max={127}
|
||||||
onChange={(value) =>
|
onChange={(value) =>
|
||||||
dispatch(
|
dispatch(
|
||||||
parameterUpdated({
|
parameterUpdated({
|
||||||
id: props.id,
|
id: props.id,
|
||||||
changes: { release: value },
|
changes: { release: value },
|
||||||
})
|
})
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
/>
|
/>
|
||||||
<Checkbox
|
<Checkbox
|
||||||
name="EG Reset"
|
name='EG Reset'
|
||||||
parameter={parameters.egReset}
|
parameter={parameters.egReset}
|
||||||
onChange={(value) =>
|
onChange={(value) =>
|
||||||
dispatch(
|
dispatch(
|
||||||
parameterUpdated({
|
parameterUpdated({
|
||||||
id: props.id,
|
id: props.id,
|
||||||
changes: { egReset: value },
|
changes: { egReset: value },
|
||||||
})
|
})
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2,186 +2,185 @@ import React from 'react';
|
|||||||
import { useSelector, useDispatch } from 'react-redux';
|
import { useSelector, useDispatch } from 'react-redux';
|
||||||
import { selectById, parameterUpdated } from './parameterSlice.js';
|
import { selectById, parameterUpdated } from './parameterSlice.js';
|
||||||
import { Slider, SelectList } from '../../helpers/Helpers';
|
import { Slider, SelectList } from '../../helpers/Helpers';
|
||||||
import styles from './Parameters.module.css';
|
|
||||||
|
|
||||||
export default function Filter(props) {
|
export default function Filter(props) {
|
||||||
const parameters = useSelector((state) => selectById(state, props.id));
|
const parameters = useSelector((state) => selectById(state, props.id));
|
||||||
const dispatch = useDispatch();
|
const dispatch = useDispatch();
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<div className={styles.container}>
|
<div>
|
||||||
<span className={styles.header}>{`${props.name}`}</span>
|
<span>{`${props.name}`}</span>
|
||||||
Filter Type
|
Filter Type
|
||||||
<SelectList
|
<SelectList
|
||||||
value={parameters.filterType}
|
value={parameters.filterType}
|
||||||
list={[
|
list={[
|
||||||
{ value: '-24db Low Pass' },
|
{ value: '-24db Low Pass' },
|
||||||
{ value: '-12db Low Pass' },
|
{ value: '-12db Low Pass' },
|
||||||
{ value: 'Band Pass' },
|
{ value: 'Band Pass' },
|
||||||
{ value: 'High Pass' },
|
{ value: 'High Pass' },
|
||||||
]}
|
]}
|
||||||
onChange={(value) =>
|
onChange={(value) =>
|
||||||
dispatch(
|
dispatch(
|
||||||
parameterUpdated({
|
parameterUpdated({
|
||||||
id: props.id,
|
id: props.id,
|
||||||
changes: { filterType: value },
|
changes: { filterType: value },
|
||||||
})
|
})
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
/>
|
/>
|
||||||
Cutoff
|
Cutoff
|
||||||
<Slider
|
<Slider
|
||||||
parameter={parameters.cutoff}
|
parameter={parameters.cutoff}
|
||||||
min={0}
|
min={0}
|
||||||
max={127}
|
max={127}
|
||||||
onChange={(value) =>
|
onChange={(value) =>
|
||||||
dispatch(
|
dispatch(
|
||||||
parameterUpdated({
|
parameterUpdated({
|
||||||
id: props.id,
|
id: props.id,
|
||||||
changes: { cutoff: value },
|
changes: { cutoff: value },
|
||||||
})
|
})
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
/>
|
/>
|
||||||
Resonance
|
Resonance
|
||||||
<Slider
|
<Slider
|
||||||
parameter={parameters.resonance}
|
parameter={parameters.resonance}
|
||||||
min={0}
|
min={0}
|
||||||
max={127}
|
max={127}
|
||||||
onChange={(value) =>
|
onChange={(value) =>
|
||||||
dispatch(
|
dispatch(
|
||||||
parameterUpdated({
|
parameterUpdated({
|
||||||
id: props.id,
|
id: props.id,
|
||||||
changes: { resonance: value },
|
changes: { resonance: value },
|
||||||
})
|
})
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
/>
|
/>
|
||||||
EG Intensity
|
EG Intensity
|
||||||
<Slider
|
<Slider
|
||||||
parameter={parameters.egIntensity}
|
parameter={parameters.egIntensity}
|
||||||
min={-63}
|
min={-63}
|
||||||
max={63}
|
max={63}
|
||||||
onChange={(value) =>
|
onChange={(value) =>
|
||||||
dispatch(
|
dispatch(
|
||||||
parameterUpdated({
|
parameterUpdated({
|
||||||
id: props.id,
|
id: props.id,
|
||||||
changes: { egIntensity: value },
|
changes: { egIntensity: value },
|
||||||
})
|
})
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
/>
|
/>
|
||||||
Keyboard Tracking
|
Keyboard Tracking
|
||||||
<Slider
|
<Slider
|
||||||
parameter={parameters.keyboardTrack}
|
parameter={parameters.keyboardTrack}
|
||||||
min={-63}
|
min={-63}
|
||||||
max={63}
|
max={63}
|
||||||
onChange={(value) =>
|
onChange={(value) =>
|
||||||
dispatch(
|
dispatch(
|
||||||
parameterUpdated({
|
parameterUpdated({
|
||||||
id: props.id,
|
id: props.id,
|
||||||
changes: { keyboardTrack: value },
|
changes: { keyboardTrack: value },
|
||||||
})
|
})
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
export const VocoderFilter = (props) => {
|
export const VocoderFilter = (props) => {
|
||||||
const parameters = useSelector((state) => selectById(state, props.id));
|
const parameters = useSelector((state) => selectById(state, props.id));
|
||||||
const dispatch = useDispatch();
|
const dispatch = useDispatch();
|
||||||
return (
|
return (
|
||||||
<div className={styles.container}>
|
<div>
|
||||||
<span className={styles.header}>{`${props.name}`}</span>
|
<span>{`${props.name}`}</span>
|
||||||
Cutoff
|
Cutoff
|
||||||
<Slider
|
<Slider
|
||||||
parameter={parameters.cutoff}
|
parameter={parameters.cutoff}
|
||||||
min={0}
|
min={0}
|
||||||
max={127}
|
max={127}
|
||||||
onChange={(value) =>
|
onChange={(value) =>
|
||||||
dispatch(
|
dispatch(
|
||||||
parameterUpdated({
|
parameterUpdated({
|
||||||
id: props.id,
|
id: props.id,
|
||||||
changes: { cutoff: value },
|
changes: { cutoff: value },
|
||||||
})
|
})
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
/>
|
/>
|
||||||
Resonance
|
Resonance
|
||||||
<Slider
|
<Slider
|
||||||
parameter={parameters.resonance}
|
parameter={parameters.resonance}
|
||||||
min={0}
|
min={0}
|
||||||
max={127}
|
max={127}
|
||||||
onChange={(value) =>
|
onChange={(value) =>
|
||||||
dispatch(
|
dispatch(
|
||||||
parameterUpdated({
|
parameterUpdated({
|
||||||
id: props.id,
|
id: props.id,
|
||||||
changes: { resonance: value },
|
changes: { resonance: value },
|
||||||
})
|
})
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
/>
|
/>
|
||||||
EF Sense
|
EF Sense
|
||||||
<Slider
|
<Slider
|
||||||
parameter={parameters.efSense}
|
parameter={parameters.efSense}
|
||||||
min={0}
|
min={0}
|
||||||
max={127}
|
max={127}
|
||||||
onChange={(value) =>
|
onChange={(value) =>
|
||||||
dispatch(
|
dispatch(
|
||||||
parameterUpdated({
|
parameterUpdated({
|
||||||
id: props.id,
|
id: props.id,
|
||||||
changes: { efSense: value },
|
changes: { efSense: value },
|
||||||
})
|
})
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
|
||||||
export const FCMod = (props) => {
|
export const FCMod = (props) => {
|
||||||
const parameters = useSelector((state) => selectById(state, props.id));
|
const parameters = useSelector((state) => selectById(state, props.id));
|
||||||
const dispatch = useDispatch();
|
const dispatch = useDispatch();
|
||||||
return (
|
return (
|
||||||
<div className={styles.container}>
|
<div>
|
||||||
<span className={styles.header}>{`${props.name}`}</span>
|
<span>{`${props.name}`}</span>
|
||||||
Source
|
Source
|
||||||
<SelectList
|
<SelectList
|
||||||
value={parameters.source}
|
value={parameters.source}
|
||||||
list={[
|
list={[
|
||||||
{ value: 'Amp EG' },
|
{ value: 'Amp EG' },
|
||||||
{ value: 'LFO 1' },
|
{ value: 'LFO 1' },
|
||||||
{ value: 'LFO 2' },
|
{ value: 'LFO 2' },
|
||||||
{ value: 'Velocity' },
|
{ value: 'Velocity' },
|
||||||
{ value: 'Keyboard Track' },
|
{ value: 'Keyboard Track' },
|
||||||
{ value: 'Pitch Bend' },
|
{ value: 'Pitch Bend' },
|
||||||
{ value: 'Mod Wheel' },
|
{ value: 'Mod Wheel' },
|
||||||
]}
|
]}
|
||||||
onChange={(value) =>
|
onChange={(value) =>
|
||||||
dispatch(
|
dispatch(
|
||||||
parameterUpdated({
|
parameterUpdated({
|
||||||
id: props.id,
|
id: props.id,
|
||||||
changes: { source: value },
|
changes: { source: value },
|
||||||
})
|
})
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
/>
|
/>
|
||||||
Intensity
|
Intensity
|
||||||
<Slider
|
<Slider
|
||||||
parameter={parameters.intensity}
|
parameter={parameters.intensity}
|
||||||
min={0}
|
min={0}
|
||||||
max={127}
|
max={127}
|
||||||
onChange={(value) =>
|
onChange={(value) =>
|
||||||
dispatch(
|
dispatch(
|
||||||
parameterUpdated({
|
parameterUpdated({
|
||||||
id: props.id,
|
id: props.id,
|
||||||
changes: { intensity: value },
|
changes: { intensity: value },
|
||||||
})
|
})
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -2,15 +2,14 @@ import React from 'react';
|
|||||||
import { useSelector, useDispatch } from 'react-redux';
|
import { useSelector, useDispatch } from 'react-redux';
|
||||||
import { selectById, parameterUpdated } from './parameterSlice.js';
|
import { selectById, parameterUpdated } from './parameterSlice.js';
|
||||||
import { Slider, SelectList, Checkbox } from '../../helpers/Helpers';
|
import { Slider, SelectList, Checkbox } from '../../helpers/Helpers';
|
||||||
import styles from './Parameters.module.css';
|
|
||||||
|
|
||||||
export default function LFO(props) {
|
export default function LFO(props) {
|
||||||
const parameters = useSelector((state) => selectById(state, props.id));
|
const parameters = useSelector((state) => selectById(state, props.id));
|
||||||
const dispatch = useDispatch();
|
const dispatch = useDispatch();
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<div className={styles.lfo}>
|
<div>
|
||||||
<span className={styles.header}>{`${props.name}`}</span>
|
<span>{`${props.name}`}</span>
|
||||||
LFO Waveform
|
LFO Waveform
|
||||||
<SelectList
|
<SelectList
|
||||||
value={parameters.waveform}
|
value={parameters.waveform}
|
||||||
|
|||||||
@@ -1,133 +1,132 @@
|
|||||||
import React from 'react';
|
import React from 'react';
|
||||||
import { useSelector, useDispatch } from 'react-redux';
|
import { useSelector, useDispatch } from 'react-redux';
|
||||||
import { selectById, parameterUpdated } from './parameterSlice.js';
|
import { selectById, parameterUpdated } from './parameterSlice.js';
|
||||||
import { Slider} from '../../helpers/Helpers';
|
import { Slider } from '../../helpers/Helpers';
|
||||||
import styles from './Parameters.module.css';
|
|
||||||
|
|
||||||
export default function Levels(props) {
|
export default function Levels(props) {
|
||||||
const parameters = useSelector((state) => selectById(state, props.id));
|
const parameters = useSelector((state) => selectById(state, props.id));
|
||||||
const dispatch = useDispatch();
|
const dispatch = useDispatch();
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<div className={styles.horizontalContainer}>
|
<div>
|
||||||
<span className={styles.header}>{`${props.name}`}</span>
|
<span>{`${props.name}`}</span>
|
||||||
<div className={styles.container}>
|
<div>
|
||||||
Level 1
|
Level 1
|
||||||
<Slider
|
<Slider
|
||||||
min={0}
|
min={0}
|
||||||
max={127}
|
max={127}
|
||||||
parameter={parameters.level1}
|
parameter={parameters.level1}
|
||||||
onChange={(value) =>
|
onChange={(value) =>
|
||||||
dispatch(
|
dispatch(
|
||||||
parameterUpdated({
|
parameterUpdated({
|
||||||
id: props.id,
|
id: props.id,
|
||||||
changes: { level1: value },
|
changes: { level1: value },
|
||||||
})
|
})
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
/>
|
/>
|
||||||
Level 2
|
Level 2
|
||||||
<Slider
|
<Slider
|
||||||
min={0}
|
min={0}
|
||||||
max={127}
|
max={127}
|
||||||
parameter={parameters.level2}
|
parameter={parameters.level2}
|
||||||
onChange={(value) =>
|
onChange={(value) =>
|
||||||
dispatch(
|
dispatch(
|
||||||
parameterUpdated({
|
parameterUpdated({
|
||||||
id: props.id,
|
id: props.id,
|
||||||
changes: { level2: value },
|
changes: { level2: value },
|
||||||
})
|
})
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
/>
|
/>
|
||||||
Level 3
|
Level 3
|
||||||
<Slider
|
<Slider
|
||||||
min={0}
|
min={0}
|
||||||
max={127}
|
max={127}
|
||||||
parameter={parameters.level3}
|
parameter={parameters.level3}
|
||||||
onChange={(value) =>
|
onChange={(value) =>
|
||||||
dispatch(
|
dispatch(
|
||||||
parameterUpdated({
|
parameterUpdated({
|
||||||
id: props.id,
|
id: props.id,
|
||||||
changes: { level3: value },
|
changes: { level3: value },
|
||||||
})
|
})
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
/>
|
/>
|
||||||
Level 4
|
Level 4
|
||||||
<Slider
|
<Slider
|
||||||
min={0}
|
min={0}
|
||||||
max={127}
|
max={127}
|
||||||
parameter={parameters.level4}
|
parameter={parameters.level4}
|
||||||
onChange={(value) =>
|
onChange={(value) =>
|
||||||
dispatch(
|
dispatch(
|
||||||
parameterUpdated({
|
parameterUpdated({
|
||||||
id: props.id,
|
id: props.id,
|
||||||
changes: { level4: value },
|
changes: { level4: value },
|
||||||
})
|
})
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
<div className={styles.divider}/>
|
<div />
|
||||||
<div className={styles.container}>
|
<div>
|
||||||
Level 5
|
Level 5
|
||||||
<Slider
|
<Slider
|
||||||
min={0}
|
min={0}
|
||||||
max={127}
|
max={127}
|
||||||
parameter={parameters.level5}
|
parameter={parameters.level5}
|
||||||
onChange={(value) =>
|
onChange={(value) =>
|
||||||
dispatch(
|
dispatch(
|
||||||
parameterUpdated({
|
parameterUpdated({
|
||||||
id: props.id,
|
id: props.id,
|
||||||
changes: { level5: value },
|
changes: { level5: value },
|
||||||
})
|
})
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
/>
|
/>
|
||||||
Level 6
|
Level 6
|
||||||
<Slider
|
<Slider
|
||||||
min={0}
|
min={0}
|
||||||
max={127}
|
max={127}
|
||||||
parameter={parameters.level6}
|
parameter={parameters.level6}
|
||||||
onChange={(value) =>
|
onChange={(value) =>
|
||||||
dispatch(
|
dispatch(
|
||||||
parameterUpdated({
|
parameterUpdated({
|
||||||
id: props.id,
|
id: props.id,
|
||||||
changes: { level6: value },
|
changes: { level6: value },
|
||||||
})
|
})
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
/>
|
/>
|
||||||
Level 7
|
Level 7
|
||||||
<Slider
|
<Slider
|
||||||
min={0}
|
min={0}
|
||||||
max={127}
|
max={127}
|
||||||
parameter={parameters.level7}
|
parameter={parameters.level7}
|
||||||
onChange={(value) =>
|
onChange={(value) =>
|
||||||
dispatch(
|
dispatch(
|
||||||
parameterUpdated({
|
parameterUpdated({
|
||||||
id: props.id,
|
id: props.id,
|
||||||
changes: { level7: value },
|
changes: { level7: value },
|
||||||
})
|
})
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
/>
|
/>
|
||||||
Level 8
|
Level 8
|
||||||
<Slider
|
<Slider
|
||||||
min={0}
|
min={0}
|
||||||
max={127}
|
max={127}
|
||||||
parameter={parameters.level8}
|
parameter={parameters.level8}
|
||||||
onChange={(value) =>
|
onChange={(value) =>
|
||||||
dispatch(
|
dispatch(
|
||||||
parameterUpdated({
|
parameterUpdated({
|
||||||
id: props.id,
|
id: props.id,
|
||||||
changes: { level8: value },
|
changes: { level8: value },
|
||||||
})
|
})
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2,58 +2,56 @@ import React from 'react';
|
|||||||
import { useSelector, useDispatch } from 'react-redux';
|
import { useSelector, useDispatch } from 'react-redux';
|
||||||
import { selectById, parameterUpdated } from './parameterSlice.js';
|
import { selectById, parameterUpdated } from './parameterSlice.js';
|
||||||
import { Slider } from '../../helpers/Helpers';
|
import { Slider } from '../../helpers/Helpers';
|
||||||
import styles from './Parameters.module.css';
|
|
||||||
|
|
||||||
export default function Mixer(props) {
|
export default function Mixer(props) {
|
||||||
const parameters = useSelector((state) => selectById(state, props.id));
|
const parameters = useSelector((state) => selectById(state, props.id));
|
||||||
const dispatch = useDispatch();
|
const dispatch = useDispatch();
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<div className={styles.container}>
|
<div>
|
||||||
<span className={styles.header}>{`${props.name}`}</span>
|
<span>{`${props.name}`}</span>
|
||||||
Volume 1
|
Volume 1
|
||||||
<Slider
|
<Slider
|
||||||
min={0}
|
min={0}
|
||||||
max={127}
|
max={127}
|
||||||
parameter={parameters.vol1}
|
parameter={parameters.vol1}
|
||||||
onChange={(value) =>
|
onChange={(value) =>
|
||||||
dispatch(
|
dispatch(
|
||||||
parameterUpdated({
|
parameterUpdated({
|
||||||
id: props.id,
|
id: props.id,
|
||||||
changes: { vol1: value },
|
changes: { vol1: value },
|
||||||
})
|
})
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
/>
|
/>
|
||||||
Volume 2
|
Volume 2
|
||||||
<Slider
|
<Slider
|
||||||
min={0}
|
min={0}
|
||||||
max={127}
|
max={127}
|
||||||
parameter={parameters.vol2}
|
parameter={parameters.vol2}
|
||||||
onChange={(value) =>
|
onChange={(value) =>
|
||||||
dispatch(
|
dispatch(
|
||||||
parameterUpdated({
|
parameterUpdated({
|
||||||
id: props.id,
|
id: props.id,
|
||||||
changes: { vol2: value },
|
changes: { vol2: value },
|
||||||
})
|
})
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
/>
|
/>
|
||||||
Volume 3
|
Volume 3
|
||||||
<Slider
|
<Slider
|
||||||
className={styles.slider}
|
min={0}
|
||||||
min={0}
|
max={127}
|
||||||
max={127}
|
parameter={parameters.vol3}
|
||||||
parameter={parameters.vol3}
|
onChange={(value) =>
|
||||||
onChange={(value) =>
|
dispatch(
|
||||||
dispatch(
|
parameterUpdated({
|
||||||
parameterUpdated({
|
id: props.id,
|
||||||
id: props.id,
|
changes: { vol3: value },
|
||||||
changes: { vol3: value },
|
})
|
||||||
})
|
)
|
||||||
)
|
}
|
||||||
}
|
/>
|
||||||
/>
|
</div>
|
||||||
</div>
|
);
|
||||||
);
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2,15 +2,14 @@ import React from 'react';
|
|||||||
import { useSelector, useDispatch } from 'react-redux';
|
import { useSelector, useDispatch } from 'react-redux';
|
||||||
import { selectById, parameterUpdated } from './parameterSlice.js';
|
import { selectById, parameterUpdated } from './parameterSlice.js';
|
||||||
import { Slider, SelectList, Checkbox } from '../../helpers/Helpers';
|
import { Slider, SelectList, Checkbox } from '../../helpers/Helpers';
|
||||||
import styles from './Parameters.module.css';
|
|
||||||
|
|
||||||
const ModFX = (props) => {
|
const ModFX = (props) => {
|
||||||
const parameters = useSelector((state) => selectById(state, props.id));
|
const parameters = useSelector((state) => selectById(state, props.id));
|
||||||
const dispatch = useDispatch();
|
const dispatch = useDispatch();
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<div className={styles.container}>
|
<div>
|
||||||
<span className={styles.header}>Mod FX</span>
|
<span>Mod FX</span>
|
||||||
Mod Type
|
Mod Type
|
||||||
<SelectList
|
<SelectList
|
||||||
value={parameters.type}
|
value={parameters.type}
|
||||||
@@ -65,8 +64,8 @@ const Delay = (props) => {
|
|||||||
const dispatch = useDispatch();
|
const dispatch = useDispatch();
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<div className={styles.container}>
|
<div>
|
||||||
<span className={styles.header}>Delay</span>
|
<span>Delay</span>
|
||||||
Delay Type
|
Delay Type
|
||||||
<SelectList
|
<SelectList
|
||||||
value={parameters.type}
|
value={parameters.type}
|
||||||
@@ -85,7 +84,7 @@ const Delay = (props) => {
|
|||||||
}
|
}
|
||||||
/>
|
/>
|
||||||
<Checkbox
|
<Checkbox
|
||||||
name="Tempo Sync"
|
name='Tempo Sync'
|
||||||
parameter={parameters.tempoSync}
|
parameter={parameters.tempoSync}
|
||||||
onChange={(value) =>
|
onChange={(value) =>
|
||||||
dispatch(
|
dispatch(
|
||||||
@@ -169,8 +168,8 @@ const EQ = (props) => {
|
|||||||
const dispatch = useDispatch();
|
const dispatch = useDispatch();
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<div className={styles.container}>
|
<div>
|
||||||
<span className={styles.header}>EQ</span>
|
<span>EQ</span>
|
||||||
Low EQ Frequency
|
Low EQ Frequency
|
||||||
<SelectList
|
<SelectList
|
||||||
labelFunction={(e) => `${e.value}kHz`}
|
labelFunction={(e) => `${e.value}kHz`}
|
||||||
|
|||||||
@@ -1,133 +1,132 @@
|
|||||||
import React from 'react';
|
import React from 'react';
|
||||||
import { useSelector, useDispatch } from 'react-redux';
|
import { useSelector, useDispatch } from 'react-redux';
|
||||||
import { selectById, parameterUpdated } from './parameterSlice.js';
|
import { selectById, parameterUpdated } from './parameterSlice.js';
|
||||||
import { Slider} from '../../helpers/Helpers';
|
import { Slider } from '../../helpers/Helpers';
|
||||||
import styles from './Parameters.module.css';
|
|
||||||
|
|
||||||
export default function Pans(props) {
|
export default function Pans(props) {
|
||||||
const parameters = useSelector((state) => selectById(state, props.id));
|
const parameters = useSelector((state) => selectById(state, props.id));
|
||||||
const dispatch = useDispatch();
|
const dispatch = useDispatch();
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<div className={styles.horizontalContainer}>
|
<div>
|
||||||
<span className={styles.header}>{`${props.name}`}</span>
|
<span>{`${props.name}`}</span>
|
||||||
<div className={styles.container}>
|
<div>
|
||||||
Pan 1
|
Pan 1
|
||||||
<Slider
|
<Slider
|
||||||
min={0}
|
min={0}
|
||||||
max={127}
|
max={127}
|
||||||
parameter={parameters.pan1}
|
parameter={parameters.pan1}
|
||||||
onChange={(value) =>
|
onChange={(value) =>
|
||||||
dispatch(
|
dispatch(
|
||||||
parameterUpdated({
|
parameterUpdated({
|
||||||
id: props.id,
|
id: props.id,
|
||||||
changes: { pan1: value },
|
changes: { pan1: value },
|
||||||
})
|
})
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
/>
|
/>
|
||||||
Pan 2
|
Pan 2
|
||||||
<Slider
|
<Slider
|
||||||
min={0}
|
min={0}
|
||||||
max={127}
|
max={127}
|
||||||
parameter={parameters.pan2}
|
parameter={parameters.pan2}
|
||||||
onChange={(value) =>
|
onChange={(value) =>
|
||||||
dispatch(
|
dispatch(
|
||||||
parameterUpdated({
|
parameterUpdated({
|
||||||
id: props.id,
|
id: props.id,
|
||||||
changes: { pan2: value },
|
changes: { pan2: value },
|
||||||
})
|
})
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
/>
|
/>
|
||||||
Pan 3
|
Pan 3
|
||||||
<Slider
|
<Slider
|
||||||
min={0}
|
min={0}
|
||||||
max={127}
|
max={127}
|
||||||
parameter={parameters.pan3}
|
parameter={parameters.pan3}
|
||||||
onChange={(value) =>
|
onChange={(value) =>
|
||||||
dispatch(
|
dispatch(
|
||||||
parameterUpdated({
|
parameterUpdated({
|
||||||
id: props.id,
|
id: props.id,
|
||||||
changes: { pan3: value },
|
changes: { pan3: value },
|
||||||
})
|
})
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
/>
|
/>
|
||||||
Pan 4
|
Pan 4
|
||||||
<Slider
|
<Slider
|
||||||
min={0}
|
min={0}
|
||||||
max={127}
|
max={127}
|
||||||
parameter={parameters.pan4}
|
parameter={parameters.pan4}
|
||||||
onChange={(value) =>
|
onChange={(value) =>
|
||||||
dispatch(
|
dispatch(
|
||||||
parameterUpdated({
|
parameterUpdated({
|
||||||
id: props.id,
|
id: props.id,
|
||||||
changes: { pan4: value },
|
changes: { pan4: value },
|
||||||
})
|
})
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
<div className={styles.divider}/>
|
<div />
|
||||||
<div className={styles.container}>
|
<div>
|
||||||
Pan 5
|
Pan 5
|
||||||
<Slider
|
<Slider
|
||||||
min={0}
|
min={0}
|
||||||
max={127}
|
max={127}
|
||||||
parameter={parameters.pan5}
|
parameter={parameters.pan5}
|
||||||
onChange={(value) =>
|
onChange={(value) =>
|
||||||
dispatch(
|
dispatch(
|
||||||
parameterUpdated({
|
parameterUpdated({
|
||||||
id: props.id,
|
id: props.id,
|
||||||
changes: { pan5: value },
|
changes: { pan5: value },
|
||||||
})
|
})
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
/>
|
/>
|
||||||
Pan 6
|
Pan 6
|
||||||
<Slider
|
<Slider
|
||||||
min={0}
|
min={0}
|
||||||
max={127}
|
max={127}
|
||||||
parameter={parameters.pan6}
|
parameter={parameters.pan6}
|
||||||
onChange={(value) =>
|
onChange={(value) =>
|
||||||
dispatch(
|
dispatch(
|
||||||
parameterUpdated({
|
parameterUpdated({
|
||||||
id: props.id,
|
id: props.id,
|
||||||
changes: { pan6: value },
|
changes: { pan6: value },
|
||||||
})
|
})
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
/>
|
/>
|
||||||
Pan 7
|
Pan 7
|
||||||
<Slider
|
<Slider
|
||||||
min={0}
|
min={0}
|
||||||
max={127}
|
max={127}
|
||||||
parameter={parameters.pan7}
|
parameter={parameters.pan7}
|
||||||
onChange={(value) =>
|
onChange={(value) =>
|
||||||
dispatch(
|
dispatch(
|
||||||
parameterUpdated({
|
parameterUpdated({
|
||||||
id: props.id,
|
id: props.id,
|
||||||
changes: { pan7: value },
|
changes: { pan7: value },
|
||||||
})
|
})
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
/>
|
/>
|
||||||
Pan 8
|
Pan 8
|
||||||
<Slider
|
<Slider
|
||||||
min={0}
|
min={0}
|
||||||
max={127}
|
max={127}
|
||||||
parameter={parameters.pan8}
|
parameter={parameters.pan8}
|
||||||
onChange={(value) =>
|
onChange={(value) =>
|
||||||
dispatch(
|
dispatch(
|
||||||
parameterUpdated({
|
parameterUpdated({
|
||||||
id: props.id,
|
id: props.id,
|
||||||
changes: { pan8: value },
|
changes: { pan8: value },
|
||||||
})
|
})
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,98 +0,0 @@
|
|||||||
.container,
|
|
||||||
.lfo,
|
|
||||||
.horizontalContainer,
|
|
||||||
.patchesContainer {
|
|
||||||
border: solid 1pt slategrey;
|
|
||||||
border-radius: 6px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.container,
|
|
||||||
.lfo {
|
|
||||||
position: relative;
|
|
||||||
font-size: small;
|
|
||||||
display: inline-flex;
|
|
||||||
flex-direction: column;
|
|
||||||
justify-content: center;
|
|
||||||
padding: 16pt;
|
|
||||||
margin: 10pt;
|
|
||||||
min-width: 15%;
|
|
||||||
height: 214px;
|
|
||||||
line-height: 1.5em;
|
|
||||||
}
|
|
||||||
|
|
||||||
.lfo {
|
|
||||||
height: 250px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.lfo > *,
|
|
||||||
.container > * {
|
|
||||||
margin: 3pt 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
.header {
|
|
||||||
font-size: 1.5em;
|
|
||||||
line-height: 1.25em;
|
|
||||||
text-align: center;
|
|
||||||
background-color: white;
|
|
||||||
padding: 0 0.25em 0.075em;
|
|
||||||
border-left: 1px solid slategrey;
|
|
||||||
border-right: 1px solid slategrey;
|
|
||||||
box-sizing: border-box;
|
|
||||||
}
|
|
||||||
.lfo > .header,
|
|
||||||
.container > .header {
|
|
||||||
position: absolute;
|
|
||||||
top: -7.5%;
|
|
||||||
left: 12%;
|
|
||||||
}
|
|
||||||
.horizontalContainer > .header,
|
|
||||||
.patchesContainer > .header {
|
|
||||||
position: absolute;
|
|
||||||
top: -5.25%;
|
|
||||||
left: 6%;
|
|
||||||
}
|
|
||||||
|
|
||||||
.horizontalContainer {
|
|
||||||
position: relative;
|
|
||||||
font-size: small;
|
|
||||||
display: inline-flex;
|
|
||||||
flex-direction: row;
|
|
||||||
justify-content: center;
|
|
||||||
align-items: center;
|
|
||||||
padding: 16pt 8pt 16pt 8pt;
|
|
||||||
margin: 10pt;
|
|
||||||
width: 448px;
|
|
||||||
height: 214px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.patchesContainer {
|
|
||||||
position: relative;
|
|
||||||
font-size: small;
|
|
||||||
display: inline-flex;
|
|
||||||
flex-direction: row;
|
|
||||||
justify-content: center;
|
|
||||||
align-items: center;
|
|
||||||
padding: 16pt 8pt 16pt 8pt;
|
|
||||||
margin: 10pt;
|
|
||||||
width: 680px;
|
|
||||||
height: 250px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.horizontalContainer > .container,
|
|
||||||
.patchesContainer > .container {
|
|
||||||
padding: 0 16pt;
|
|
||||||
width: 100%;
|
|
||||||
margin: 10pt 0;
|
|
||||||
border: none;
|
|
||||||
}
|
|
||||||
|
|
||||||
.divider {
|
|
||||||
height: 214px;
|
|
||||||
width: 2px;
|
|
||||||
background-color: slategrey;
|
|
||||||
margin: 0 8pt;
|
|
||||||
}
|
|
||||||
|
|
||||||
.patchesContainer > .divider {
|
|
||||||
width: 4px;
|
|
||||||
}
|
|
||||||
@@ -2,128 +2,127 @@ import React from 'react';
|
|||||||
import { useSelector, useDispatch } from 'react-redux';
|
import { useSelector, useDispatch } from 'react-redux';
|
||||||
import { selectById, parameterUpdated } from './parameterSlice.js';
|
import { selectById, parameterUpdated } from './parameterSlice.js';
|
||||||
import { Slider, SelectList } from '../../helpers/Helpers';
|
import { Slider, SelectList } from '../../helpers/Helpers';
|
||||||
import styles from './Parameters.module.css';
|
|
||||||
|
|
||||||
const Patch = (props) => {
|
const Patch = (props) => {
|
||||||
return (
|
return (
|
||||||
<div className={styles.container}>
|
<div>
|
||||||
Source
|
Source
|
||||||
<SelectList
|
<SelectList
|
||||||
value={props.patch.source}
|
value={props.patch.source}
|
||||||
list={[
|
list={[
|
||||||
{ value: 'Filter EG' },
|
{ value: 'Filter EG' },
|
||||||
{ value: 'Amp Eg' },
|
{ value: 'Amp Eg' },
|
||||||
{ value: 'LFO 1' },
|
{ value: 'LFO 1' },
|
||||||
{ value: 'LFO 2' },
|
{ value: 'LFO 2' },
|
||||||
{ value: 'Velocity' },
|
{ value: 'Velocity' },
|
||||||
{ value: 'Keyboard Track' },
|
{ value: 'Keyboard Track' },
|
||||||
{ value: 'Pitch Bend' },
|
{ value: 'Pitch Bend' },
|
||||||
{ value: 'Mod Wheel' },
|
{ value: 'Mod Wheel' },
|
||||||
]}
|
]}
|
||||||
onChange={(value) =>
|
onChange={(value) =>
|
||||||
props.onChange({
|
props.onChange({
|
||||||
source: value,
|
source: value,
|
||||||
destination: props.patch.destination,
|
destination: props.patch.destination,
|
||||||
modIntensity: props.patch.modIntensity,
|
modIntensity: props.patch.modIntensity,
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
/>
|
/>
|
||||||
Destination
|
Destination
|
||||||
<SelectList
|
<SelectList
|
||||||
value={props.patch.destination}
|
value={props.patch.destination}
|
||||||
list={[
|
list={[
|
||||||
{ value: 'Pitch' },
|
{ value: 'Pitch' },
|
||||||
{ value: 'OSC 2 Tune' },
|
{ value: 'OSC 2 Tune' },
|
||||||
{ value: 'OSC 1 Control 1' },
|
{ value: 'OSC 1 Control 1' },
|
||||||
{ value: 'Noise Level' },
|
{ value: 'Noise Level' },
|
||||||
{ value: 'Cutoff' },
|
{ value: 'Cutoff' },
|
||||||
{ value: 'Amp' },
|
{ value: 'Amp' },
|
||||||
{ value: 'Pan' },
|
{ value: 'Pan' },
|
||||||
{ value: 'LFO 2 Frequency' },
|
{ value: 'LFO 2 Frequency' },
|
||||||
]}
|
]}
|
||||||
onChange={(value) =>
|
onChange={(value) =>
|
||||||
props.onChange({
|
props.onChange({
|
||||||
source: props.patch.source,
|
source: props.patch.source,
|
||||||
destination: value,
|
destination: value,
|
||||||
modIntensity: props.patch.modIntensity,
|
modIntensity: props.patch.modIntensity,
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
/>
|
/>
|
||||||
Mod Intensity
|
Mod Intensity
|
||||||
<Slider
|
<Slider
|
||||||
min={0}
|
min={0}
|
||||||
max={127}
|
max={127}
|
||||||
parameter={props.patch.modIntensity}
|
parameter={props.patch.modIntensity}
|
||||||
onChange={(value) =>
|
onChange={(value) =>
|
||||||
props.onChange({
|
props.onChange({
|
||||||
source: props.patch.source,
|
source: props.patch.source,
|
||||||
destination: props.patch.destination,
|
destination: props.patch.destination,
|
||||||
modIntensity: value,
|
modIntensity: value,
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
|
||||||
export default function Patches(props) {
|
export default function Patches(props) {
|
||||||
const parameters = useSelector((state) => selectById(state, props.id));
|
const parameters = useSelector((state) => selectById(state, props.id));
|
||||||
const dispatch = useDispatch();
|
const dispatch = useDispatch();
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<div id="patches" className={styles.patchesContainer}>
|
<div id='patches'>
|
||||||
<span className={styles.header}>{`${props.name}`}</span>
|
<span>{`${props.name}`}</span>
|
||||||
<Patch
|
<Patch
|
||||||
patch={parameters.patch1}
|
patch={parameters.patch1}
|
||||||
onChange={(value) =>
|
onChange={(value) =>
|
||||||
dispatch(
|
dispatch(
|
||||||
parameterUpdated({
|
parameterUpdated({
|
||||||
id: props.id,
|
id: props.id,
|
||||||
changes: {
|
changes: {
|
||||||
patch1: value,
|
patch1: value,
|
||||||
},
|
},
|
||||||
})
|
})
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
/>
|
/>
|
||||||
<div className={styles.divider} />
|
<div />
|
||||||
<Patch
|
<Patch
|
||||||
patch={parameters.patch2}
|
patch={parameters.patch2}
|
||||||
onChange={(value, parameter) =>
|
onChange={(value, parameter) =>
|
||||||
dispatch(
|
dispatch(
|
||||||
parameterUpdated({
|
parameterUpdated({
|
||||||
id: props.id,
|
id: props.id,
|
||||||
changes: {
|
changes: {
|
||||||
patch2: value,
|
patch2: value,
|
||||||
},
|
},
|
||||||
})
|
})
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
/>
|
/>
|
||||||
<div className={styles.divider} />
|
<div />
|
||||||
<Patch
|
<Patch
|
||||||
patch={parameters.patch3}
|
patch={parameters.patch3}
|
||||||
onChange={(value, parameter) =>
|
onChange={(value, parameter) =>
|
||||||
dispatch(
|
dispatch(
|
||||||
parameterUpdated({
|
parameterUpdated({
|
||||||
id: props.id,
|
id: props.id,
|
||||||
changes: { patch3: value },
|
changes: { patch3: value },
|
||||||
})
|
})
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
/>
|
/>
|
||||||
<div className={styles.divider} />
|
<div />
|
||||||
<Patch
|
<Patch
|
||||||
patch={parameters.patch4}
|
patch={parameters.patch4}
|
||||||
onChange={(value, parameter) =>
|
onChange={(value, parameter) =>
|
||||||
dispatch(
|
dispatch(
|
||||||
parameterUpdated({
|
parameterUpdated({
|
||||||
id: props.id,
|
id: props.id,
|
||||||
changes: { patch4: value },
|
changes: { patch4: value },
|
||||||
})
|
})
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2,134 +2,129 @@ import React from 'react';
|
|||||||
import { useSelector, useDispatch } from 'react-redux';
|
import { useSelector, useDispatch } from 'react-redux';
|
||||||
import { selectById, parameterUpdated } from './parameterSlice.js';
|
import { selectById, parameterUpdated } from './parameterSlice.js';
|
||||||
import { Slider, SelectList } from '../../helpers/Helpers';
|
import { Slider, SelectList } from '../../helpers/Helpers';
|
||||||
import styles from './Parameters.module.css';
|
|
||||||
|
|
||||||
export default function Pitch(props) {
|
export default function Pitch(props) {
|
||||||
const parameters = useSelector((state) => selectById(state, props.id));
|
const parameters = useSelector((state) => selectById(state, props.id));
|
||||||
const dispatch = useDispatch();
|
const dispatch = useDispatch();
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<div className={styles.horizontalContainer}>
|
<div>
|
||||||
<span className={styles.header}>{`${props.name}`}</span>
|
<span>{`${props.name}`}</span>
|
||||||
<div className={styles.container}>
|
<div>
|
||||||
Voice Assign
|
Voice Assign
|
||||||
<SelectList
|
<SelectList
|
||||||
value={parameters.voiceAssign}
|
value={parameters.voiceAssign}
|
||||||
list={[
|
list={[{ value: 'Mono' }, { value: 'Poly' }, { value: 'Unison' }]}
|
||||||
{ value: 'Mono' },
|
onChange={(value) =>
|
||||||
{ value: 'Poly' },
|
dispatch(
|
||||||
{ value: 'Unison' },
|
parameterUpdated({
|
||||||
]}
|
id: props.id,
|
||||||
onChange={(value) =>
|
changes: { voiceAssign: value },
|
||||||
dispatch(
|
})
|
||||||
parameterUpdated({
|
)
|
||||||
id: props.id,
|
}
|
||||||
changes: { voiceAssign: value },
|
/>
|
||||||
})
|
Trigger Mode
|
||||||
)
|
<SelectList
|
||||||
}
|
value={parameters.triggerMode}
|
||||||
/>
|
list={[{ value: 'Single' }, { value: 'Multiple' }]}
|
||||||
Trigger Mode
|
onChange={(value) =>
|
||||||
<SelectList
|
dispatch(
|
||||||
value={parameters.triggerMode}
|
parameterUpdated({
|
||||||
list={[{ value: 'Single' }, { value: 'Multiple' }]}
|
id: props.id,
|
||||||
onChange={(value) =>
|
changes: { triggerMode: value },
|
||||||
dispatch(
|
})
|
||||||
parameterUpdated({
|
)
|
||||||
id: props.id,
|
}
|
||||||
changes: { triggerMode: value },
|
/>
|
||||||
})
|
Transpose
|
||||||
)
|
<Slider
|
||||||
}
|
parameter={parameters.transpose}
|
||||||
/>
|
min={-24}
|
||||||
Transpose
|
max={24}
|
||||||
<Slider
|
onChange={(value) =>
|
||||||
parameter={parameters.transpose}
|
dispatch(
|
||||||
min={-24}
|
parameterUpdated({
|
||||||
max={24}
|
id: props.id,
|
||||||
onChange={(value) =>
|
changes: { transpose: value },
|
||||||
dispatch(
|
})
|
||||||
parameterUpdated({
|
)
|
||||||
id: props.id,
|
}
|
||||||
changes: { transpose: value },
|
/>
|
||||||
})
|
</div>
|
||||||
)
|
<div />
|
||||||
}
|
<div>
|
||||||
/>
|
Tune
|
||||||
</div>
|
<Slider
|
||||||
<div className={styles.divider} />
|
parameter={parameters.tune}
|
||||||
<div className={styles.container}>
|
min={-50}
|
||||||
Tune
|
max={50}
|
||||||
<Slider
|
onChange={(value) =>
|
||||||
parameter={parameters.tune}
|
dispatch(
|
||||||
min={-50}
|
parameterUpdated({
|
||||||
max={50}
|
id: props.id,
|
||||||
onChange={(value) =>
|
changes: { tune: value },
|
||||||
dispatch(
|
})
|
||||||
parameterUpdated({
|
)
|
||||||
id: props.id,
|
}
|
||||||
changes: { tune: value },
|
/>
|
||||||
})
|
Unisone Detune
|
||||||
)
|
<Slider
|
||||||
}
|
parameter={parameters.unisonDetune}
|
||||||
/>
|
min={0}
|
||||||
Unisone Detune
|
max={99}
|
||||||
<Slider
|
onChange={(value) =>
|
||||||
parameter={parameters.unisonDetune}
|
dispatch(
|
||||||
min={0}
|
parameterUpdated({
|
||||||
max={99}
|
id: props.id,
|
||||||
onChange={(value) =>
|
changes: { unisonDetune: value },
|
||||||
dispatch(
|
})
|
||||||
parameterUpdated({
|
)
|
||||||
id: props.id,
|
}
|
||||||
changes: { unisonDetune: value },
|
/>
|
||||||
})
|
Portamento
|
||||||
)
|
<Slider
|
||||||
}
|
parameter={parameters.portamento}
|
||||||
/>
|
min={0}
|
||||||
Portamento
|
max={127}
|
||||||
<Slider
|
onChange={(value) =>
|
||||||
parameter={parameters.portamento}
|
dispatch(
|
||||||
min={0}
|
parameterUpdated({
|
||||||
max={127}
|
id: props.id,
|
||||||
onChange={(value) =>
|
changes: { portamento: value },
|
||||||
dispatch(
|
})
|
||||||
parameterUpdated({
|
)
|
||||||
id: props.id,
|
}
|
||||||
changes: { portamento: value },
|
/>
|
||||||
})
|
Bend Range
|
||||||
)
|
<Slider
|
||||||
}
|
parameter={parameters.bendRange}
|
||||||
/>
|
min={-12}
|
||||||
Bend Range
|
max={12}
|
||||||
<Slider
|
onChange={(value) =>
|
||||||
parameter={parameters.bendRange}
|
dispatch(
|
||||||
min={-12}
|
parameterUpdated({
|
||||||
max={12}
|
id: props.id,
|
||||||
onChange={(value) =>
|
changes: { bendRange: value },
|
||||||
dispatch(
|
})
|
||||||
parameterUpdated({
|
)
|
||||||
id: props.id,
|
}
|
||||||
changes: { bendRange: value },
|
/>
|
||||||
})
|
Vibrato Intensity
|
||||||
)
|
<Slider
|
||||||
}
|
parameter={parameters.vibratoIntensity}
|
||||||
/>
|
min={-63}
|
||||||
Vibrato Intensity
|
max={63}
|
||||||
<Slider
|
onChange={(value) =>
|
||||||
parameter={parameters.vibratoIntensity}
|
dispatch(
|
||||||
min={-63}
|
parameterUpdated({
|
||||||
max={63}
|
id: props.id,
|
||||||
onChange={(value) =>
|
changes: { vibratoIntensity: value },
|
||||||
dispatch(
|
})
|
||||||
parameterUpdated({
|
)
|
||||||
id: props.id,
|
}
|
||||||
changes: { vibratoIntensity: value },
|
/>
|
||||||
})
|
</div>
|
||||||
)
|
</div>
|
||||||
}
|
);
|
||||||
/>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2,134 +2,133 @@ import React from 'react';
|
|||||||
import { useSelector, useDispatch } from 'react-redux';
|
import { useSelector, useDispatch } from 'react-redux';
|
||||||
import { selectById, parameterUpdated } from './parameterSlice.js';
|
import { selectById, parameterUpdated } from './parameterSlice.js';
|
||||||
import { Slider, SelectList, Checkbox } from '../../helpers/Helpers';
|
import { Slider, SelectList, Checkbox } from '../../helpers/Helpers';
|
||||||
import styles from './Parameters.module.css';
|
|
||||||
|
|
||||||
export default function VCO(props) {
|
export default function VCO(props) {
|
||||||
const parameters = useSelector((state) => selectById(state, props.id));
|
const parameters = useSelector((state) => selectById(state, props.id));
|
||||||
|
|
||||||
const dispatch = useDispatch();
|
const dispatch = useDispatch();
|
||||||
return (
|
return (
|
||||||
<div className={styles.container}>
|
<div>
|
||||||
<span className={styles.header}>{`${props.name}`}</span>
|
<span>{`${props.name}`}</span>
|
||||||
Waveform
|
Waveform
|
||||||
<SelectList
|
<SelectList
|
||||||
value={parameters.waveform}
|
value={parameters.waveform}
|
||||||
list={props.waveforms}
|
list={props.waveforms}
|
||||||
onChange={(value) =>
|
onChange={(value) =>
|
||||||
dispatch(
|
dispatch(
|
||||||
parameterUpdated({
|
parameterUpdated({
|
||||||
id: props.id,
|
id: props.id,
|
||||||
changes: { waveform: value },
|
changes: { waveform: value },
|
||||||
})
|
})
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
/>
|
/>
|
||||||
{`${props.dwgsOrModTypeName}`}
|
{`${props.dwgsOrModTypeName}`}
|
||||||
<SelectList
|
<SelectList
|
||||||
value={parameters.dwgsOrModType}
|
value={parameters.dwgsOrModType}
|
||||||
list={props.dwgsOrModType}
|
list={props.dwgsOrModType}
|
||||||
onChange={(value) =>
|
onChange={(value) =>
|
||||||
dispatch(
|
dispatch(
|
||||||
parameterUpdated({
|
parameterUpdated({
|
||||||
id: props.id,
|
id: props.id,
|
||||||
changes: { dwgsOrModType: value },
|
changes: { dwgsOrModType: value },
|
||||||
})
|
})
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
/>
|
/>
|
||||||
Waveform Mod
|
Waveform Mod
|
||||||
<Slider
|
<Slider
|
||||||
min={0}
|
min={0}
|
||||||
max={127}
|
max={127}
|
||||||
parameter={parameters.waveMod}
|
parameter={parameters.waveMod}
|
||||||
onChange={(value) =>
|
onChange={(value) =>
|
||||||
dispatch(
|
dispatch(
|
||||||
parameterUpdated({
|
parameterUpdated({
|
||||||
id: props.id,
|
id: props.id,
|
||||||
changes: { waveMod: value },
|
changes: { waveMod: value },
|
||||||
})
|
})
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
/>
|
/>
|
||||||
LFO Mod
|
LFO Mod
|
||||||
<Slider
|
<Slider
|
||||||
min={0}
|
min={0}
|
||||||
max={127}
|
max={127}
|
||||||
parameter={parameters.lfoMod}
|
parameter={parameters.lfoMod}
|
||||||
onChange={(value) =>
|
onChange={(value) =>
|
||||||
dispatch(
|
dispatch(
|
||||||
parameterUpdated({
|
parameterUpdated({
|
||||||
id: props.id,
|
id: props.id,
|
||||||
changes: { lfoMod: value },
|
changes: { lfoMod: value },
|
||||||
})
|
})
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
export const AudioIn = (props) => {
|
export const AudioIn = (props) => {
|
||||||
const parameters = useSelector((state) => selectById(state, props.id));
|
const parameters = useSelector((state) => selectById(state, props.id));
|
||||||
const dispatch = useDispatch();
|
const dispatch = useDispatch();
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<div className={styles.container}>
|
<div>
|
||||||
<span className={styles.header}>{`${props.name}`}</span>
|
<span>{`${props.name}`}</span>
|
||||||
Gate
|
Gate
|
||||||
<Slider
|
<Slider
|
||||||
min={0}
|
min={0}
|
||||||
max={127}
|
max={127}
|
||||||
parameter={parameters.gate}
|
parameter={parameters.gate}
|
||||||
onChange={(value) =>
|
onChange={(value) =>
|
||||||
dispatch(
|
dispatch(
|
||||||
parameterUpdated({
|
parameterUpdated({
|
||||||
id: props.id,
|
id: props.id,
|
||||||
changes: { gate: value },
|
changes: { gate: value },
|
||||||
})
|
})
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
/>
|
/>
|
||||||
Threshold
|
Threshold
|
||||||
<Slider
|
<Slider
|
||||||
min={0}
|
min={0}
|
||||||
max={127}
|
max={127}
|
||||||
parameter={parameters.threshold}
|
parameter={parameters.threshold}
|
||||||
onChange={(value) =>
|
onChange={(value) =>
|
||||||
dispatch(
|
dispatch(
|
||||||
parameterUpdated({
|
parameterUpdated({
|
||||||
id: props.id,
|
id: props.id,
|
||||||
changes: { threshold: value },
|
changes: { threshold: value },
|
||||||
})
|
})
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
/>
|
/>
|
||||||
HPF Level
|
HPF Level
|
||||||
<Slider
|
<Slider
|
||||||
min={0}
|
min={0}
|
||||||
max={127}
|
max={127}
|
||||||
parameter={parameters.hpfLevel}
|
parameter={parameters.hpfLevel}
|
||||||
onChange={(value) =>
|
onChange={(value) =>
|
||||||
dispatch(
|
dispatch(
|
||||||
parameterUpdated({
|
parameterUpdated({
|
||||||
id: props.id,
|
id: props.id,
|
||||||
changes: { hpfLevel: value },
|
changes: { hpfLevel: value },
|
||||||
})
|
})
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
/>
|
/>
|
||||||
<Checkbox
|
<Checkbox
|
||||||
name="HPF Gate"
|
name='HPF Gate'
|
||||||
parameter={parameters.hpfGate}
|
parameter={parameters.hpfGate}
|
||||||
onChange={(value) =>
|
onChange={(value) =>
|
||||||
dispatch(
|
dispatch(
|
||||||
parameterUpdated({
|
parameterUpdated({
|
||||||
id: props.id,
|
id: props.id,
|
||||||
changes: { hpfGate: value },
|
changes: { hpfGate: value },
|
||||||
})
|
})
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -5,24 +5,18 @@ import Effects from './Effects';
|
|||||||
import Arpeggio from './Arpeggio';
|
import Arpeggio from './Arpeggio';
|
||||||
import { Tab, Tabs, TabList, TabPanel } from 'react-tabs';
|
import { Tab, Tabs, TabList, TabPanel } from 'react-tabs';
|
||||||
import { useSelector } from 'react-redux';
|
import { useSelector } from 'react-redux';
|
||||||
import styles from './Timbre.module.css';
|
|
||||||
|
|
||||||
export default function TimbreSwitcher() {
|
export default function TimbreSwitcher() {
|
||||||
const index = useSelector((state) => state.parameters.tabIndex);
|
const index = useSelector((state) => state.parameters.tabIndex);
|
||||||
return (
|
return (
|
||||||
<div className={styles.tabs}>
|
<div>
|
||||||
<Tabs
|
<Tabs selectedIndex={index} onSelect={() => {}}>
|
||||||
className={styles.tabs}
|
<TabList>
|
||||||
selectedIndex={index}
|
<Tab>Timbre 1</Tab>
|
||||||
onSelect={() => {}}
|
<Tab>Timbre 2</Tab>
|
||||||
selectedTabClassName={styles.selected}
|
<Tab>Vocoder</Tab>
|
||||||
selectedTabPanelClassName={styles.tabPanel}>
|
<Tab>Effects</Tab>
|
||||||
<TabList className={styles.tabList}>
|
<Tab>Arpeggio</Tab>
|
||||||
<Tab className={styles.tab}>Timbre 1</Tab>
|
|
||||||
<Tab className={styles.tab}>Timbre 2</Tab>
|
|
||||||
<Tab className={styles.tab}>Vocoder</Tab>
|
|
||||||
<Tab className={styles.tab}>Effects</Tab>
|
|
||||||
<Tab className={styles.tab}>Arpeggio</Tab>
|
|
||||||
</TabList>
|
</TabList>
|
||||||
|
|
||||||
<TabPanel>
|
<TabPanel>
|
||||||
|
|||||||
@@ -0,0 +1,14 @@
|
|||||||
|
const Select = (props) => {
|
||||||
|
return (
|
||||||
|
<select
|
||||||
|
className={props.className}
|
||||||
|
onChange={(e) => props.onChange(e.target.value)}
|
||||||
|
value={props.value}>
|
||||||
|
{props.list.map((element) => (
|
||||||
|
<option value={element.value}>{element.value}</option>
|
||||||
|
))}
|
||||||
|
</select>
|
||||||
|
);
|
||||||
|
};
|
||||||
|
|
||||||
|
export { Select };
|
||||||
@@ -13,3 +13,7 @@ code {
|
|||||||
font-family: source-code-pro, Menlo, Monaco, Consolas, 'Courier New',
|
font-family: source-code-pro, Menlo, Monaco, Consolas, 'Courier New',
|
||||||
monospace;
|
monospace;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@tailwind base;
|
||||||
|
@tailwind components;
|
||||||
|
@tailwind utilities;
|
||||||
|
|||||||
@@ -0,0 +1,11 @@
|
|||||||
|
module.exports = {
|
||||||
|
purge: ['./src/**/*.{js,jsx,ts,tsx}', './public/index.html'],
|
||||||
|
darkMode: false, // or 'media' or 'class'
|
||||||
|
theme: {
|
||||||
|
extend: {},
|
||||||
|
},
|
||||||
|
variants: {
|
||||||
|
extend: {},
|
||||||
|
},
|
||||||
|
plugins: [require('@tailwindcss/forms')],
|
||||||
|
};
|
||||||
Reference in New Issue
Block a user