truj / midica

A Music programming language. Translates source code into MIDI. Includes a player. Supports MIDI-Karaoke. Includes a MIDI analyzer.
https://www.midica.org/
Mozilla Public License 2.0
109 stars 13 forks source link

add sound effects #28

Open truj opened 5 years ago

truj commented 5 years ago

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+

truj commented 11 months 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.

truj commented 8 months ago

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)

truj commented 7 months ago

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.

truj commented 7 months ago

Not to be forgotten: