@@ -76,17 +76,44 @@ export function FX({ effectSlots, onChange }: Props) {
7676 onChange = { ( v ) => handleParamChange ( slotIndex , { delayFeedback : v } ) }
7777 format = { ( v ) => `${ Math . round ( v * 100 ) } %` }
7878 />
79+ < Knob
80+ label = "Left"
81+ min = { 0 }
82+ max = { 1 }
83+ step = { 0.01 }
84+ value = { effect . delayLeft ?? 0.5 }
85+ onChange = { ( v ) => handleParamChange ( slotIndex , { delayLeft : v } ) }
86+ format = { ( v ) => `${ Math . round ( v * 100 ) } %` }
87+ />
88+ < Knob
89+ label = "Right"
90+ min = { 0 }
91+ max = { 1 }
92+ step = { 0.01 }
93+ value = { effect . delayRight ?? 0.5 }
94+ onChange = { ( v ) => handleParamChange ( slotIndex , { delayRight : v } ) }
95+ format = { ( v ) => `${ Math . round ( v * 100 ) } %` }
96+ />
7997 < S . DelayTimeButtons >
80- { ( [ '8th' , '16th' , '32nd' , 'triplet' ] as DelayTime [ ] ) . map ( ( time ) => (
98+ { ( [ 'quarter' , 'half' , ' 8th', '16th' , '32nd' , 'triplet' ] as DelayTime [ ] ) . map ( ( time ) => (
8199 < S . DelayTimeButton
82100 key = { time }
83101 $active = { effect . delayTime === time }
84102 onClick = { ( ) => handleParamChange ( slotIndex , { delayTime : time } ) }
85103 >
86- { time === 'triplet' ? '3' : time . replace ( 'th' , '' ) }
104+ { time === 'triplet' ? '3' : time === 'quarter' ? '1/4' : time === 'half' ? '1/2' : time . replace ( 'th' , '' ) }
87105 </ S . DelayTimeButton >
88106 ) ) }
89107 </ S . DelayTimeButtons >
108+ < S . PingPongCheckbox >
109+ < input
110+ type = "checkbox"
111+ id = { `pingpong-${ slotIndex } ` }
112+ checked = { effect . delayPingPong ?? false }
113+ onChange = { ( e ) => handleParamChange ( slotIndex , { delayPingPong : e . target . checked } ) }
114+ />
115+ < label htmlFor = { `pingpong-${ slotIndex } ` } > Ping Pong</ label >
116+ </ S . PingPongCheckbox >
90117 </ >
91118 ) }
92119 { ( effect . type === 'distortion' || effect . type === 'saturation' ) && (
0 commit comments