“Keyrub”, by Dominic Barrett
A Tone.js DuoSynth with feedback delay and an 808 sampled drumkit
Playback control of digital instrument via keyboard keys (qwerty, not piano) with attention given to the “rubbing”, sliding, or gliding over keyboard keys.
Multiple keypresses can provide different musical control than individual keys on their own.
And certain keys can have more than one element of functionality (ex. playback and control signals with one gesture)
QWER section
Synth
The keyboard keys Q,W,E, and R control the note start of the synth. A pattern is pre-loaded. Pressing Q will make the pattern play backwards, while the R will make it go forwards. These are “Up” and “Down” pattern behaviors in the Tone API. W and E have a similar relationship, except they are type “upDown” and “downUp”, a kind of conceptual “middle” since they are in the literal middle of Q and R.
Already there was much to consider in terms of mapping. The pattern is an array of notes, and usually we would conceptualize the “start to end” of an array as “left to right”. This is analogous to “beginning to end” as a concept, and “up to down” in Tone.js parlance. However, if we think of Q as “left” and R as “right”, what would the appropriate mapping for sequence direction be?
Does the Q act as a “steering left”, where we think about the direction of the playhead being manipulated by our input? Or is “Q” the “left” starting sequence position, which then “goes forward” to the right? If we are “steering”, the pseudo code would be that the “left” key actually positions the current sequence position all the was to the *right* and then works it’s way *towards* the left.
And this is all ignoring the actual content of the sequence itself. Consider a series of notes that goes from lower pitched notes to higher pitched notes. The pattern is played by default, in the traditional and expected manner: “Up”. It starts at the beginning and when it gets to the end it returns to the beginning position.
However, take the same pattern object and re-arrange the composition of the notes to go from higher to lower pitched notes. While going “up” in playback direction, we are doing down (without quotes) in scale. “Up” is down and “Down” is up.
Ultimately, I wound up playing with the variables and pattern until it “felt right”. But I do enjoy playing these word games with myself to re-consider certain paradigms. Blog UI for example. It makes sense that you would show the most recent content first. But if there are two buttons at the bottom, where are they and what do they say? “Previous” and “Next”? “Forward” and “Back”? And which button is on the left and which is on the right? It is possible to have the “Next” page be from the past, or go “Back” into the future after navigating “Forward” a few pages into the past.
And then on top of all of this I think about different languages, where sequences of words can go right to left, vertically from top to bottom, or both.
…where was I? Oh yeah, the synth.
Q+W at the same time sets the sequence to the high note and then random walks. E+R goes low and random walks. W+E does a random walk in triplets. QWER all together do a super fast upDown.
And here is how we stop the synth:
ASDF keys
The keys underneath the QWER keys stop the sequence from playing. These have dual use. The A key sets the feedback delay time to zero, S to 0.02, d to 0.08, and F to 0.16. After setting the delay time, they stop the sequence. This can add a dramatic “end” to the sequence instead of a simple stopping of sound, and can introduce a point of performative design by rapidly starting and stopping the delays and sequences.
Drum Rubbing
YUIOP
YUIO each have a sequence of a snare and a high hat or a clap and a high hat. Instead of tapping them, they can be “rubbed” like a vinyl record on a turntable. All of the keys underneath YUIOP do nothing, giving the performer a chance to press and approach the drum keys in a back and forth motion. Sequences can be achieved by alternating keys or rubbing more than one at a time.
It isn’t perfect, and there can be missed keypresses or extras where none were expected. The P button is a single clap that can be used percussively. But also it resets the index of the YUIO drum sequences to zero.
Anchor drums
ZX
Z and X start and stop bass kick and high hat patterns respectively. Nothing in the program is quantized, so it is sometimes nice to provide somewhat of an anchor to a performance that could otherwise be much more chaotic without a kind of percussive backbone.
I was tempted to throw more keys into the mix, but didn’t want to go off the deep end with my first pass at this concept. It could be easy to assign a huge array of different functions to every single key and possible multi-key permutations. First, there seems to be certain system-level limits on how many keypressed can be detected at any one time. But also, once I got to this point, I felt that I had something expressive and what was missing was my own practice with the instrument instead of more features. I can imagine more than a few different takes on this basic concept, but for now I’m satisfied with the experiment.
I would also like to give credit to Hermutt Lobby for inspiration with much of their midi controller development work.