MIDIPlayer
abstract parent class for Players that receive midi and send control messages to synths
superclass: SynthlessPlayer
subclasses:
MIDIGatePlayer.new(spec)
generates a gate with the level scaled from 0..127 to the requested spec
does not release until the last key is released
CCPlayer.new(controller,spec)
controller value is scaled to the requested spec
MIDIFreqPlayer.new
midi note to freq
classic analog monophonic style including trills
Any attached midi keyboard should work
(
Instr(\monosynth,{ arg gate=0.0,freq=440.0,ffreq=500,rq=0.1,width=0.3;
var amp;
amp = Latch.kr(gate,gate);
RLPF.ar(
Pulse.ar(freq,width),
ffreq,
rq)
* EnvGen.kr(Env.adsr,gate,amp)
});
Patch(\monosynth,[
MIDIGatePlayer.new,
MIDIFreqPlayer.new
]).gui
)
(
Patch(\monosynth,[
BeatClockPlayer.new(16),
MIDIFreqPlayer.new,
CCPlayer(50,[100,3000,\exp,0.0,1500.0]),
CCPlayer(51,[0.1,0.9,\exp,0.0,0.2]),
CCPlayer(52,[0.05,1.0])
]).play
)
Note that the intial values are the spec's defaults, not the Instr function argument defaults.
/*
( PlayerBinop not yet implemented
Patch(\monosynth,[
BeatClockPlayer.new(16) * MIDIGatePlayer.new,
MIDIFreqPlayer.new,
CCPlayer(50,[100,3000,\exp,0.0,1500.0]),
CCPlayer(51,[0.1,0.9,\exp,0.0,0.2]),
CCPlayer(52,[0.05,1.0])
]).play
)
*/
)
(
Instr(\fatsynth,{ arg gate=0.0,freq=440.0,ffreq=500,rq=0.1;
var amp;
amp = Latch.kr(gate,gate);
RHPF.ar(
Splay.arFill(9,{ arg i;
Pulse.ar(freq + rrand(-100,100),LFNoise1.kr(0.01))
}),
ffreq * amp,
rq)
* EnvGen.kr(Env.adsr,gate,amp)
});
Patch(\fatsynth,[
MIDIGatePlayer.new,
MIDIFreqPlayer.new,
CCPlayer(50,ControlSpec(100,3000,\exp,0.0,500.0)),
CCPlayer(51,ControlSpec(0.1,0.9,\exp,0.0,0.1))
]).gui
)
Mod Wheel
(
Patch(\fatsynth,[
MIDIGatePlayer.new,
MIDIFreqPlayer.new,
CCPlayer(1,[100,3000,\exp,0.0,500.0])
]).play
)
// command-. to stop