drumcrow

drumcrow

drumcrow discord emote

This script turns monome crow into a 4-channel drum machine synth. Driven with a monome teletype or druid.

code and documentation here

Demos

drumcrow sounds compilation here
30 minute live coding improv here
drumcrow v1.0 tutorial video above
originally adapted from License’s Flash Crash performance here
early version postsolarpunk Flash Crash performance here
playing around here
bunch of other sketches in crow studies discord ^^

Inspiration

Six months ago, I was wishing that I could code sounds directly from teletype somehow. I was scrolling through Flash Crash performances and found @License’s video (linked above). We were talking about it in the teletype discord and then License linked his code. It was a quick sketch he made for Flash Crash and let go of, but it was exactly the thing I was looking for so I started studying and eventually Flash Crashed an early version of it. From there, I started filling in the gaps, expanding the modulation capabilities, and investigating how to make audio rate ASL Oscillators with crow. It expanded way beyond what either of us thought we could do with crow. There’s a lot more to explore here. This v1.0 is enough for now. Feel free to mod the code, expand it, simplify it, remove the sequencer tempo limit and turn it up to 30000 bpm.

Huge thanks to @License, @fourhoarder, @AOTA/Jordo, @FRIENDMAN, @WilliamHazard, @scanner_darkly, @keinexco, @echophon, @mwilliams oh I don’t even know who to tag, literally everyone on the crow studies, teletype studies, ezbot discords, and everyone involved with making Flash Crash happen, y’all know who you are, thanks to anyone who listened to one of these funny noisy drum beats, thanks all for the encouragement <3

Roadmap

adjust C2 harmonic settings
See what people think, fix bugs
Port to norns (currently working on this as of 2/20/23)
Map the ASL oscillator multiverse
Caw more

Requirements

crow
(teletype recommended, not required)

Specs

4 outputs (voices)
7 oscillator models (var_saw, noise, two bytebeat models, FM ish, …)
3 modulation sources per voice
1 trigger/harmonic sequencer per voice
Frequency, amplitude, pulse width, bitcrush control
Able to set ratios between parameter values of multiple voices

For a bird’s eye view, see drumcrow parameter matrix in the github documentation.

Download

v1.0.0 - code and documentation here

46 Likes

this is inspirational. museum-worthy, wow

4 Likes

Could Bowery work with this somehow? I don’t have teletype (or much scripting knowledge) and I really want to play with this. It sounds so astoundingly great!

1 Like

It kind of works playing from druid! I haven’t tested it from an only druid perspective before. I’ll fix up the step sequencer and do some more thorough druid-only testing we’ll be at v1.1 in no time lol

I think Bowery is the name of the collection of druid capable scripts, if I’m not mistaken. :slight_smile: Probably could join the murder.

I think the only command you’ll need to know is ii.self.call2( param, value ) to drive drumcrow via druid. Pick the param, set the value, repeat. Most values are between 0 to 16384 because it’s tuned to teletype. Looks like there’s a bug with C2 and 5(6-9)X, so I’ll update the thread when it’s good for druid operation. There are only 3 calls, but there are a lot of parameters to select from.

druid OP = teletype OP
ii.self.call1( param ) is CROW.C1 param
ii.self.call2( param, value ) is CROW.C2 param value
ii.self.call3( channel, note, volume ) is CROW.C3 channel note volume

Use any 0-10V constant output available in your modular rack to set values using ii.self.call1 and you can follow along with the teletype tutorial video. The only teletype specific thing happening is I put a call3 in $1 and $2, which I delete maybe 6 minutes into the jam and use drumcrow’s internal trigger sequencers instead for the rest of it. If you do not have a 0-10V output available to set the input voltage, then try setting parameters using call2.

druid = literal CV input = teletype

-16384 to call2 value = 0 volts = teletype V -10
-8192 to call2 value = 2.5 volts = teletype V -5
0 to call2 value = 5 volts = teletype V 0
8192 to call2 value = 7.5 volts = teletype V 5
16384 to call2 value = 10 volts = teletype V 10

I’ll try and update the documentation and post a druid only video covering the same example code.

12 Likes

woah ok now we’re talking. was gonna say, one of the things that’s so cool about this is that it doesn’t just bust ASL open for TT users.

7 Likes

this is so freaking cool! can’t wait to give it a go :slight_smile:

5 Likes

Man, I need me a teletype lololol.

4 Likes

updated doc for druid operation
open mic tested

crow input 1 voltage 0 - 10V
teletype V -10 to V 10
druid -16384 to 16384
all now address the same “0 <= V <= 10” range listed in the doc

Equivalent ways to set 23 on channel 1 to “7.5”
using teletype CROW.C1 231 and set crow input voltage to 7.5V
using druid ii.self.call1(231) and set crow input voltage to 7.5V
using teletype CROW.C2 231 V 5
using druid ii.self.call2(231, 8192)

non-critical bugs:
using C2 to set a harmonic sometimes sets things to like 3.999 instead of 4
rare randomly occurring error where amplitude is set to nil (line 364)

6 Likes

Weekend project: I had to shrink the script for 4.0.2 so ratios is gone! Never used it anyway when playing around. I was getting crashes while running 4 oscillators at 20kHz. I figured out I could save CPU by limiting the maximum frequency of each ASL oscillator, so I made a max frequency parameter per channel and made it modulatable for pseudo-filter like effects. Working on finishing nb_drumcrow next.

drumcrow update for crow firmware 4.0.2

  • removed ratios feature, set synth command is now (1XYZ)
  • set clock.tempo (81X) now deselects after setting tempo
  • added maximum ASL frequency (freq)
    • freq global (83X), default 7000 Hz, 0.01 - 20000 Hz
    • freq per channel (10X), default 1x global, 0.001x - 1x
    • freq per channel modulation (20X, 30X, 40X), default 0x, 0x - 1x
  • splash range reduced
  • noise and bytebeat amplitude ranges reduced for more consistent volumes
  • update time to 0.006 sec
  • switched position of cawcyc3 and cawcyc4, now 16X and 17X, respectively
  • fixed bug: C2 setting a harmonic to like 3.999 instead of 4, now rounds to integers
  • renamed “freq env” to “note env”
  • updated ASL Oscillators document with more sources, explanation, examples
  • more lowercase in documentation

teletype + drumcrow clips made this weekend:
example of max frequency modulation

4-voice chords using model 7 with 2 parameters randomized every 6 chords

debugging audio, fun noise

unhinged noise jams


melodic slow jams

9 Likes

I’ve just found drumcrow! Nice one, the sounds in the video are nice too!

2 Likes