This commit is contained in:
+60
-97
@@ -188,9 +188,7 @@ export default function Menu(props) {
|
|||||||
<div className="my-1 flex flex-col items-center space-y-2">
|
<div className="my-1 flex flex-col items-center space-y-2">
|
||||||
<button
|
<button
|
||||||
className="btn bg-indigo-600 text-white hover:bg-indigo-700 w-full font-semibold"
|
className="btn bg-indigo-600 text-white hover:bg-indigo-700 w-full font-semibold"
|
||||||
onClick={() => {
|
onClick={() => {requestCurrentPatchDump();}}
|
||||||
requestCurrentPatchDump();
|
|
||||||
}}
|
|
||||||
>
|
>
|
||||||
📥 Import from KORG
|
📥 Import from KORG
|
||||||
</button>
|
</button>
|
||||||
@@ -199,129 +197,100 @@ export default function Menu(props) {
|
|||||||
{/* CONTENEUR DES BOUTONS D'ACTIONS */}
|
{/* CONTENEUR DES BOUTONS D'ACTIONS */}
|
||||||
|
|
||||||
<div className="my-1">
|
<div className="my-1">
|
||||||
<div className="text-xs font-semibold text-gray-500 uppercase mb-1">
|
<div className="text-xs font-semibold text-gray-500 uppercase mb-1">PATCHS</div>
|
||||||
Patch
|
<div className="grid grid-cols-3 gap-1">
|
||||||
|
<button
|
||||||
|
className="btn w-full"
|
||||||
|
onClick={() => dispatch(parameterRefreshAll())}
|
||||||
|
>New
|
||||||
|
</button>
|
||||||
|
|
||||||
|
<button
|
||||||
|
className="btn w-full"
|
||||||
|
onClick={() => fileRef.current.click()}
|
||||||
|
>Load
|
||||||
|
</button>
|
||||||
|
|
||||||
|
<button
|
||||||
|
className="btn w-full"
|
||||||
|
onClick={() => {
|
||||||
|
download(
|
||||||
|
return_file_from_store(state),
|
||||||
|
'microKORG_patch.syx',
|
||||||
|
'application/octet-binary'
|
||||||
|
);
|
||||||
|
}}
|
||||||
|
>Save
|
||||||
|
</button>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div className="grid grid-cols-3 gap-1">
|
<input
|
||||||
<button
|
className="hidden"
|
||||||
className="btn w-full"
|
type="file"
|
||||||
onClick={() => dispatch(parameterRefreshAll())}
|
accept=".syx"
|
||||||
>
|
ref={fileRef}
|
||||||
New
|
onChange={(e) => loadFile(e.target.files[0])}
|
||||||
</button>
|
/>
|
||||||
|
|
||||||
<button
|
|
||||||
className="btn w-full"
|
|
||||||
onClick={() => fileRef.current.click()}
|
|
||||||
>
|
|
||||||
Load
|
|
||||||
</button>
|
|
||||||
|
|
||||||
<button
|
|
||||||
className="btn w-full"
|
|
||||||
onClick={() => {
|
|
||||||
download(
|
|
||||||
return_file_from_store(state),
|
|
||||||
'microKORG_patch.syx',
|
|
||||||
'application/octet-binary'
|
|
||||||
);
|
|
||||||
}}
|
|
||||||
>
|
|
||||||
Save
|
|
||||||
</button>
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<input
|
|
||||||
className="hidden"
|
|
||||||
type="file"
|
|
||||||
accept=".syx"
|
|
||||||
ref={fileRef}
|
|
||||||
onChange={(e) => loadFile(e.target.files[0])}
|
|
||||||
/>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
{/* liste single,multiple,vocoder */}
|
{/* liste single,multiple,vocoder */}
|
||||||
|
|
||||||
<div className="patch-settings">
|
<div className="patch-settings">
|
||||||
<Select
|
<Select
|
||||||
className="w-full select"
|
className="w-full select"
|
||||||
value={state.patch.mode}
|
value={state.patch.mode}
|
||||||
list={[
|
list={[
|
||||||
{ value: 'Single' },
|
{ value: 'Single' },
|
||||||
{ value: 'Multiple' },
|
{ value: 'Multiple' },
|
||||||
{ value: 'Vocoder' },
|
{ value: 'Vocoder' },
|
||||||
]}
|
]}
|
||||||
onChange={(value) => {
|
onChange={(value) => {
|
||||||
dispatch(
|
dispatch(
|
||||||
parameterUpdated({
|
parameterUpdated({
|
||||||
id: 'patch',
|
id: 'patch',
|
||||||
changes: { mode: value },
|
changes: { mode: value },
|
||||||
})
|
})
|
||||||
);
|
);
|
||||||
}}
|
}}
|
||||||
/>
|
/>
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
{/* 2 boutons Editor / Memory */}
|
|
||||||
|
|
||||||
<div className="my-1 w-full">
|
|
||||||
<div className="text-xs font-semibold text-gray-500 uppercase mb-1">Pages</div>
|
|
||||||
<div className="flex gap-1 w-full">
|
|
||||||
<button
|
|
||||||
className={props.page === 'editor' ? 'btn btn-active w-1/2' : 'btn w-1/2'}
|
|
||||||
onClick={() => props.setPage('editor')}
|
|
||||||
>
|
|
||||||
Editor
|
|
||||||
</button>
|
|
||||||
|
|
||||||
<button
|
|
||||||
className={props.page === 'memory' ? 'btn btn-active w-1/2' : 'btn w-1/2'}
|
|
||||||
onClick={() => props.setPage('memory')}
|
|
||||||
>
|
|
||||||
Memory
|
|
||||||
</button>
|
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
{/* Choix Timbre 1, Timbre 2, Vocoder, Arp/FX */}
|
{/* Choix Timbre 1, Timbre 2, Vocoder, Arp/FX */}
|
||||||
|
|
||||||
<div className="my-1 w-full">
|
<div className="my-1 w-full">
|
||||||
<div className="text-xs font-semibold text-gray-500 uppercase mb-1">
|
|
||||||
TIMBRES
|
<div className="text-xs font-semibold text-gray-500 uppercase mb-1">TIMBRES</div>
|
||||||
</div>
|
|
||||||
|
|
||||||
<div className="grid grid-cols-4 gap-1">
|
<div className="grid grid-cols-4 gap-1">
|
||||||
<button
|
<button
|
||||||
disabled={state.patch.mode === 'Vocoder'}
|
disabled={state.patch.mode === 'Vocoder'}
|
||||||
className={activeTab === 'Timbre1' ? 'btn btn-active w-full' : 'btn w-full'}
|
className={activeTab === 'Timbre1' ? 'btn btn-active w-full' : 'btn w-full'}
|
||||||
onClick={() => dispatch(parameterUpdateTab('Timbre1'))}
|
onClick={() => dispatch(parameterUpdateTab('Timbre1'))}
|
||||||
>
|
>Timbre1
|
||||||
Timbre1
|
|
||||||
</button>
|
</button>
|
||||||
|
|
||||||
<button
|
<button
|
||||||
disabled={state.patch.mode !== 'Multiple'}
|
disabled={state.patch.mode !== 'Multiple'}
|
||||||
className={activeTab === 'Timbre2' ? 'btn btn-active w-full' : 'btn w-full'}
|
className={activeTab === 'Timbre2' ? 'btn btn-active w-full' : 'btn w-full'}
|
||||||
onClick={() => dispatch(parameterUpdateTab('Timbre2'))}
|
onClick={() => dispatch(parameterUpdateTab('Timbre2'))}
|
||||||
>
|
>Timbre2
|
||||||
Timbre2
|
|
||||||
</button>
|
</button>
|
||||||
|
|
||||||
<button
|
<button
|
||||||
disabled={state.patch.mode !== 'Vocoder'}
|
disabled={state.patch.mode !== 'Vocoder'}
|
||||||
className={activeTab === 'Vocoder' ? 'btn btn-active w-full' : 'btn w-full'}
|
className={activeTab === 'Vocoder' ? 'btn btn-active w-full' : 'btn w-full'}
|
||||||
onClick={() => dispatch(parameterUpdateTab('Vocoder'))}
|
onClick={() => dispatch(parameterUpdateTab('Vocoder'))}
|
||||||
>
|
>Vocoder
|
||||||
Vocoder
|
|
||||||
</button>
|
</button>
|
||||||
|
|
||||||
<button
|
<button
|
||||||
className={activeTab === 'Effects' ? 'btn btn-active w-full' : 'btn w-full'}
|
className={activeTab === 'Effects' ? 'btn btn-active w-full' : 'btn w-full'}
|
||||||
onClick={() => dispatch(parameterUpdateTab('Effects'))}
|
onClick={() => dispatch(parameterUpdateTab('Effects'))}
|
||||||
>
|
>Arp/FX
|
||||||
Arp/FX
|
|
||||||
</button>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@@ -337,16 +306,10 @@ export default function Menu(props) {
|
|||||||
<div className="text-gray-600 italic">Aucun flux détecté...</div>
|
<div className="text-gray-600 italic">Aucun flux détecté...</div>
|
||||||
) : (
|
) : (
|
||||||
midiLogs.map((log, idx) => (
|
midiLogs.map((log, idx) => (
|
||||||
<div
|
<div key={idx} className={log.type === 'in' ? 'text-emerald-400' : 'text-cyan-400'}>{log.text}</div>
|
||||||
key={idx}
|
|
||||||
className={log.type === 'in' ? 'text-emerald-400' : 'text-cyan-400'}
|
|
||||||
>
|
|
||||||
{log.text}
|
|
||||||
</div>
|
|
||||||
))
|
))
|
||||||
)}
|
)}
|
||||||
<div ref={consoleBottomRef} />
|
<div ref={consoleBottomRef} /></div>
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div className="w-full text-center text-xl font-semibold border-t border-gray-200 pt-2">
|
<div className="w-full text-center text-xl font-semibold border-t border-gray-200 pt-2">
|
||||||
|
|||||||
Reference in New Issue
Block a user