moonraker

MOONRAKER

explore a galaxy of rhythm.

moonraker

this is a deviation/fork/sequel/derivation of goldeneye (thank you @tyleretters for your illustrious goldeneye script and providing the most perfect of names for this script!).

rhythms are generated using random selections of drum samples with stochastic patterns that emerge from modulo math and also continually evolve through periodic mutations.

Requirements

  • norns
  • grid (optional)
  • at least 200 MB of disk space (for downloaded samples)

Documentation

quick start

press K3 to start. press K2 to regenerate beat.

save beats with K1+K3 and return to them with K1+K2.

the user manual

  • E1 removes/adds instruments
  • E2 changes filter
  • E3 mutes banks
  • K2 regenerates samples (the only one you really need)
  • K3 starts/stops
  • K1+E1 changes slot
  • K1+K2 loads in slot
  • K1+K3 saves in slot

turn the PARAMS > mutation rate to 0 if you want to completely freeze the pattern. otherwise patterns will continuously change…forever.

the technical manual

moonraker has eight banks (kick, snare, rim, hat, ride, shaker, perc, risers) each containing 112 samples, for 896 samples in total. each sample is initiated with random characteristics (lpf cutoff, hpf cutoff, attack, decay, sample start, pan, amplitude, delay send, reverb send). upon regeneration, samples are randomly activated (or activated with E1).

during playback, each beat is counted and a modulus is computed against each active sample. each sample contains modulus numbers and inverse modulus numbers. an active sample is played when any modulus number computed against the current beat has no remainder. however, the inverse modulus do the opposite - whenever their computed modulus has no remainder then the playing of the current active sample is reversed. the randomly assigned modulo numbers are all prime numbers (with exception for two numbers: 1 and 4). modulo numbers are randomly changed at a rate corresponding to the PARAMS > mutation rate.

using the grid

the grid is optional. using it will allow you to edit the parameters of specific samples. here is a short tutorial on how to use the grid.

thank you @rebuspop for the amazing Grid layout tutorial!

Install

install using with

;install https://github.com/schollz/moonraker

after installing, make sure you install the 100 MB of samples with this command in maiden:

os.execute("cd ~/dust/audio && echo 'downloading...' && wget -q https://github.com/schollz/moonraker/releases/download/samplepack1/moonraker.zip && unzip moonraker.zip && rm moonraker.zip; echo 'ready (make sure to restart)'")
89 Likes

the man is unstoppable

<3<3<3

11 Likes

:exploding_head: :exploding_head: :exploding_head: :exploding_head: :exploding_head: :exploding_head: :exploding_head: :exploding_head: :exploding_head: :exploding_head:

you make it look so easy!

7 Likes

@Infinitescripts :smile:

Happy I’ve bought a midi drum machine just today, amazing!

Thanks :pray:

1 Like

thanks @zbs @Justmat @lleicamun

are you thinking of using this script as a sequencer? this crossed my mind but is not implemented…yet. how do drum machines accept sequencing? is it mapped per channel (each of the 8 banks mapped to 8 different midi channels) or is it mapped per note (each of the 8 banks mapped to 8 different midi notes e.g. C4,D4,…C5)? or either? or neither?

holy fracken…WOW!

wondering…is it possible to load our own samples?

can’t wait to try this out!

4 Likes

different ones do it differently, but the official standard is to do it on one channel (technically, channel 10) with each instrument defined as a specific note value, listed here: GM 1 Sound Set (search “percussion key map”, they have no way of linking directly to that map)

for Cyrene I defaulted to that note layout, but let the user change channels and notes in params cyrene/midi_out.lua at master · 21echoes/cyrene · GitHub

5 Likes

oooh yes please.

Things I enjoy about this script:

  • Intuitive grid interface
  • binary mute bank process
  • regenerate (paired with density)
  • E1
  • transformational filter
  • works great with midigrid (after simple edit)

Thanks for creating it.

4 Likes

Honestly it just came up to my mind as soon as i saw your new script and i thought immediately to use it as a sequencer, no problem if it’s not implemented yet.
I’ll try the script tomorrow!

Anyway, usually same midi channel, different midi notes, for a midi drum machine.

1 Like

as already stated…regarding one channel with a series of MIDI notes…
but…was just thinking that it would be cool to have the option of the 8 banks to different MIDI channels.
being able to send all this info to multiple drum machines and drum synths! YEAH!!!
:stuck_out_tongue:


last night’s noiz session…
running moonraker on two norns with glitchlets on the third.
other noiz help from Leploop MultiCassa, Deluge, Mbase11, Ciat-Lonbarde Srine and Meng Qi Sidrassi…

8 Likes

Really enjoying this script. It’s very inspiring - thankyou :grinning: yes I can see midi out being very fun with an external drum machine - something like a Nord Drum 2

The algo sounds similar to euclidean style tribal polyrhythms. Could you explain more about how you programmed the algo. I would just like to tweak it a little - just for my personal use. Maybe try different algo’s / settings to make it a little more glitchy.

Also what is the best way to mess with the internal clock? What I would like to do is have quick random bpm change say every x number of steps or seconds to make it more jerky / glitchy? I can sort of simulate it with a midi controller assigned to the master clock but not sure how to do that in code.

3 Likes

v0.2 - midi out! use your own samples!

  • added midi out PARAMS > MOONRAKER MIDI (thanks @21echoes, I followed your example here)
  • added a metronome just because PARAMS > metronome
  • added some guidance to how to use your own samples.

how to use your own samples.

to use your own samples you will need to change some code! sorry - there isn’t a way I know of to select a folder through a parameter menu…yet. for now you can simply change this one line of code in moonraker.lua. uncommenting that line and changing it to the directory of your choice will load those samples in. if you want to have a different folder for each bank, just change these lines of code to the folders you want.

how to use the grid.

I recorded a tutorial about how to use the grid. I’m a bit self-conscious about recording myself but I gave it a shot:

yes! it does sound similar to ER, but it goes by a different means (maybe their is some theory showing their equivalency). I use modulo of the current beat. here are the modulo numbers on this line of code which are selected (16 different options). you can have multiple numbers. check out the end of the tutorial video above for a brief explanation. I will come back and give a better explaination when I have time.

you could set it via params! this will do it: params:set("clock_tempo",<number>). you could throw that in the lattice evaluator with the number being math.random(60,200) and probably get something wild.

28 Likes

Amazing! My grid arrives tomorrow too. What a gift.

3 Likes

You killed it! perfecto

Stewing on this and combining it with a recent “semi” hyper fixation of pattern synthesis. Im not a math nut but almost some kind of logic matrix on the grid sounds aces to me.

PSYN was and is a max for live device that’s exciting and comes to mind here with Goldendeye/Moonraker. GE/MR already covers alot of the POLY territory already it feels. Some kind of Division/Ratchet/Repeat Manipulation on the grid would be fucking awesome.

Currently…(flavor of the month) Im approaching Norns in general as a MIDI only device. Mine has a hum and buzz im needing a break from the usb noise lol. I did play it yesterday and wow. with the samples its fucking amazing! But for now the MIDI add is so exciting! thanks sir!

2 Likes

I wish I could remember which script does this, but I remember one where: there is a file param for choosing individual files. So you have ppl choose the file, and then you just take the folder of wherever that file was! E.g. audio/my-samples/kit/bd_01.wav → audio/my-samples/kit

2 Likes

Perfect thank you :slight_smile: - i settled for math.random(60,180) with 1/24 division and you get very skittery / jittery beats on the edge of falling over - which is exactly what i was after. I also changed the samples out. i’ve been saving all these as different PSET

5 Likes

We do this in orca (for example) to load sequences. Perhaps that’s helpful.

3 Likes

Is there sample size limit? Thank you!

1 Like

what would be interesting would be to somehow create semi random quantized sequences or notes (different scales) triggered by the same rhythmic triggers. So you have the rhythmic and some occasional note sequences together. Use some of the existing drum samples as voices for the sequences, repitched or use an internal FM type synth. So as it’s triggered instead of playing a drum hit, it plays a short sequence of notes or a random pitched note.

I’m thinking here about how William Fields makes his algorithmic type music generating random melodies from complex rhythms. Moonraker nails the rhythmic stuff when you play about with the settings. You can see the sort of stuff he does here repitching drum samples


10 Likes

a little slice of moonraker (here I’m “playing” moonraker by turning the E1 knob and then using K1+K2 to reload where I started from):

(the synth sound is all strega, being layered by an upcoming script I’m working on…).

was doing something similar while testing the midiout! I don’t have a drum machine so I just plugged in my keyboard for the midi out. moonraker triggers notes instead of drum hits. you can set the note numbers themselves in the script but it sounded really neat with the default “drum midi note mappings”.

I guess what’s needed for the Fields approach would be to have another sequencer built-in to moonraker that holds note sequences? that might be very simple actually (with sequins). I can add a callback to the triggers of each bank so you could easily program whatever output you want to (e.g. crow/sequins notes/ etc).

sample size is only limited by the amount of memory…there are ~600 mb available. so if you have X samples playing consecutively then they will need to be smaller than X/600 megabytes. samples are also not unloaded, so as you play different samples more and more get loaded so X will increase…

thanks yeah! I was hoping to actually select a folder containing only folders (e.g. there is a folder with folders addressed by bank…) but I can change it to selecting individual folders for each bank.

you are in for a treat!

I like thinking about that idea…

9 Likes