-- Play notes in response to MIDI input. #INCLUDE "oak.inc" #USE "basic" #USE "osc" #USE "organ" #USE "env" #USE "seq" #USE "alsaseq" #USE "control" #USE "alsaout" #USE "visual" #USE "square" --{{{ PROC softsynth (CHAN BYTE keyb?, scr!, err!) VAL INT POLYPHONY IS 8: PROC softsynth (CHAN BYTE keyb?, SHARED CHAN BYTE scr!, err!) [16]CHAN EVENT midi: [POLYPHONY]CHAN SIGNAL pitch, trigger, velocity, bend, mod, voice: CHAN SIGNAL master.bend, master.mod: CHAN SIGNAL mixed: PAR alsa.seq (midi!) polysynth (midi[0]?, pitch!, trigger!, velocity!, [master.bend!, master.mod!], [-1, 1]) da (master.bend?, bend!) CHAN SIGNAL lf, lfo, m: PAR constant (10.0, lf!) generate.sine (lf?, lfo!) gate (lfo?, master.mod?, m!) da (m?, mod!) PAR i = 0 FOR POLYPHONY CHAN SIGNAL e, f: PAR pitchbend (pitch[i]?, bend[i]?, e!, 12.0) mixer ([e?, mod[i]?], [1.0, 1.0], f!) synth.square (f?, trigger[i]?, velocity[i]?, voice[i]!) VAL []REAL32 level IS [i = 0 FOR POLYPHONY | 0.2]: mixer (voice?, level, mixed!) CHAN SIGNAL lim, left, right: PAR limiter (mixed?, lim!) da (lim?, [left!, right!]) alsa.out (left?, right?) : --}}}