@@ -39,6 +39,11 @@ PioneerDDJSB.jumpPreviewPosition = 0.5;
3939
4040
4141PioneerDDJSB . init = function ( id ) {
42+
43+ PioneerDDJSB . effectUnit = [ ] ;
44+ PioneerDDJSB . effectUnit [ 1 ] = new PioneerDDJSB . EffectUnit ( 1 ) ;
45+ PioneerDDJSB . effectUnit [ 2 ] = new PioneerDDJSB . EffectUnit ( 2 ) ;
46+
4247 PioneerDDJSB . scratchSettings = {
4348 'alpha' : 1.0 / 8 ,
4449 'beta' : 1.0 / 8 / 32 ,
@@ -61,37 +66,13 @@ PioneerDDJSB.init = function(id) {
6166 '[Sampler4]' : 0x03
6267 } ;
6368
64- PioneerDDJSB . fxGroups = {
65- '[EffectRack1_EffectUnit1]' : 0x00 ,
66- '[EffectRack1_EffectUnit2]' : 0x01
67- } ;
68-
69- PioneerDDJSB . fxControls = {
70- 'group_[Channel1]_enable' : 0x00 ,
71- 'group_[Channel3]_enable' : 0x00 ,
72- 'group_[Headphone]_enable' : 0x01 ,
73- 'group_[Channel2]_enable' : 0x02 ,
74- 'group_[Channel4]_enable' : 0x02
75- } ;
76-
7769 PioneerDDJSB . shiftPressed = false ;
7870
7971 PioneerDDJSB . chFaderStart = [
8072 null ,
8173 null
8274 ] ;
8375
84- PioneerDDJSB . fxButtonPressed = [
85- [ false , false , false ] ,
86- [ false , false , false ]
87- ] ;
88-
89- // used for soft takeover workaround
90- PioneerDDJSB . fxParamsActiveValues = [
91- [ 0 , 0 , 0 , 0 , 0 ] ,
92- [ 0 , 0 , 0 , 0 , 0 ]
93- ] ;
94-
9576 PioneerDDJSB . scratchMode = [ false , false , false , false ] ;
9677
9778 PioneerDDJSB . ledGroups = {
@@ -182,41 +163,24 @@ PioneerDDJSB.bindDeckControlConnections = function(channelGroup, isUnbinding) {
182163 }
183164
184165 script . bindConnections ( channelGroup , controlsToFunctions , isUnbinding ) ;
185-
186- for ( fxUnitIndex = 1 ; fxUnitIndex <= 2 ; fxUnitIndex ++ ) {
187- engine . connectControl ( '[EffectRack1_EffectUnit' + fxUnitIndex + ']' , 'group_' + channelGroup + '_enable' , 'PioneerDDJSB.fxLeds' , isUnbinding ) ;
188- if ( ! isUnbinding ) {
189- engine . trigger ( '[EffectRack1_EffectUnit' + fxUnitIndex + ']' , 'group_' + channelGroup + '_enable' ) ;
190- }
191- }
192166} ;
193167
194168PioneerDDJSB . bindNonDeckControlConnections = function ( isUnbinding ) {
195- var samplerIndex ,
196- fxUnitIndex ;
169+ var samplerIndex ;
197170
198171 for ( samplerIndex = 1 ; samplerIndex <= 4 ; samplerIndex ++ ) {
199172 PioneerDDJSB . bindSamplerControlConnections ( '[Sampler' + samplerIndex + ']' , isUnbinding ) ;
200173 }
201-
202- for ( fxUnitIndex = 1 ; fxUnitIndex <= 2 ; fxUnitIndex ++ ) {
203- engine . connectControl ( '[EffectRack1_EffectUnit' + fxUnitIndex + ']' , 'group_[Headphone]_enable' , 'PioneerDDJSB.fxLeds' , isUnbinding ) ;
204- }
205174} ;
206175
207176PioneerDDJSB . bindAllControlConnections = function ( isUnbinding ) {
208177 var samplerIndex ,
209- fxUnitIndex ,
210178 channelIndex ;
211179
212180 for ( samplerIndex = 1 ; samplerIndex <= 4 ; samplerIndex ++ ) {
213181 PioneerDDJSB . bindSamplerControlConnections ( '[Sampler' + samplerIndex + ']' , isUnbinding ) ;
214182 }
215183
216- for ( fxUnitIndex = 1 ; fxUnitIndex <= 2 ; fxUnitIndex ++ ) {
217- engine . connectControl ( '[EffectRack1_EffectUnit' + fxUnitIndex + ']' , 'group_[Headphone]_enable' , 'PioneerDDJSB.fxLeds' , isUnbinding ) ;
218- }
219-
220184 for ( channelIndex = 1 ; channelIndex <= 2 ; channelIndex ++ ) {
221185 PioneerDDJSB . bindDeckControlConnections ( '[Channel' + channelIndex + ']' , isUnbinding ) ;
222186 }
@@ -580,20 +544,6 @@ PioneerDDJSB.deckConverter = function(group) {
580544 return group % 2 ;
581545} ;
582546
583- PioneerDDJSB . fxLedControl = function ( deck , ledNumber , shift , active ) {
584- var fxLedsBaseChannel = 0x94 ,
585- fxLedsBaseControl = ( shift ? 0x63 : 0x47 ) ,
586- midiChannelOffset = PioneerDDJSB . deckConverter ( deck ) ;
587-
588- if ( midiChannelOffset !== null ) {
589- midi . sendShortMsg (
590- fxLedsBaseChannel + midiChannelOffset ,
591- fxLedsBaseControl + ledNumber ,
592- active ? 0x7F : 0x00
593- ) ;
594- }
595- } ;
596-
597547PioneerDDJSB . padLedControl = function ( deck , groupNumber , shiftGroup , ledNumber , shift , active ) {
598548 var padLedsBaseChannel = 0x97 ,
599549 padLedControl = ( shiftGroup ? 0x40 : 0x00 ) + ( shift ? 0x08 : 0x00 ) + ( + groupNumber ) + ( + ledNumber ) ,
@@ -626,14 +576,6 @@ PioneerDDJSB.nonPadLedControl = function(deck, ledNumber, active) {
626576// LEDS //
627577///////////////////////////////////////////////////////////////
628578
629- PioneerDDJSB . fxLeds = function ( value , group , control ) {
630- var deck = PioneerDDJSB . fxGroups [ group ] ,
631- ledNumber = PioneerDDJSB . fxControls [ control ] ;
632-
633- PioneerDDJSB . fxLedControl ( deck , ledNumber , false , value ) ;
634- PioneerDDJSB . fxLedControl ( deck , ledNumber , true , value ) ;
635- } ;
636-
637579PioneerDDJSB . headphoneCueLed = function ( value , group , control ) {
638580 PioneerDDJSB . nonPadLedControl ( group , PioneerDDJSB . nonPadLeds . headphoneCue , value ) ;
639581 PioneerDDJSB . nonPadLedControl ( group , PioneerDDJSB . nonPadLeds . shiftHeadphoneCue , value ) ;
@@ -898,88 +840,81 @@ PioneerDDJSB.rotarySelectorShiftedClick = function(channel, control, value, _sta
898840// FX //
899841///////////////////////////////////////////////////////////////
900842
901- PioneerDDJSB . fxKnobMSB = [ 0 , 0 ] ;
902- PioneerDDJSB . fxKnobShiftedMSB = [ 0 , 0 ] ;
843+ PioneerDDJSB . EffectUnit = function ( unitNumber ) {
844+ var eu = this ;
845+ this . group = "[EffectRack1_EffectUnit" + unitNumber + "]" ;
846+ engine . setValue ( this . group , "show_focus" , 1 ) ;
903847
904- PioneerDDJSB . fxButton = function ( channel , control , value , status , group ) {
905- var deck = channel - 4 ,
906- button = control - 0x47 ,
907- channel = PioneerDDJSB . deckSwitchTable [ '[Channel' + ( button === 0 ? 1 : 2 ) + ']' ] ;
848+ this . EffectButton = function ( buttonNumber ) {
849+ this . buttonNumber = buttonNumber ;
908850
909- PioneerDDJSB . fxButtonPressed [ deck ] [ button ] = ( value === 0x7F ) ;
851+ this . group = eu . group ;
852+ this . midi = [ 0x93 + unitNumber , 0x46 + buttonNumber ] ;
910853
911- if ( button === 1 ) {
912- engine . trigger ( group , 'group_[Headphone]_enable' ) ;
913- } else {
914- engine . trigger ( group , 'group_' + channel + '_enable' ) ;
915- }
916- } ;
917-
918- PioneerDDJSB . fxButtonShifted = function ( channel , control , value , status , group ) {
919- var button = control - 0x63 ,
920- channel = PioneerDDJSB . deckSwitchTable [ '[Channel' + ( button === 0 ? 1 : 2 ) + ']' ] ;
921-
922- if ( value ) {
923- if ( button === 1 ) {
924- script . toggleControl ( group , 'group_[Headphone]_enable' ) ;
925- } else {
926- script . toggleControl ( group , 'group_' + channel + '_enable' ) ;
927- }
928- }
929- } ;
930-
931- PioneerDDJSB . fxKnobShiftedMSB = function ( channel , control , value , status ) {
932- PioneerDDJSB . fxKnobShiftedMSB [ channel - 4 ] = value ;
933- } ;
934-
935- PioneerDDJSB . fxKnobShiftedLSB = function ( channel , control , value , status ) {
936- var deck = channel - 4 ,
937- fullValue = ( PioneerDDJSB . fxKnobShiftedMSB [ deck ] << 7 ) + value ;
938-
939- if ( PioneerDDJSB . softTakeoverEmulation ( deck , 4 , PioneerDDJSB . fxKnobShiftedMSB [ deck ] ) ) {
940- engine . setValue ( '[EffectRack1_EffectUnit' + ( deck + 1 ) + ']' , 'super1' , fullValue / 0x3FFF ) ;
941- }
942- } ;
943-
944- PioneerDDJSB . fxKnobMSB = function ( channel , control , value , status ) {
945- PioneerDDJSB . fxKnobMSB [ channel - 4 ] = value ;
946- } ;
947-
948- PioneerDDJSB . fxKnobLSB = function ( channel , control , value , status ) {
949- var deck = channel - 4 ,
950- anyButtonPressed = false ,
951- fullValue = ( PioneerDDJSB . fxKnobMSB [ deck ] << 7 ) + value ,
952- parameter ;
953-
954- for ( parameter = 0 ; parameter < 3 ; parameter ++ ) {
955- if ( PioneerDDJSB . fxButtonPressed [ deck ] [ parameter ] ) {
956- anyButtonPressed = true ;
957- }
958- }
959-
960- if ( ! anyButtonPressed ) {
961- if ( PioneerDDJSB . softTakeoverEmulation ( deck , 3 , PioneerDDJSB . fxKnobMSB [ deck ] ) ) {
962- engine . setValue ( '[EffectRack1_EffectUnit' + ( deck + 1 ) + ']' , 'mix' , fullValue / 0x3FFF ) ;
963- }
964- } else {
965- for ( parameter = 0 ; parameter < 3 ; parameter ++ ) {
966- if ( PioneerDDJSB . fxButtonPressed [ deck ] [ parameter ] && PioneerDDJSB . softTakeoverEmulation ( deck , parameter , PioneerDDJSB . fxKnobMSB [ deck ] ) ) {
967- engine . setParameter (
968- '[EffectRack1_EffectUnit' + ( deck + 1 ) + '_Effect1]' ,
969- 'parameter' + ( parameter + 1 ) ,
970- fullValue / 0x3FFF
971- ) ;
854+ components . Button . call ( this ) ;
855+ } ;
856+ this . EffectButton . prototype = new components . Button ( {
857+ input : function ( channel , control , value , status ) {
858+ if ( this . isPress ( channel , control , value , status ) ) {
859+ this . isLongPressed = false ;
860+ this . longPressTimer = engine . beginTimer ( this . longPressTimeout , function ( ) {
861+ var effectGroup = "[EffectRack1_EffectUnit" + unitNumber + "_Effect" + this . buttonNumber + "]" ;
862+ script . toggleControl ( effectGroup , "enabled" ) ;
863+ this . isLongPressed = true ;
864+ } , true ) ;
865+ } else {
866+ if ( ! this . isLongPressed ) {
867+ var focusedEffect = engine . getValue ( eu . group , "focused_effect" ) ;
868+ if ( focusedEffect === this . buttonNumber ) {
869+ engine . setValue ( eu . group , "focused_effect" , 0 ) ;
870+ } else {
871+ engine . setValue ( eu . group , "focused_effect" , this . buttonNumber ) ;
872+ }
873+ }
874+ this . isLongPressed = false ;
875+ engine . stopTimer ( this . longPressTimer ) ;
972876 }
877+ } ,
878+ outKey : "focused_effect" ,
879+ output : function ( value , _group , _control ) {
880+ this . send ( ( value === this . buttonNumber ) ? this . on : this . off ) ;
881+ } ,
882+ sendShifted : true ,
883+ shiftControl : true ,
884+ shiftOffset : 28 ,
885+ } ) ;
886+
887+ this . button = [ ] ;
888+ for ( var i = 1 ; i <= 3 ; i ++ ) {
889+ this . button [ i ] = new this . EffectButton ( i ) ;
890+
891+ var effectGroup = "[EffectRack1_EffectUnit" + unitNumber + "_Effect" + i + "]" ;
892+ engine . softTakeover ( effectGroup , "meta" , true ) ;
893+ engine . softTakeover ( eu . group , "mix" , true ) ;
894+ }
895+
896+ this . knob = new components . Pot ( {
897+ unshift : function ( ) {
898+ this . input = function ( channel , control , value , _status ) {
899+ value = ( this . MSB << 7 ) + value ;
900+
901+ var focusedEffect = engine . getValue ( eu . group , "focused_effect" ) ;
902+ if ( focusedEffect === 0 ) {
903+ engine . setParameter ( eu . group , "mix" , value / this . max ) ;
904+ } else {
905+ var effectGroup = "[EffectRack1_EffectUnit" + unitNumber + "_Effect" + focusedEffect + "]" ;
906+ engine . setParameter ( effectGroup , "meta" , value / this . max ) ;
907+ }
908+ } ;
909+ } ,
910+ } ) ;
911+
912+ this . knobSoftTakeoverHandler = engine . makeConnection ( eu . group , "focused_effect" , function ( value , _group , _control ) {
913+ if ( value === 0 ) {
914+ engine . softTakeoverIgnoreNextValue ( eu . group , "mix" ) ;
915+ } else {
916+ var effectGroup = "[EffectRack1_EffectUnit" + unitNumber + "_Effect" + value + "]" ;
917+ engine . softTakeoverIgnoreNextValue ( effectGroup , "meta" ) ;
973918 }
974- }
975- } ;
976-
977- PioneerDDJSB . softTakeoverEmulation = function ( deck , index , currentValue ) {
978- var deltaToActive = currentValue - PioneerDDJSB . fxParamsActiveValues [ deck ] [ index ] ;
979-
980- if ( Math . abs ( deltaToActive ) < 15 ) {
981- PioneerDDJSB . fxParamsActiveValues [ deck ] [ index ] = currentValue ;
982- return true ;
983- }
984- return false ;
985- } ;
919+ } . bind ( this ) ) ;
920+ } ;
0 commit comments