qwak
v0.5.0
Published
Definition and parser for qwak, a simple and expressive minimal ascii dialect for programming step-based web audio event sequences
Downloads
18
Readme
qwak
Definition and parser for qwak, a simple and expressive minimal ascii dialect for programming step-based web audio event sequences
Made by Adam Renklint, Berlin august 2015. Inspired by Typedrummer by Kyle Stetz.
Concepts
- Timing is step based, where a default step is two 1/16th beats, i.e. 48 ticks
- A pattern consists of several layered sequences
- A sequence maps to a kit by id and contains an array of notes
- A note contains instructions for how to play back a sample
Syntax
/86 define bpm, 86 by default (optional)
/1-9= define kit id for sequence
## step triggers
a-z trigger key, oneshot
A-Z trigger key, note on until next
_ skip step, not blocking "note on" triggers
: mute step, blocking "note on" triggers
! repeat last note, including transient modifiers
? repeat last note, decrease volume 25% (i.e. manual echo)
& layer next with previous note, i.e. jump back to previous position
* jump to start on next step and repeat sequence
; jump to start on next bar and repeat sequence
## persistent modifiers
( increase step resolution
) decrease step resolution
[ start block, nestable, applies transient modifiers to block
] end block
, start triplet resolution (48 > 32)
. stop triplet resolution (32 > 48)
## transient modifiers
+ pitch up next note (1/12th of octave)
- pitch down next note
% lower volume 20% for next note
^ raise volume 20% for next note
{ pan next note to 25% left
} pan next note to 25% right
< pull next note cursor 1/12th step back
> push next note cursor 1/12th step forward
~ shift sample starting point 0.1 seconds
' fade in next note attack in 0.1 seconds
` fade out next note release in 0.1 seconds
≈ reverse next note or group (alt + x)
∞ loop the first 0.1 seconds of sample (alt + 5)
## transient modifier parameters
+52 pitch up next note (52/100th of octave)
-18 pitch down next note (18/100th)
%33 lower volume 33% for next note
^10 raise volume 10% for next note
{40 pan next note to 40% left
}60 pan next note to 60% right
<10 pull next note cursor 10 ticks back
>8 push next note cursor 8 ticks forward
~350 shift sample starting point 0.35 seconds
'250 fade in next note attack in 0.25 seconds
`800 fade out next note release in 0.8 seconds
∞250 loop the first 0.25 seconds of sample
§333 set next note sample maxlength to 0.333 seconds (alt + 6)
## effect modifiers
∆ bitcrush to 12 bits (alt + j)
∆8|30|40 bitcrush to 8 bits, at frequency 30/100, mix 40%
Install
$ npm install --save qwak
Usage
var qwak = require('qwak');
var pattern = qwak.parse('/qwak');
qwak.parse(raw:string) -> pattern
Parses a raw qwak string into a qwak pattern, an object with the attributes tempo:number, bars:number and sequences:array. Each sequence contains kit:number, bars:number and notes:array. A note contains key:string, oneshot:boolean, pitch:number, volume:number, pan:number and offset:number.
Examples
/qwak The most basic qwak sequence
/q+wa-k Pitch "w" note up, and "k" down
/90/2=foxobaxa Use kit 2 at 90 bpm
For more examples, have a look at the extensive test suite
License
MIT © 2015 Adam Renklint
Generated with redok @ Saturday September 5th, 2015 - 7:49:03 PM