@@ -11,7 +11,7 @@ interface WaveformEditorProps {
1111}
1212
1313export 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