Skip to content

Commit 4ac54bc

Browse files
committed
feat: Stop ONE_SHOT playback on mode change and reorder trigger buttons
1 parent 35933bf commit 4ac54bc

1 file changed

Lines changed: 13 additions & 10 deletions

File tree

components/WaveformEditor.tsx

Lines changed: 13 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ interface WaveformEditorProps {
1111
}
1212

1313
export const WaveformEditor: React.FC<WaveformEditorProps> = ({ isUltraSampleMode = false }) => {
14-
const { currentChannel, selectedPadId, pads, samples, updatePad, setAppMode, setRecordingModalOpen } = usePadStore();
14+
const { currentChannel, selectedPadId, pads, samples, updatePad, stopPad, setAppMode, setRecordingModalOpen } = usePadStore();
1515
const { audioContext, micAnalyser, isRecording } = useAudioStore();
1616
const { setBpm } = useSequencerStore();
1717
const selectedPadIndex = parseInt(selectedPadId.split('-')[1]);
@@ -456,6 +456,9 @@ export const WaveformEditor: React.FC<WaveformEditorProps> = ({ isUltraSampleMod
456456
};
457457

458458
const setTriggerMode = (mode: TriggerMode) => {
459+
if (activePad?.triggerMode === 'ONE_SHOT' && mode !== 'ONE_SHOT') {
460+
stopPad(selectedPadIndex);
461+
}
459462
updatePad(selectedPadIndex, { triggerMode: mode });
460463
};
461464

@@ -512,22 +515,22 @@ export const WaveformEditor: React.FC<WaveformEditorProps> = ({ isUltraSampleMod
512515
<button id="btn-zoom-out" onClick={zoomOut} className="px-2 text-zinc-400 hover:text-white transition-colors border-r border-zinc-800" title="Zoom Out"><ZoomOut size={12} /></button>
513516

514517
<div id="trigger-mode-selectors" className="flex items-stretch border-r border-zinc-800 bg-black/20">
515-
<button
516-
id="mode-gate"
517-
onClick={() => setTriggerMode('GATE')}
518-
className={`px-1 flex items-center gap-1 text-[7px] font-bold uppercase transition-colors ${activePad?.triggerMode === 'GATE' ? 'text-retro-accent bg-retro-accent/10' : 'text-zinc-500 hover:text-zinc-300'}`}
519-
title="Gate Mode"
520-
>
521-
<Hand size={10} /> Gate
522-
</button>
523518
<button
524519
id="mode-oneshot"
525520
onClick={() => setTriggerMode('ONE_SHOT')}
526-
className={`px-1 flex items-center gap-1 text-[7px] font-bold uppercase transition-colors border-l border-zinc-800/50 ${activePad?.triggerMode === 'ONE_SHOT' ? 'text-retro-accent bg-retro-accent/10' : 'text-zinc-500 hover:text-zinc-300'}`}
521+
className={`px-1 flex items-center gap-1 text-[7px] font-bold uppercase transition-colors ${activePad?.triggerMode === 'ONE_SHOT' ? 'text-retro-accent bg-retro-accent/10' : 'text-zinc-500 hover:text-zinc-300'}`}
527522
title="One-shot Mode"
528523
>
529524
<PlayCircle size={10} /> Oneshot
530525
</button>
526+
<button
527+
id="mode-gate"
528+
onClick={() => setTriggerMode('GATE')}
529+
className={`px-1 flex items-center gap-1 text-[7px] font-bold uppercase transition-colors border-l border-zinc-800/50 ${activePad?.triggerMode === 'GATE' ? 'text-retro-accent bg-retro-accent/10' : 'text-zinc-500 hover:text-zinc-300'}`}
530+
title="Gate Mode"
531+
>
532+
<Hand size={10} /> Gate
533+
</button>
531534
<button
532535
id="mode-loop"
533536
onClick={() => setTriggerMode('LOOP')}

0 commit comments

Comments
 (0)