-
Notifications
You must be signed in to change notification settings - Fork 32
Description
nice work!
my first thought on reading through the syntax was... how do you do triplets? the halving/doubling thing is a clever simplification and other multiples like 5 etc are more rare, but triplets are pretty essential.
I thought maybe you could get by with just a { } operator... say you're currently counting in 'quarter notes', then { } would give you quarter-note triplets and [{ ... }] would give you eighth-note triplets etc.
In replying to my other comment you suggested a syntax like {3}( ... ). I would interpret this maybe as a way to specify the multiple of the following brackets, i.e. {2} is the default if not specified. Reading about triplets they actually represent 'three notes in the space of two', i.e. a multiple of 1.5.
But reading more about things like quintuplets, conventional notation allows more awkward fractions such as 5/3... at which point you wouldn't want to use a 'floating point' type of syntax.
So that would suggest (based on your example) something like {3,2}[ ... ] for triplets. But then what would {3,2}( ... ) mean? If behind the scenes we're converting that syntax to a calculation like (3/2) * x or (3/2) / x it turns out only one of those gives a musically relevant answer. To get slower triplets correctly you'd have to do ({3,2}[ ... ]).
So maybe the 'fractional brackets' should be restricted to use with square 'speed up' brackets only, or not even associated with either [ ] or ( ) brackets at all, to avoid confusion.
So I would come back around to { ... } 'triplet brackets' as shorthand, with an extended syntax like maybe {5/3: ... } for weirder subdivisions.