-- Play notes from the computer's keyboard. #USE "snglmath.lib" #INCLUDE "mathvals.inc" #INCLUDE "oak.inc" #USE "basic" #USE "osc" #USE "organ" #USE "env" #USE "ossout" #USE "control" --{{{ PROC keyboard.reader (CHAN BYTE keyboard?, CHAN EVENT notes!) PROC keyboard.reader (CHAN BYTE keyboard?, CHAN EVENT notes!) VAL []BYTE keys IS "zsxdcvgbhnjmq2w3er5t6y7ui9o0p": BYTE c: WHILE TRUE SEQ keyboard ? c IF IF i = 0 FOR SIZE keys keys[i] = c VAL INT notenum IS i + 45: SEQ notes ! note.on ; notenum ; 127 notes ! note.off ; notenum TRUE SKIP : --}}} --{{{ PROC playkey (CHAN BYTE keyb?, scr!, err!) PROC playkey (CHAN BYTE keyb?, scr!, err!) CHAN EVENT notes: CHAN SIGNAL pitch, trigger, velocity, bend, mixed: PAR keyboard.reader (keyb?, notes!) polysynth (notes?, [pitch!], [trigger!], [velocity!], [bend!], [-1]) sink (velocity?) sink (bend?) VAL []INT length IS [200, 1000, 20000, 0]: VAL []REAL32 level IS [0.0, 1.0, 0.5, 0.0]: CHAN SIGNAL a, b: PAR generate.organ (pitch?, 5, a!) envelope (trigger?, length, level, b!) gate (a?, b?, mixed!) CHAN SIGNAL lim, left, right: PAR limiter (mixed?, lim!) da (lim?, [left!, right!]) oss.out (left?, right?) : --}}}