Drums, EDrums, and Tidal

Given that the Tidal mini-lang is now more or less integrated into the upcoming version of Gibber (https://twitter.com/gibber_cc/status/1141444757350039552) I’m thinking of changing the mini-language in Drums and EDrums to use this feature.

// old Drums
d = Drums('xoxo')

// new Drums?
d = Drums('kd sd kd sd')

Of course the Tidal mini-lang is a bit more verbose, but it enables so much more… a slightly higher threshold with an infinitely higher ceiling, if you will. I guess my only hesitance is that I often start off teaching Gibber by showing Drums, so I want this to remain as frictionless as possible. On the other hand, kd and sd are less abstract than xo.

I feel like this would actually be a big change, so any opinions on this are much appreciated!

Exciting! Some quick random thoughts…

Based only on your two simple examples, I think I’d prefer the first one. But of course Tidal’s (heavily BP2-influenced) sequence minilanguage has some additional features… I guess there’s a few tradeoffs here though:

  • single characters (ideographs) vs tr606-style double characters (bd/sn/lt/ht etc) vs compound symbols (words) of varied length
  • space as time? (works best with ideographs)
  • whitespace as time or for separating words?
  • fixed step duration (e.g. for easy polymeter), or fixed measure duration (e.g. for easy polyrhythm)?

I think that “oxox” would be less abstract kick-snare-kick-snare than “xoxo”, as kick drums have a ‘rounder’ sound.

Could you support both somehow?

Why treat ‘drums’ separately from other sounds?

[As an aside, for teaching younger children I found that they really love making sounds out of words, ixi style. However, I found this really got in the way of getting them to listen to musical structures. They spent a while trying different words, after which it was hard to get them back on track thinking about symbols in musical rather than alphabetic terms… Best to avoid all this, by limiting them to just two or maybe three sounds each, at least to start with]

I’ve also got to ask… Is Tidal’s representation of patterns as functions of time implemented under the hood here? If so, does that mean that its library of pattern transformations outside of the mini language can be implemented?

Thanks for chiming in Alex!

Actually, this brings up a third option—one that is possibly most appealing to me—which is to treat drums/edrums like all the other instruments in Gibber, which would mean that passing a string to their constructor would specify a preset to use. It has always been a bit annoying to have the current inconsistency with other instruments. So:

// old 
drums = EDrums('xoxo')

// new?
drums = Drums('808').play('xoxo') // or .tidal here

This would make it much easier than it currently is to experiment with different drum sounds. Thanks for reminding me of this! I’d prefer to remove inconsistencies like these in Gibber, and then layer a simple DSL on top of Gibber enabling easier sequencing and targeting beginning programmers etc.

I chose to use xoxo instead of oxox like ixi because I liked that the standard kick-snare pattern was hugs and kisses :slight_smile: And then that very tongue-and-cheek decision was mirrored by FoxDot and some audio objects for Scratch…

One of my favorite Gibber stories was having kids use the Speak object in Gibber, but telling them they weren’t allowed to use any “naughty” words. When I told them they could reverse the samples the Speak object makes, one of them immediately said “Make it say tub backwards.” At that point I just went along with it.

I think so? Every query basically has the signature pattern, Arc. I need to play more with Tidal to see if this makes sense versus using Gibber’s API for pattern manipulation (which was in turn inspired by Tidal and that Laurie Speigel paper you’ve helpfully referenced over the years).

1 Like