You are on page 1of 25

{***********************************************

Kontakt 4 Factory Library


Synth Collection Arpeggiator
Author: Native Instruments
Written by: Josef Natterer, Nicki Marinic
Modified: September 11, 2009
*************************************************}
on init
set_script_title("Arpeggiator")
set_ui_height(5)
message("")
{PGS STUFF FOR K4}
_pgs_create_key(ARP_ON_OFF,1)
{END PGS STUFF FOR K4}
declare const $REC_TIME := 30
declare const $LATCH_TIME := 300
declare const $LATCH_TIME_TRANS := 1000
declare $repeat := 1
{if up/down: 1 = No Repeat, 2 = Repeat top, 3 = Repeat bottom, 5 = Repea
t both}
declare $latch_mode
make_persistent($latch_mode)
$latch_mode := 1
declare $Str_Vel := 100
declare $count := 0
declare !note_class[12]
!note_class[0] := "C"
!note_class[1] := "Db"
!note_class[2] := "D"
!note_class[3] := "Eb"
!note_class[4] := "E"
!note_class[5] := "F"
!note_class[6] := "Gb"
!note_class[7] := "G"
!note_class[8] := "Ab"
!note_class[9] := "A"
!note_class[10] := "Bb"
!note_class[11] := "B"
declare !note_names [128]
$count := 0
while ($count < 128)
!note_names[$count] := !note_class[$count mod 12] & (($count/12)
-2)
inc ($count)
end while
declare ui_knob $Latch_knob (0,3,1)
make_persistent($latch_knob)
set_text($Latch_knob,"Mode")
$latch_knob := 1
_read_persistent_var($latch_mode)
if(_pgs_key_exists(ARP_ON_OFF))
$Latch_knob := _pgs_get_key_val(ARP_ON_OFF,0)
$latch_mode := $latch_knob
end if
select ($latch_mode)
case 0
set_knob_label($latch_knob,"Off")
case 1
set_knob_label($latch_knob,"On")
case 2
set_knob_label($latch_knob,"Hold")
case 3
set_knob_label($latch_knob,"Hold +-")
end select
declare ui_knob $Dur (1, 200, 1)
set_text($Dur,"Duration")
set_knob_unit($Dur,$KNOB_UNIT_PERCENT)
set_knob_defval($Dur,100)
make_persistent($Dur)
$Dur := 100
declare ui_knob $Strike (1, 5, 1)
make_persistent($Strike)
$Strike := 1
declare ui_value_edit $Steps (2,32, 1)
make_persistent($Steps)
$Steps := 16
_read_persistent_var($steps)
declare ui_table %rhythm[32] (2,2,100)
make_persistent(%rhythm)
declare ui_knob $Swing (-50,50,1)
make_persistent($Swing)
set_knob_unit($Swing,$KNOB_UNIT_PERCENT)
$Swing := 0
set_knob_defval($Swing,0)
declare ui_knob $Octave (-6,6,1)
make_persistent($Octave)
$Octave := 0
set_knob_defval($Octave,0)
declare ui_menu $note_order
add_menu_item ($note_order,"Select Note Order",99)
add_menu_item ($note_order, "--------------",99)
add_menu_item ($note_order, "As Played",1)
add_menu_item ($note_order, "--------------",99)
add_menu_item ($note_order, "Up",2)
add_menu_item ($note_order, "Down",3)
add_menu_item ($note_order, "Up & Down",4)
add_menu_item ($note_order, "Down & Up",5)
add_menu_item ($note_order, "--------------",99)
add_menu_item ($note_order, "Zig-Zag Up",6)
add_menu_item ($note_order, "Zig-Zag Down",7)
add_menu_item ($note_order, "Zig-Zag Up-Dn",8)
add_menu_item ($note_order, "Zig-Zag Dn-Up",9)
add_menu_item ($note_order, "--------------",99)
add_menu_item ($note_order, "Move in", 10)
add_menu_item ($note_order, "Move out",11)
add_menu_item ($note_order, "Move in & out",12)
add_menu_item ($note_order, "Move out & in",13)
add_menu_item ($note_order, "--------------",99)
add_menu_item ($note_order, "Random",14)
add_menu_item ($note_order, "Random (Urn)",15)
add_menu_item ($note_order, "--------------",99)
add_menu_item ($note_order, "All (Chord)",16)
declare $last_note_order := 2
$note_order := 2
make_persistent($note_order)
make_persistent($last_note_order)
declare ui_switch $Velo_button
set_control_par_str(get_ui_id($Velo_button),$CONTROL_PAR_TEXT,"Fix Veloc
ity")
make_persistent($Velo_button)
declare ui_switch $midi_thru
set_control_par_str(get_ui_id($midi_thru),$CONTROL_PAR_TEXT,"MIDI Thru")
make_persistent($midi_thru)
{**** from retrigger script*********}
declare const $Tempo_knob_X := 4
declare const $Tempo_knob_Y := 3
declare @knob_name
@knob_name := "Rate"
declare !tempo_names[18]
!tempo_names[0] := "1/128"
!tempo_names[1] := "1/64"
!tempo_names[2] := "1/32"
!tempo_names[3] := "1/16 T"
!tempo_names[4] := "3/64"
!tempo_names[5] := "1/16"
!tempo_names[6] := "1/8 T"
!tempo_names[7] := "3/32"
!tempo_names[8] := "1/8"
!tempo_names[9] := "1/4 T"
!tempo_names[10] := "3/16"
!tempo_names[11] := "1/4"
!tempo_names[12] := "1/2 T"
!tempo_names[13] := "3/8"
!tempo_names[14] := "1/2"
!tempo_names[15] := "3/4"
!tempo_names[16] := "4/4"
!tempo_names[17] := "Bar"
declare ui_knob $Rate_knob (0,1000000,1)
set_text ($Rate_knob,"Rate")
make_persistent ($Rate_knob)
declare ui_knob $Sync_knob (0,17,1)
set_text ($Sync_knob,@knob_name)
$Sync_knob := 5
set_knob_defval ($Sync_knob,5)
set_knob_label ($Sync_knob,!tempo_names[$Sync_knob])
make_persistent ($Sync_knob)
declare $fill_buffer := 11
make_persistent($fill_buffer)
{**** from retrigger script*********}
declare %pressed_id[128]
declare %note_buffer[512]
declare %ordered[128]
declare %velo[128]
declare $cursor
declare $old_latch_time
declare $a
declare $aa
declare $sema
declare $rand
declare $bb
declare $b
declare $loop_cursor
declare %loop_buffer[512]
declare $id
declare $check_id
declare $min
declare $min_note
declare $max_note
declare $helper
declare %help_buffer[512]
declare $step_length
declare $strike_count
declare $duration
declare $note
declare $velo
declare $act_step
declare $last_order
declare $oct_cursor
declare $swing_cursor
declare const $PRESET_LENGTH := 43
declare ui_menu $edit_preset
add_menu_item($edit_preset,"Select Preset...",100)
add_menu_item($edit_preset,"--------------",99)
declare %helper_preset[42] := (...
100,100,100,100,100,100,100,100,100,100,...
100,100,100,100,100,100,100,100,100,100,...
100,100,100,100,100,100,100,100,100,100,...
100,100,16,2,1,0,1,294118,100,0,0,250)
declare %helper_rhythm[33] := (...
100,100,100,100,100,100,100,100,100,100,...
100,100,100,100,100,100,100,100,100,100,...
100,100,100,100,100,100,100,100,100,100,100,100,16)
make_persistent(%helper_preset)
declare %default_preset[42] := (...
100,100,100,100,100,100,100,100,100,100,...
100,100,100,100,100,100,100,100,100,100,...
100,100,100,100,100,100,100,100,100,100,...
100,100,16,2,1,0,1,294118,100,0,0,250)
declare %preset_arr[12*42]
make_persistent(%Preset_arr)
$a := 0
while($a < 12*42)
%preset_arr[$a] := %default_preset[$a mod 42]
inc($a)
end while
$a := 0
set_table_steps_shown(%rhythm, $steps)
_read_persistent_var($Sync_knob)
set_knob_label ($Sync_knob,!tempo_names[$Sync_knob])
$Rate_knob := ($sync_knob *1000001) / 17
set_knob_defval ($Rate_knob,(5 *1000001) / 17)
set_knob_label ($Rate_knob,!tempo_names[$sync_knob])
set_knob_unit($Rate_knob,$KNOB_UNIT_NONE)
declare ui_label $note_order_label (1,1)
set_text ($note_order_label,"Note Order:")
set_control_par(get_ui_id($note_order_label),$CONTROL_PAR_TEXT_ALIGNMENT
,1)
declare ui_label $Global_label (3,1)
set_text ($Global_label,"Global Settings")
set_control_par(get_ui_id($Global_label),$CONTROL_PAR_TEXT_ALIGNMENT,1)
declare ui_label $Pitch_label (3,1)
set_text ($Pitch_label,"Pitch")
set_control_par(get_ui_id($Pitch_label),$CONTROL_PAR_TEXT_ALIGNMENT,1)
declare ui_label $Timing_label (3,1)
set_text ($Timing_label,"Timing")
set_control_par(get_ui_id($Timing_label),$CONTROL_PAR_TEXT_ALIGNMENT,1)
declare ui_label $Rhythm_label (3,1)
set_text ($Rhythm_label,"Rhythm")
set_control_par(get_ui_id($Rhythm_label),$CONTROL_PAR_TEXT_ALIGNMENT,1)
move_control($Global_label,1,2)
move_control($Pitch_label,4,2)
move_control($Timing_label,1,7)
move_control($Rhythm_label,4,7)
move_control($note_order_label,4,3)
move_control(%rhythm,5,8)
move_control($swing,3,8)
move_control($steps,4,8)
move_control($Dur,2,8)
move_control($note_order,4,4)
move_control($strike,6,3)
move_control($Octave,5,3)
move_control($latch_knob,1,3)
move_control($edit_preset,0,0)
move_control($Velo_button,4,9)
move_control($midi_thru,3,4)
move_control($Rate_knob,1,8)
move_control($Sync_knob,0,0)
{******************** SET CONTROL HELP *********************************
*******}
set_control_help($Latch_knob,"Arpeggiator Mode: Choose among three arpeg
giator modes. <On> enables the normal arpeggiator mode. <Hold> will latch all pl
ayed keys. <Hold+-> will latch all played keys and subsequently played keys will
be added or taken away from the note buffer. <Off> turns the arpeggiator off.")
set_control_help($Dur,"Duration: Sets the duration of the arpeggiated MI
DI notes in percent. This will only hange the length o the MIDI notes, not the v
olume envelope.")
set_control_help($Strike,"Strike: Sets the number of strikes of each not
e of the note buffer. When <Strike> is set to any other value other than 1, each
note of the note buffer will be repeated by the amount specified with <Strike>.
")
set_control_help(%rhythm,"Rhythm Grid: Sets the rhythmic pattern of the
arpeggiated notes. The columns set the velocity of each note. If a column is set
to 0 (e.g. by Cmd/Ctrl cliking on a table column), the step will not be played.
The actual velocity depends on the <Fix Velocity> button, the length of the pat
tern can be set with <Steps>.")
set_control_help($Swing,"Swing: Offsets every other step by the specifie
d amount in percent in order to create a swing feel. Positive values delay every
other step, negative values push every other step forward.")
set_control_help($Steps,"Steps: Sets the number of steps of the rhythmic
pattern.")
set_control_help($Octave,"Octave: Sets the octave displacement, i.e. the
distribution of the arpeggio pattern in various octaves. The arpeggio pattern c
ycles from the played octave to the octave set upwards.")
set_control_help($note_order_label,"Note Order: Defines the pattern for
the order in which notes are arpeggiated.")
set_control_help($note_order,"Note Order: Defines the pattern for the or
der in which notes are arpeggiated.")
set_control_help($velo_button,"Fix Velocity: When enabled, played veloci
ties are ignored and taken from the columns in the rhythmic grid. When deactivat
ed, played velocities will be scaled by the columns of the rhythmic grid.")
set_control_help($edit_preset,"Preset Menu: Selection of factory presets
.")
set_control_help($Global_label,"Global Settings: Adjust the arpeggiator'
s global settings.")
set_control_help($Pitch_label,"Pitch Settings: Adjust the arpeggiator's
pitch settings, which determine the octaves and note repititions played.")
set_control_help($Pitch_label,"Timing Settings: Adjust the arpeggiator's
timing settings, which determine the rate and duration of the notes and the amo
unt of swing.")
set_control_help($Pitch_label,"Rhythm Settings: Adjust the arpeggiator's
rhythm settings, which determine the velocities of the notes and the number of
velocity steps played.")
set_control_help($Sync_knob,"Rate (Sync): Adjust the tempo in rhythmical
values, synced to the master clock. T stands for triplet.")
set_control_help($midi_thru,"MIDI Thru: When activated, played notes wil
l be merged with the arpeggiated notes.")
set_control_help($Rate_Knob,"Rate: Sets the rate of the arpeggiator.")
{******************** SET CONTROL HELP *********************************
*******}
end on
on note
if ($latch_mode = 0)
exit
end if
%velo[$EVENT_NOTE] := $EVENT_VELOCITY
{only one event per Note}
set_event_par($EVENT_ID,0,2)
if ($midi_thru = 0)
ignore_event($EVENT_ID)
end if
if (%pressed_id[$EVENT_NOTE] > 0)
exit
else
%pressed_id[$EVENT_NOTE] := $EVENT_ID
end if
{which notes should be in the buffer}
select ($latch_mode)
case 1
%note_buffer[$cursor] := $EVENT_NOTE
inc($cursor)
case 2
if ($ENGINE_UPTIME - $old_latch_time > $LATCH_TIME)
$a := 0
while($a < $cursor)
%note_buffer[$a] := 0
inc($a)
end while
$cursor := 0
end if
%note_buffer[$cursor] := $EVENT_NOTE
inc($cursor)
$old_latch_time := $ENGINE_UPTIME
case 3
$a := 0
$b := $cursor
$cursor := 0
while($a < $b)
if ($EVENT_NOTE # %note_buffer[$a])
%note_buffer[$cursor] := %note_buffer[$a
]
inc($cursor)
end if
inc($a)
end while
if ($b = $cursor)
%note_buffer[$cursor] := $EVENT_NOTE
inc($cursor)
end if
end select
if ($cursor < 2 and $check_id = 0)
$check_id := $EVENT_ID
$aa := 0
$act_step := 0
$oct_cursor := 0
$last_order := -1
$swing_cursor := 0
wait($REC_TIME*1000)
while($cursor > 0)
$a := 0
while($a < 128)
if ($a < $cursor)
%ordered[$a] := %note_buffer[$a]
else
%ordered[$a] := 0
%note_buffer[$a] := 0
end if
inc($a)
end while
$min_note := %ordered[$cursor-1]
$max_note := %ordered[0]
sort(%ordered,1)
select ($note_order)
case 1
$loop_cursor := $cursor
$a := 0
while($a < $cursor)
%loop_buffer[$a] := %note_buffer
[$a]
inc($a)
end while
case 2 {up }
$loop_cursor := $cursor
$a := 0
while($a < $cursor )
%loop_buffer[$a] := %ordered[$cu
rsor - 1 - $a]
inc($a)
end while
case 3 {down }
$loop_cursor := $cursor
$a := 0
while($a < $cursor )
%loop_buffer[$a] := %ordered[$a]
inc($a)
end while
case 4 {up_down }
$loop_cursor := $cursor
$a := 0
while($a < $cursor )
%loop_buffer[$a] := %ordered[$cu
rsor -1 - $a]
inc($a)
end while
if ($cursor > 2)
select ($repeat)
case 1
$loop_cursor :=
($cursor*2)-2
$a := 0
while($a < $curs
or-2 )
%loop_bu
ffer[$a+$cursor] := %ordered[$a+1]
inc($a)
end while
case 2
$loop_cursor :=
($cursor*2)-1
$a := 0
while($a < $curs
or-1 )
%loop_bu
ffer[$a+$cursor] := %ordered[$a]
inc($a)
end while
case 3
$loop_cursor :=
($cursor*2)-1
$a := 0
while($a < $curs
or-1 )
%loop_bu
ffer[$a+$cursor] := %ordered[$a+1]
inc($a)
end while
case 5
$loop_cursor :=
($cursor*2)
$a := 0
while($a < $curs
or )
%loop_bu
ffer[$a+$cursor] := %ordered[$a]
inc($a)
end while
end select
end if
case 5 {down_up }
$loop_cursor := $cursor
$a := 0
while($a < $cursor )
%loop_buffer[$a] := %ordered[$a]
inc($a)
end while
if ($cursor > 2)
select ($repeat)
case 1
$loop_cursor :=
($cursor*2)-2
$a := 0
while($a < $curs
or-2 )
%loop_bu
ffer[$a+$cursor] := %ordered[$cursor -2- $a]
inc($a)
end while
case 3
$loop_cursor :=
($cursor*2)-1
$a := 0
while($a < $curs
or-1 )
%loop_bu
ffer[$a+$cursor] := %ordered[$cursor -1 - $a]
inc($a)
end while
case 2
$loop_cursor :=
($cursor*2)-1
$a := 0
while($a < $curs
or-1 )
%loop_bu
ffer[$a+$cursor] := %ordered[$cursor -2- $a]
inc($a)
end while
case 5
$loop_cursor :=
($cursor*2)
$a := 0
while($a < $curs
or )
%loop_bu
ffer[$a+$cursor] := %ordered[$cursor -1- $a]
inc($a)
end while
end select
end if
case 6 {zickzack up}
if ($cursor = 1)
%loop_buffer[0] := $min_note
$loop_cursor := 1
end if
if ($cursor = 2)
%loop_buffer[0] := $min_note
%loop_buffer[1] := $max_note
$loop_cursor := 2
end if
if ($cursor = 3)
%loop_buffer[0] := %ordered[2]
%loop_buffer[1] := %ordered[0]
%loop_buffer[2] := %ordered[1]
$loop_cursor := 3
end if
if ($cursor > 3)
$a := 0
while($a < $cursor-2)
%loop_buffer[($a*2)] :=
%ordered[$cursor-$a-1]
%loop_buffer[($a*2)+1] :
=%ordered[$cursor-$a-3]
inc($a)
end while
$loop_cursor := (2*$cursor)-4
end if
case 7 {zickzack_down }
if ($cursor = 1)
%loop_buffer[0] := $min_note
$loop_cursor := 1
end if
if ($cursor = 2)
%loop_buffer[0] := $max_note
%loop_buffer[1] := $min_note
$loop_cursor := 2
end if
if ($cursor = 3)
%loop_buffer[0] := %ordered[0]
%loop_buffer[1] := %ordered[2]
%loop_buffer[2] := %ordered[1]
$loop_cursor := 3
end if
if ($cursor > 3)
$a := 0
while($a < $cursor-2)
%loop_buffer[($a*2)] :=
%ordered[$a]
%loop_buffer[($a*2)+1] :
=%ordered[$a+2]
inc($a)
end while
$loop_cursor := (2*$cursor)-4
end if
case 8 {zickzack updn}
if ($cursor = 1)
%loop_buffer[0] := $min_note
$loop_cursor := 1
end if
if ($cursor = 2)
%loop_buffer[0] := $min_note
%loop_buffer[1] := $max_note
$loop_cursor := 2
end if
if ($cursor = 3)
select($repeat)
case 1
%loop_buffer[0]
:= %ordered[2]
%loop_buffer[1]
:= %ordered[0]
%loop_buffer[2]
:= %ordered[1]
%loop_buffer[3]
:= %ordered[0]
$loop_cursor :=
4
case 3
%loop_buffer[0]
:= %ordered[2]
%loop_buffer[1]
:= %ordered[0]
%loop_buffer[2]
:= %ordered[1]
%loop_buffer[3]
:= %ordered[1]
%loop_buffer[4]
:= %ordered[0]
$loop_cursor :=
5
case 2
%loop_buffer[0]
:= %ordered[2]
%loop_buffer[1]
:= %ordered[0]
%loop_buffer[2]
:= %ordered[1]
%loop_buffer[3]
:= %ordered[0]
%loop_buffer[4]
:= %ordered[2]
$loop_cursor :=
5
case 5
%loop_buffer[0]
:= %ordered[2]
%loop_buffer[1]
:= %ordered[0]
%loop_buffer[2]
:= %ordered[1]
%loop_buffer[3]
:= %ordered[1]
%loop_buffer[4]
:= %ordered[0]
%loop_buffer[5]
:= %ordered[2]
$loop_cursor :=
6
end select
end if
if ($cursor > 3)
select ($repeat)
case 1
$a := 0
while($a < $curs
or-2)
%loop_bu
ffer[($a*2)] := %ordered[$cursor-$a-1]
%loop_bu
ffer[($a*2)+1] :=%ordered[$cursor-$a-3]
inc($a)
end while
$a := 0
while($a < $curs
or-3)
%loop_bu
ffer[($a*2)+(($cursor-2)*2)] := %ordered[$a+2]
%loop_bu
ffer[($a*2)+(($cursor-2)*2)+1] :=%ordered[$a+1]
inc($a)
end while
$loop_cursor :=
(4*$cursor)-10
case 2
$a := 0
while($a < $curs
or-2)
%loop_bu
ffer[($a*2)] := %ordered[$cursor-$a-1]
%loop_bu
ffer[($a*2)+1] :=%ordered[$cursor-$a-3]
inc($a)
end while
%loop_buffer[($c
ursor-2)*2] :=%ordered[0]
$a := 0
while($a < $curs
or-3)
%loop_bu
ffer[($a*2)+(($cursor-2)*2)+1] := %ordered[$a+2]
%loop_bu
ffer[($a*2)+(($cursor-2)*2)+2] :=%ordered[$a+1]
inc($a)
end while
$loop_cursor :=
(4*$cursor)-9
case 3
$a := 0
while($a < $curs
or-2)
%loop_bu
ffer[($a*2)] := %ordered[$cursor-$a-1]
%loop_bu
ffer[($a*2)+1] :=%ordered[$cursor-$a-3]
inc($a)
end while
$a := 0
while($a < $curs
or-3)
%loop_bu
ffer[($a*2)+(($cursor-2)*2)] := %ordered[$a+2]
%loop_bu
ffer[($a*2)+(($cursor-2)*2)+1] :=%ordered[$a+1]
inc($a)
end while
%loop_buffer[(4*
$cursor)-9-1] :=%ordered[$cursor-1]
$loop_cursor :=
(4*$cursor)-9
case 5
$a := 0
while($a < $curs
or-2)
%loop_bu
ffer[($a*2)] := %ordered[$cursor-$a-1]
%loop_bu
ffer[($a*2)+1] :=%ordered[$cursor-$a-3]
inc($a)
end while
%loop_buffer[($c
ursor-2)*2] :=%ordered[0]
$a := 0
while($a < $curs
or-3)
%loop_bu
ffer[($a*2)+(($cursor-2)*2)+1] := %ordered[$a+2]
%loop_bu
ffer[($a*2)+(($cursor-2)*2)+2] :=%ordered[$a+1]
inc($a)
end while
%loop_buffer[(4*
$cursor)-8-1] :=%ordered[$cursor-1]
$loop_cursor :=
(4*$cursor)-8
end select
end if
case 9
if ($cursor = 1)
%loop_buffer[0] := $min_note
$loop_cursor := 1
end if
if ($cursor = 2)
%loop_buffer[0] := $max_note
%loop_buffer[1] := $min_note
$loop_cursor := 2
end if
if ($cursor = 3)
select($repeat)
case 1
%loop_buffer[0]
:= %ordered[0]
%loop_buffer[1]
:= %ordered[2]
%loop_buffer[2]
:= %ordered[1]
%loop_buffer[3]
:= %ordered[2]
$loop_cursor :=
4
case 3
%loop_buffer[0]
:= %ordered[0]
%loop_buffer[1]
:= %ordered[2]
%loop_buffer[2]
:= %ordered[1]
%loop_buffer[3]
:= %ordered[1]
%loop_buffer[4]
:= %ordered[2]
$loop_cursor :=
5
case 2
%loop_buffer[0]
:= %ordered[0]
%loop_buffer[1]
:= %ordered[2]
%loop_buffer[2]
:= %ordered[1]
%loop_buffer[3]
:= %ordered[2]
%loop_buffer[4]
:= %ordered[0]
$loop_cursor :=
5
case 5
%loop_buffer[0]
:= %ordered[0]
%loop_buffer[1]
:= %ordered[2]
%loop_buffer[2]
:= %ordered[1]
%loop_buffer[3]
:= %ordered[1]
%loop_buffer[4]
:= %ordered[2]
%loop_buffer[5]
:= %ordered[0]
$loop_cursor :=
6
end select
end if
if ($cursor > 3)
select ($repeat)
case 1
$a := 0
while($a < $curs
or-2)
%loop_bu
ffer[($a*2)] := %ordered[$a]
%loop_bu
ffer[($a*2)+1] :=%ordered[$a+2]
inc($a)
end while
$a := 0
while($a < $curs
or-3)
%loop_bu
ffer[($a*2)+(($cursor-2)*2)] := %ordered[$cursor-$a-3]
%loop_bu
ffer[($a*2)+(($cursor-2)*2)+1] :=%ordered[$cursor-$a-2]
inc($a)
end while
$loop_cursor :=
(4*$cursor)-10
case 3
$a := 0
while($a < $curs
or-2)
%loop_bu
ffer[($a*2)] := %ordered[$a]
%loop_bu
ffer[($a*2)+1] :=%ordered[$a+2]
inc($a)
end while
%loop_buffer[($c
ursor-2)*2] :=%ordered[$cursor-1]
$a := 0
while($a < $curs
or-3)
%loop_bu
ffer[($a*2)+(($cursor-2)*2)+1] := %ordered[$cursor - $a-3]
%loop_bu
ffer[($a*2)+(($cursor-2)*2)+2] :=%ordered[$cursor - $a-2]
inc($a)
end while
$loop_cursor :=
(4*$cursor)-9
case 2
$a := 0
while($a < $curs
or-2)
%loop_bu
ffer[($a*2)] := %ordered[$a]
%loop_bu
ffer[($a*2)+1] :=%ordered[$a+2]
inc($a)
end while
$a := 0
while($a < $curs
or-3)
%loop_bu
ffer[($a*2)+(($cursor-2)*2)] := %ordered[$cursor-$a-3]
%loop_bu
ffer[($a*2)+(($cursor-2)*2)+1] :=%ordered[$cursor-$a-2]
inc($a)
end while
%loop_buffer[(4*
$cursor)-9-1] :=%ordered[0]
$loop_cursor :=
(4*$cursor)-9
case 5
$a := 0
while($a < $curs
or-2)
%loop_bu
ffer[($a*2)] := %ordered[$a]
%loop_bu
ffer[($a*2)+1] :=%ordered[$a+2]
inc($a)
end while
%loop_buffer[($c
ursor-2)*2] :=%ordered[$cursor-1]
$a := 0
while($a < $curs
or-3)
%loop_bu
ffer[($a*2)+(($cursor-2)*2)+1] := %ordered[$cursor - $a-3]
%loop_bu
ffer[($a*2)+(($cursor-2)*2)+2] :=%ordered[$cursor - $a-2]
inc($a)
end while
%loop_buffer[(4*
$cursor)-8-1] :=%ordered[0]
$loop_cursor :=
(4*$cursor)-8
end select
end if
case 10 to 13
$loop_cursor := $cursor
$a := 0
while(($a*2) < $cursor)
%loop_buffer[($a*2)] := %ordered
[$cursor -1 -$a]
%loop_buffer[($a*2)+1] := %order
ed[$a]
inc($a)
end while
$loop_cursor := $cursor
if ($note_order = 11 or $note_order = 13
)
$a := 0
while($a < $loop_cursor)
%help_buffer[$loop_curso
r - $a-1] := %loop_buffer[$a]
inc($a)
end while
$a := 0
while($a < $loop_cursor)
%loop_buffer[$a] := %hel
p_buffer[$a]
inc($a)
end while
end if
if (($note_order = 12 or $note_order = 1
3) and $cursor > 2)
select ($repeat)
case 1
$a := 0
while($a < $curs
or-2)
%loop_bu
ffer[($a)+($cursor)] := %loop_buffer[$cursor-2-$a]
inc($a)
end while
$loop_cursor :=
$cursor*2 - 2
case 2
if ($note_order
= 12)
$a := 0
while($a
< $cursor-1)
%loop_buffer[($a)+($cursor)] := %loop_buffer[$cursor-1-$a]
inc($a)
end whil
e
$loop_cu
rsor := $cursor*2 - 1
else
$a := 0
while($a
< $cursor-1)
%loop_buffer[($a)+($cursor)] := %loop_buffer[$cursor-2-$a]
inc($a)
end whil
e
$loop_cu
rsor := $cursor*2 - 1
end if
case 3
if ($note_order
= 13)
$a := 0
while($a
< $cursor-1)
%loop_buffer[($a)+($cursor)] := %loop_buffer[$cursor-1-$a]
inc($a)
end whil
e
$loop_cu
rsor := $cursor*2 - 1
else
$a := 0
while($a
< $cursor-1)
%loop_buffer[($a)+($cursor)] := %loop_buffer[$cursor-2-$a]
inc($a)
end whil
e
$loop_cu
rsor := $cursor*2 - 1
end if
case 5
$a := 0
while($a < $curs
or)
%loop_bu
ffer[($a)+($cursor)] := %loop_buffer[$cursor-1-$a]
inc($a)
end while
$loop_cursor :=
$cursor*2
end select
end if
case 14
$loop_cursor := 1
%loop_buffer[$aa+1] := %ordered[random(0
,$cursor-1)]
%loop_buffer[0] := %ordered[random(0,$cu
rsor-1)]
case 15
if ($aa < 2 or $last_order # $note_order
)
$loop_cursor := $cursor
$a := 0
while($a < $cursor)
%help_buffer[$a] := %ord
ered[$a]
inc($a)
end while
$helper := $cursor
$a := 0
while ($a < $cursor)
%loop_buffer[$a] := %hel
p_buffer[random(0,$helper-1)]
$bb := 0
while($bb < $helper)
if (%help_buffer
[$bb] = %loop_buffer[$a])
while($b
b < $helper)
%help_buffer[$bb] := %help_buffer[$bb+1]
inc($bb)
end whil
e
$bb := $
helper+1
dec($hel
per)
end if
inc($bb)
end while
inc($a)
end while
end if
case 16
$loop_cursor := $cursor
$a := 0
while($a < $cursor )
%loop_buffer[$a] := %note_buffer
[$a]
inc($a)
end while
end select
$last_order := $note_order
select ($Sync_knob)
case 0
$step_length := $DURATIO
N_SIXTEENTH/8
case 1
$step_length := $DURATIO
N_SIXTEENTH/4
case 2
$step_length := $DURATIO
N_SIXTEENTH/2
case 3
$step_length := $DURATIO
N_QUARTER/6
case 4
$step_length := ($DURATI
ON_SIXTEENTH/4)*3
case 5
$step_length := $DURATIO
N_SIXTEENTH
case 6
$step_length := $DURATIO
N_QUARTER/3
case 7
$step_length := ($DURATI
ON_SIXTEENTH/2)*3
case 8
$step_length := $DURATIO
N_EIGHTH
case 9
$step_length := ($DURATI
ON_QUARTER*2)/3
case 10
$step_length := $DURATIO
N_SIXTEENTH*3
case 11
$step_length := $DURATIO
N_QUARTER
case 12
$step_length := ($DURATI
ON_QUARTER*4)/3
case 13
$step_length := $DURATIO
N_EIGHTH*3
case 14
$step_length := $DURATIO
N_QUARTER*2
case 15
$step_length := $DURATIO
N_QUARTER*3
case 16
$step_length := $DURATIO
N_QUARTER*4
case 17
$step_length := $DURATIO
N_BAR
end select
if ($swing_cursor mod 2 = 0)
$step_length := $step_length + ($step_length*$Sw
ing)/100
else
$step_length := $step_length + ($step_length*(-$
Swing))/100
end if
inc($swing_cursor)
$duration := ($step_length/100)*$dur
if ($duration < 10000)
$duration := 10000
end if
if ($step_length < 5000)
$step_length := 5000
end if
$velo := 100
if (%rhythm[$act_step] # 0)
if ($loop_cursor # 0)
if ($note_order = 16)
$a := 0
while($a < $loop_cursor)
$note := %loop_buffer[$a
] + $oct_cursor*12
$velo := %velo[%loop_buf
fer[$a]]
if ($strike_count > 0)
$velo := ($velo
* $Str_vel)/100
end if
if ($velo_button = 1)
$velo := 127
end if
$velo := ($velo * %rhyth
m[$act_step])/100
if ($velo > 127)
$velo := 127
end if
if ($velo < 1)
$velo := 1
end if
if ($note > 0 and $note
< 128)
play_note($note,
$velo,0,$duration)
end if
inc($a)
end while
if ($strike_count >= $strike-1)
$aa := $loop_cursor
end if
else
$note := %loop_buffer[$aa] + $oc
t_cursor*12
$velo := %velo[%loop_buffer[$aa]
]
if ($strike_count > 0)
$velo := ($velo * $Str_v
el)/100
end if
if ($velo_button = 1)
$velo := 127
end if
$velo := ($velo * %rhythm[$act_s
tep])/100
if ($velo > 127)
$velo := 127
end if
if ($velo < 1)
$velo := 1
end if
if ($note > 0 and $note < 128)
play_note($note,$velo,0,
$duration)
end if
end if
end if
if ($strike_count < $strike-1)
dec($aa)
dec($act_step)
inc($strike_count)
else
$strike_count := 0
end if
else
if ($strike_count < $strike-1)
dec($act_step)
inc($strike_count)
else
$strike_count := 0
end if
dec($aa)
end if
inc($aa)
if ($aa >= $loop_cursor)
$aa := 0
if ($octave > 0 )
inc($oct_cursor)
if ($oct_cursor > $Octave)
$oct_cursor := 0
end if
end if
if ($octave < 0 )
dec($oct_cursor)
if ($oct_cursor < $Octave)
$oct_cursor := 0
end if
end if
end if
inc($act_step)
if ($act_step >= $steps)
$act_step := 0
end if
wait($step_length)
end while
$check_id := 0
end if
end on
on release
{only one event per Note}
if (%EVENT_PAR[0] = 2)
{ignore_event($EVENT_ID)}
if (%pressed_id[$EVENT_NOTE] = 0)
exit
else
%pressed_id[$EVENT_NOTE] := 0
end if
else
exit
end if
if ($latch_mode = 0)
exit
end if
{which notes should be in the buffer}
select ($latch_mode)
case 1
$a := 0
$b := $cursor
$cursor := 0
while($a < $b)
if ($EVENT_NOTE # %note_buffer[$a])
%note_buffer[$cursor] := %note_buffer[$a
]
inc($cursor)
end if
inc($a)
end while
case 2 to 3
exit
end select
end on
on ui_control ($latch_knob)
$latch_mode := $latch_knob
select ($latch_mode)
case 0
set_knob_label($latch_knob,"Off")
$a := 0
while($a < $cursor)
%note_buffer[$a] := 0
inc($a)
end while
$cursor := 0
case 1
set_knob_label($latch_knob,"On")
$b := $cursor
$cursor := 0
$a := 0
while($a < $b)
if (%pressed_id[%note_buffer[$a]] > 0)
%note_buffer[$cursor] := %note_buffer[$a
]
inc($cursor)
end if
inc($a)
end while
case 2
set_knob_label($latch_knob,"Hold")
case 3
set_knob_label($latch_knob,"Hold +-")
end select
end on
on ui_control ($Sync_knob)
set_knob_label ($Sync_knob,!tempo_names[$Sync_knob])
end on
on ui_control($edit_Preset)
if ($edit_Preset < 99)
{select($edit_Preset)
case 1
$a := 0
while($a < 42)
%helper_preset[$a] := %preset_arr[(($Pre
set_knob - 1)*42)+$a ]
inc($a)
end while
case 2
$a := 0
while($a < 42)
%preset_arr[(($Preset_knob - 1)*42)+$a ]
:= %helper_preset[$a]
inc($a)
end while
case 3
$a := 0
while($a < 42)
%preset_arr[(($Preset_knob - 1)*42)+$a ]
:= %default_preset[$a]
inc($a)
end while
case 7
$b := 0
while($b < 12)
$a := 0
while($a < 42)
%preset_arr[($b*42)+$a ] := %pre
set_arr[(($Preset_knob - 1)*42)+$a]
inc($a)
end while
inc($b)
end while
case 4
$a := 0
while($a < 33)
%helper_rhythm[$a] := %preset_arr[(($Pre
set_knob - 1)*42)+$a ]
inc($a)
end while
case 5
$a := 0
while($a < 33)
%preset_arr[(($Preset_knob - 1)*42)+$a ]
:= %helper_rhythm[$a]
inc($a)
end while
case 6
$a := 0
while($a < 33)
%preset_arr[(($Preset_knob - 1)*42)+$a ]
:= %default_preset[$a]
inc($a)
end while
case 8
$a := 0
while($a < 32)
if (%preset_arr[(($Preset_knob - 1)*42)+
$a ] > 0)
%preset_arr[(($Preset_knob - 1)*
42)+$a ] := random(1,100)
end if
inc($a)
end while
end select}
$a := 0
set_table_steps_shown(%rhythm, $steps)
$sync_knob := ($Rate_knob * 18) /1000001
set_knob_defval ($Rate_knob,(5 *1000001) / 17)
set_knob_label ($Rate_knob,!tempo_names[$sync_knob])
set_knob_unit($Rate_knob,$KNOB_UNIT_NONE)
end if
$edit_preset := 100
end on
on ui_control ($steps)
set_table_steps_shown(%rhythm, $steps)
end on
on ui_control ($note_order)
if ($note_order # 99)
$last_note_order := $note_order
else
$note_order:= $last_note_order
end if
end on
on ui_control ($rate_knob)
$sync_knob := ($Rate_knob * 18) /1000001
set_knob_label ($Rate_knob,!tempo_names[$sync_knob])
end on
on _pgs_changed
if(_pgs_key_exists(ARP_ON_OFF))
$Latch_knob := _pgs_get_key_val(ARP_ON_OFF,0)
$latch_mode := $latch_knob
select ($latch_mode)
case 0
set_knob_label($latch_knob,"Off")
$a := 0
while($a < $cursor)
%note_buffer[$a] := 0
inc($a)
end while
$cursor := 0
case 1
set_knob_label($latch_knob,"On")
$b := $cursor
$cursor := 0
$a := 0
while($a < $b)
if (%pressed_id[%note_buffer[$a]] > 0)
%note_buffer[$cursor] := %note_buffer[$a
]
inc($cursor)
end if
inc($a)
end while
case 2
set_knob_label($latch_knob,"Hold")
case 3
set_knob_label($latch_knob,"Hold +-")
end select
end if
end on
{END OF SCRIPT}

You might also like