42 lines
1.9 KiB
Text
42 lines
1.9 KiB
Text
|
title:: Pattern Guide Cookbook 04: Sending MIDI
|
||
|
summary:: Sending notes under pattern control to MIDI devices
|
||
|
related:: Tutorials/A-Practical-Guide/PG_Cookbook03_External_Control, Tutorials/A-Practical-Guide/PG_Cookbook05_Using_Samples
|
||
|
categories:: Streams-Patterns-Events>A-Practical-Guide
|
||
|
|
||
|
section::Sending MIDI out with Patterns
|
||
|
|
||
|
Sending MIDI is the job of the link::Classes/MIDIOut:: class and the code::\midi:: event type. A MIDIOut is created to talk to a hardware device; the MIDI channel is provided when an event is played. MIDIOut's code::newByName:: makes it easier to identify a device.
|
||
|
|
||
|
The code::\midi:: event type supports the following commands, chosen in the event by the code::\midicmd:: key: code::\allNotesOff, \bend, \control, \noteOff, \noteOn, \polyTouch, \program, \smpte, \songPtr, \sysex, \touch::. The default is code::\noteOn::. When playing a note (noteOn), by default the corresponding noteOff message will be sent after the note's sustain time.
|
||
|
|
||
|
If you want to synchronize events played by a MIDI device and events played by the SuperCollider server, the MIDIOut object's latency must match the server latency. You can set the latency any time to affect all future events.
|
||
|
|
||
|
code::
|
||
|
MIDIClient.init; // if not already done
|
||
|
|
||
|
(
|
||
|
// substitute your own device here
|
||
|
var mOut = MIDIOut.newByName("FastLane USB", "Port A").latency_(Server.default.latency);
|
||
|
|
||
|
p = Pbind(
|
||
|
\type, \midi,
|
||
|
// this line is optional b/c noteOn is the default
|
||
|
// just making it explicit here
|
||
|
\midicmd, \noteOn,
|
||
|
\midiout, mOut, // must provide the MIDI target here
|
||
|
\chan, 0,
|
||
|
// degree is converted to midinote, not just frequency
|
||
|
\degree, Pwhite(-7, 12, inf),
|
||
|
\dur, Pwrand([0.25, Pn(0.125, 2)], #[0.8, 0.2], inf),
|
||
|
\legato, sin(Ptime(inf) * 0.5).linexp(-1, 1, 1/3, 3),
|
||
|
\amp, Pexprand(0.5, 1.0, inf)
|
||
|
).play(quant: 1);
|
||
|
)
|
||
|
|
||
|
p.stop;
|
||
|
::
|
||
|
|
||
|
Previous: link::Tutorials/A-Practical-Guide/PG_Cookbook03_External_Control::
|
||
|
|
||
|
Next: link::Tutorials/A-Practical-Guide/PG_Cookbook05_Using_Samples::
|