Open truj opened 5 years ago
Most (but not all) sound effects will be MIDI controller changes. Not always a function is required. Some controllers don't even support more values than true or false. So here's a new idea:
Function (lowlevel syntax):
0 volume.sin(ampl=50;periods=5.3) *1
Function (compact syntax):
0: (volume.sin(ampl=50;periods=5.3;length=1))
Simple setting (lowlevel syntax):
0 volume.set=75 -
Simple setting (compact syntax):
0: (volume.set=75)
Not sure yet, if lowlevel syntax should be supported for this at all.
Again a new idea - Pipelining:
Lowlevel:
0 bend.wait().line(64,127).wait().length(/2).line(127,64) /4
0 c /1+/1
Compact:
0: bend.wait().line(64,127).wait().length(/2).line(127,64) c:1+1
Meaning:
I think this is better then the option-like syntax (any.thing(value))
. There are too many braces.
Also another idea for setters and binary controllers: These can also be implemented as functions, just like line() or sin():
0: hold.on() c d e hold.off() c d e volume.set(127) c d e volume.set(30%) c d e
A possibility to address controllers or RPNs by number:
ctrl=7.sin(20,60,4.3)
rpn=0.set(6)
This addresses controller 7 (volume) or RPN 0 (pitch bend sensitivity)
Maybe pipelining is the wrong wording. Such a call chain should be renamed to effect flow (or maybe 'chaining'?). This also applies for the class, variables and placeholders.
Not to be forgotten:
Something more or less like this:
channel effect:what/function duration options
E.g. for a pitch band change affecting the whole channel:0 effect:pitchband/sinus /2 amplitude=20, wavecount=2.5
Or for a polyphonic aftertouch graph affecting only one note:0 effect:polypressure/line /2 from=-5, to=15, note=c+