Nervous Amen – Amen deconstructor

@OnLoad
SetMetroPPQN 16
SetMetroSwing 0

kick = 36
snare = 38
closedhat = 42
openhat = 46

// X axis = Pattern Variation (0-3 selects Amen measure)
// Y axis = Velocity/Intensity
LabelKnob 0, {XY X – Variation}
LabelKnob 1, {XY Y – Intensity}
LabelKnob 2, {Hat Evolve}
LabelKnob 3, {Master Vel}
LabelKnob 4, {Hat Decay}
LabelKnob 5, {Snare Human}
LabelKnob 6, {Groove Nudge}
LabelKnob 7, {Fill Rate}

SetKnobValue 0, 0
SetKnobValue 1, 100
SetKnobValue 2, 32
SetKnobValue 3, 100
SetKnobValue 4, 40
SetKnobValue 5, 20
SetKnobValue 6, 0
SetKnobValue 7, 10

amen_measure = 0
@End

//——————————————
// HOST TRANSPORT CONTROL
//——————————————
@OnHostStart
CurrentMetroPulse = 15 // Sets up the clock to hit 0 on the very first tick
StartTimer
@End

@OnHostContinue
StartTimer
@End

@OnHostStop
StopTimer
@End

//——————————————
// METRONOME PULSE SEQUENCER
//——————————————
@OnMetroPulse
// X axis selects Amen measure variation (0-3)
xy_x = GetKnobValue 0
amen_measure = xy_x / 32
if amen_measure > 3
amen_measure = 3
endif

// Y axis scales overall velocity/intensity
xy_y = GetKnobValue 1
vel_scale = xy_y

hat_evolve = GetKnobValue 2
master_vel = GetKnobValue 3
hat_decay_knob = GetKnobValue 4
snare_human_knob = GetKnobValue 5
fill_rate_knob = GetKnobValue 7

// Blend master_vel with Y intensity
effective_vel = (master_vel + vel_scale) / 2
if effective_vel > 127
effective_vel = 127
endif
if effective_vel < 20
effective_vel = 20
endif

gate_len = 100 + hat_decay_knob * 11

// Open hat chance influenced by Hat Evolve knob
open_chance = hat_evolve / 2

//——————————————
// AMEN BREAK PATTERNS
// Steps are 0-based (step 1 in pattern = pulse 0)
//——————————————

// MEASURE 1: Standard Groove
if amen_measure = 0
if CurrentMetroPulse = 0 or CurrentMetroPulse = 2 or CurrentMetroPulse = 4 or CurrentMetroPulse = 6 or CurrentMetroPulse = 8 or CurrentMetroPulse = 10 or CurrentMetroPulse = 12 or CurrentMetroPulse = 14
rand_hat = Random 0, 127
hat_vel = effective_vel – (Random 0, 20)
if hat_vel < 30
hat_vel = 30
endif
if rand_hat < open_chance
SendMIDINoteOn 0, openhat, hat_vel
SendMIDINoteOff 0, openhat, 0, gate_len
else
SendMIDINoteOn 0, closedhat, hat_vel
SendMIDINoteOff 0, closedhat, 0, gate_len
endif
endif
if CurrentMetroPulse = 0 or CurrentMetroPulse = 10
SendMIDINoteOn 0, kick, effective_vel
SendMIDINoteOff 0, kick, 0, 500
endif
if CurrentMetroPulse = 4 or CurrentMetroPulse = 12
snare_vel = effective_vel – (Random 0, snare_human_knob)
if snare_vel < 40
snare_vel = 40
endif
SendMIDINoteOn 0, snare, snare_vel
SendMIDINoteOff 0, snare, 0, 500
endif
endif

// MEASURE 2: The First Shift
if amen_measure = 1
if CurrentMetroPulse = 0 or CurrentMetroPulse = 2 or CurrentMetroPulse = 4 or CurrentMetroPulse = 6 or CurrentMetroPulse = 8 or CurrentMetroPulse = 12 or CurrentMetroPulse = 14
rand_hat = Random 0, 127
hat_vel = effective_vel – (Random 0, 20)
if hat_vel < 30
hat_vel = 30
endif
if rand_hat < open_chance
SendMIDINoteOn 0, openhat, hat_vel
SendMIDINoteOff 0, openhat, 0, gate_len
else
SendMIDINoteOn 0, closedhat, hat_vel
SendMIDINoteOff 0, closedhat, 0, gate_len
endif
endif
if CurrentMetroPulse = 0 or CurrentMetroPulse = 10 or CurrentMetroPulse = 11
SendMIDINoteOn 0, kick, effective_vel
SendMIDINoteOff 0, kick, 0, 500
endif
if CurrentMetroPulse = 4 or CurrentMetroPulse = 12
snare_vel = effective_vel – (Random 0, snare_human_knob)
if snare_vel < 40
snare_vel = 40
endif
SendMIDINoteOn 0, snare, snare_vel
SendMIDINoteOff 0, snare, 0, 500
endif
endif

// MEASURE 3: Standard Groove Repeat
if amen_measure = 2
if CurrentMetroPulse = 0 or CurrentMetroPulse = 2 or CurrentMetroPulse = 4 or CurrentMetroPulse = 6 or CurrentMetroPulse = 8 or CurrentMetroPulse = 10 or CurrentMetroPulse = 12 or CurrentMetroPulse = 14
rand_hat = Random 0, 127
hat_vel = effective_vel – (Random 0, 20)
if hat_vel < 30
hat_vel = 30
endif
if rand_hat < open_chance
SendMIDINoteOn 0, openhat, hat_vel
SendMIDINoteOff 0, openhat, 0, gate_len
else
SendMIDINoteOn 0, closedhat, hat_vel
SendMIDINoteOff 0, closedhat, 0, gate_len
endif
endif
if CurrentMetroPulse = 0 or CurrentMetroPulse = 10
SendMIDINoteOn 0, kick, effective_vel
SendMIDINoteOff 0, kick, 0, 500
endif
if CurrentMetroPulse = 4 or CurrentMetroPulse = 12
snare_vel = effective_vel – (Random 0, snare_human_knob)
if snare_vel < 40
snare_vel = 40
endif
SendMIDINoteOn 0, snare, snare_vel
SendMIDINoteOff 0, snare, 0, 500
endif
endif

// MEASURE 4: The Syncopated Roll
if amen_measure = 3
if CurrentMetroPulse = 0 or CurrentMetroPulse = 2 or CurrentMetroPulse = 4 or CurrentMetroPulse = 8 or CurrentMetroPulse = 10 or CurrentMetroPulse = 14
rand_hat = Random 0, 127
hat_vel = effective_vel – (Random 0, 20)
if hat_vel < 30
hat_vel = 30
endif
if rand_hat < open_chance
SendMIDINoteOn 0, openhat, hat_vel
SendMIDINoteOff 0, openhat, 0, gate_len
else
SendMIDINoteOn 0, closedhat, hat_vel
SendMIDINoteOff 0, closedhat, 0, gate_len
endif
endif
if CurrentMetroPulse = 9 or CurrentMetroPulse = 12
SendMIDINoteOn 0, kick, effective_vel
SendMIDINoteOff 0, kick, 0, 500
endif
if CurrentMetroPulse = 4 or CurrentMetroPulse = 7 or CurrentMetroPulse = 10 or CurrentMetroPulse = 13
snare_vel = effective_vel – (Random 0, snare_human_knob)
if snare_vel < 40
snare_vel = 40
endif
SendMIDINoteOn 0, snare, snare_vel
SendMIDINoteOff 0, snare, 0, 500
endif
endif

//——————————————
// FILL GENERATOR
//——————————————
is_fill = 0
rand_fill = Random 0, 127
if rand_fill < fill_rate_knob
if CurrentMetroPulse = 3 or CurrentMetroPulse = 7 or CurrentMetroPulse = 11 or CurrentMetroPulse = 14 or CurrentMetroPulse = 15
is_fill = 1
endif
endif

if is_fill = 1
rand_drum = Random 0, 100
if rand_drum = 40
if rand_drum < 80
SendMIDINoteOn 0, kick, effective_vel
SendMIDINoteOff 0, kick, 0, 300
endif
endif
endif

@End

//——————————————
// INTERFACE CONTROLS
//——————————————
@OnXYChange
SetKnobValue 0, GetXValue
SetKnobValue 1, GetYValue
@End

@OnKnobChange
if LastKnob = 6
nudge_val = GetKnobValue 6
SetMetroSwing nudge_val
endif
@End

2 comments on “Nervous Amen – Amen deconstructor”
  • kitsch_breeder on said:

    I created this for a streamer I appreciate, Michael NervOus who is apparently fond of the Amen break.

    It’s an Amen deconstructa – I will most likely keep working on it to improve the pattern- but it’s 100 % usable. I tested it within Hannmerhead, and when using the jungle samples and setting your host bpm to +140 it sounds the best (imo)

  • kitsch_breeder on said:

    Looks like it’s not reading the pattern measures. It should sequentially play 4 (16 step) patterns and allow you to tweak it in real time. Oopsy poopsy

  • Leave a Reply

    • Platform:
    • Category: Other
    • Revision: 0.1
    • License: Do What The F*ck You Want To Public License
    • Modified: 4 months ago
    • Views: 272
      Likes: 0
      Downloads: 13
    Download
    Chat