Queries "Top Amen" sequencer

Post Reply
User avatar
queries
Posts: 224
Joined: Tue May 10, 2016 9:51 pm

Queries "Top Amen" sequencer

Post by queries » Wed Feb 14, 2018 9:19 pm

## QUERIES TOP AMEN ##

This module contains patterns for the revered "Amen Break", and provides easy keyboard access to a variety of ways to play it back.

It was inspired by the "Amen Break Trigger Generator" Audulus forum discussion: http://forum.audulus.com/discussion/15608

It's a note emitter only, so you'll need to hook it up to your favorite drum kit module(s) to make it work, then adjust the five transpose controllers to match the notes your kit is expecting.

See the demo project for a simple mapping to a DrumSynth module, along with some patterns you can try out.

### CONTROLLERS ###

Code: Select all

06 - BPM (1-400)
07 - Swing (0-32768, quantized into 12 sections for 0-11)
08 - Kick Transpose (0-256, C-5 at 128)
09 - Snare Transpose (0-256, C-5 at 128)
0A - Ride Transpose (0-256, C-5 at 128)
0B - Strong Ride Transpose (0-256, C-5 at 128)
0C - Crash Transpose (0-256, C-5 at 128)
0D - Kick Velocity
0E - Snare Velocity
0F - Ride Velocity
10 - Strong Ride Velocity
11 - Crash Velocity
12 - Kick Random Velocity
13 - Snare Random Velocity
14 - Ride Random Velocity
15 - Strong Ride Random Velocity
16 - Crash Random Velocity
Please note that the standard BPM at controller 4 is ignored. This is because the BPM at controller 6 internally controls a doubled BPM, in order to offer 12 different swing options (48 PPQN resolution).

Make sure you release notes before adjusting swing! Otherwise you will have overlapping patterns being played.

### KEY MAP ###

Code: Select all

C0-d5 begins playback at any of the 64 steps in the sequence:

   CcDdEFfGgAaBCcDd EFfGgAaBCcDdEFfG gAaBCcDdEFfGgAaB CcDdEFfGgAaBCcDd
   0000000000001111 1111111122222222 2222333333333333 4444444444445555
C |----------------|----------------|----------------|----------X-----|
R |x-x-x-x-x-x-x-x-|x-x-x-x-x-x-x-x-|x-x-x-x-x-X-x-x-|x-x-x-x-x---x-x-|
S |----o--o-o--o--o|----o--o-o--o--o|----o--o-o----o-|-o--o--o-o----o-|
B |o-o-------oo----|o-o-------oo----|o-o-------o-----|--oo------o-----|
  |1 + 2 + 3 + 4 + |1 + 2 + 3 + 4 + |1 + 2 + 3 + 4 + |1 + 2 + 3 + 4 + |

Code: Select all

C6-A6 lets you easily from different random starting points:

C6 - play from start
D6 - play from random measure
E6 - play from random half note
F6 - play from random quarter note
G6 - play from random eighth note
A6 - play from random sixteenth note

Code: Select all

C7-G7 give you access to the individual drums, in case you want to play them individually to your mapped drum kit:

C7 - Kick only
D7 - Snare only
E7 - Ride only
F7 - Strong ride only
G7 - Crash only
### IMPLEMENTATION ###

Currently it's a bit of a rat's nest of 140 modules and 1188 module connections.

Notes come in to a MultiSynth, and are then routed to other MultiSynths for playback. The "phase" controller of the MultiSynth is the key to mapping them to specific playback points.

Each "play from random ..." is implemented by the MultiSynth having random velocity, using Velocity2Ctl to a MultiCtl, which then quantizes it according to the desired granularity, and transmits the quantized value to the phase controller of another MultiSynth, which then triggers playback of that position in the pattern.

Swing is implemented by having 12 different MetaModules, each having the same pattern, varying only in their swing. A MultiCtl receives the swing value, and quantizes it into 13 (*) sections. Those are received by 12 other MultiCtls, one for each swing option. Those route to the MetaModules' "play patterns" controller, filtering the values such that only one MetaModule ever has that turned on at a given time.

(*) 13 is used instead of 12 so that you don't have to go all the way to 32768 to activate the final swing selection

Most of this was hand-made, including wiring. I used a short Python script with Radiant Voices to finish the wiring between the 64 MultiSynths for C0-d5 and the 12 MetaModules.

Code: Select all

import rv.api
p1 = rv.api.read_sunvox_file('./Queries Top Amen demo.sunvox')
mm = p1.modules[1]
p2 = mm.project
from_mods = [p2.modules[x] for x in range(0x1f, 0x5f)]
to_mods = [p2.modules[x] for x in range(0x73, 0x7e)]
for from_mod in from_mods:
    from_mod >> to_mods
with open('./Queries Top Amen edited.sunvox', 'wb') as f:
    p1.write_to(f)
Attachments
Queries Top Amen.zip
(18.38 KiB) Downloaded 204 times

Post Reply