MIDI Nodes


Introduction to Moritz v1    Patch Editor    General Nodes    MIDI Nodes    Krystals Nodes    Ornaments    Assistant Performer
N.B. This page was last changed in July 2009. It has now been archived. Moritz v2 has no Patch Editor.
I'd like to thank both Leslie Sanford and Jeff Glatt here for providing a couple of indispensable (and free!) MIDI resources:
This page contains documentation for Moritz’ MIDI input and output device nodes, and for the other basic MIDI Streaming nodes:
Moritz’ MIDI Input Device node:
E-MU Xboard49 IN
Moritz’ MIDI Output Device nodes:
E-MU Xboard49 OUT (sends MIDI messages to the computer's sound card)
Microsoft GS Wavetable Synth OUT
Other basic MIDI streaming nodes:
MIDI File to Sequence
MIDI File to Stream
MIDI Sequence to File
MIDI THRU
StopGo

Documentation of Moritz’s other streaming nodes can be found in Ornaments and Assistant Performer.

Current hardware setup

My computer currently contains a sound card which is attached to a physical E-MU XBoard49 MIDI keyboard. The keyboard has a USB MIDI OUT port, a USB MIDI IN port and a standard MIDI OUT port. If the keyboard is set to MIDI-Thru, messages arriving at the USB MIDI IN port are sent out again on the standard MIDI OUT port. For maximum flexibility when working with Moritz, I have therefore set the keyboard to MIDI-Thru, attached its standard MIDI OUT port to the computer’s sound card and written the device nodes below. This allows Moritz to receive MIDI messages from the keyboard  (the E-MU Xboard49 IN device), process them and send the result to the standard Windows synthesizer (the Microsoft GS Wavetable Synth OUT device) and/or to the sound card (via the E-MU Xboard49 OUT device) and Cubase.

Notes (August 2009):
Converting MIDI files to mp3 format: Moritz creates MIDI files, which I currently convert to MP3s for this site using Cubase, a Cubase MP3 export plugin and the free E-MU ProteusVX virtual instrument. Many of the original Moritz patch examples use the “Microsoft GS Wavetable Synth” (which is part of Windows), so, while the MP3 examples dont sound exactly as they did when I recorded them, they are a good approximation of what I originally heard.

Streaming

All Moritz’s MIDI streaming nodes can currently be created from the main menu at Nodes / MIDI:
MidiNodesMenu.png

There are two special pin types used in streaming:
MidiStream pin: This listens for (or sends) not only standard MIDI messages, but also Moritz-specific ChordMessages.
A ChordMessage is a single temporal event in a particular channel. It contains a collection of conceptually synchronous MIDI Note Messages.
A ChordOn message is a ChordMessage containing MIDI NoteOn messages but no NoteOffs.
A ChordOff message is a ChordMessage containing MIDI NoteOff messages, but no NoteOns.
The messages coming from a MidiStream pin are refered to as “MidiStream messages” in the following documentation.
Synch pin: This is used to synchronize and control the execution of nodes.
A Synch pin’s value is unimportant, only its state is relevant. Nodes only begin streaming, when the Synch pin to which they are ultimately connected has a Valid state.
Only one of each device node type (E-MU Xboard49 IN, E-MU Xboard49 OUT, Microsoft GS Wavetable Synth OUT) is allowed per patch. When such a node exists in a patch, its corresponding menu command is greyed out in the above Nodes / MIDI context menu.
E-MU Xboard49 IN  
E-MU_Xboard49_IN__Node.png
Input pin: Synch
Output pin: MidiStream
Back-panel menu location: Nodes / MIDI
Shortcut: emui
Uses background thread: no
Menu: E-MU-IN-NodeMenu.png
This node represents an E-MU Xboard49 MIDI keyboard being used as an input device. Only one E-MU Xboard49 IN node can be created per patch.
Moritz' preferences can be set so that an early warning will be given if the keyboard is not available (probably switched off).

Input pin: The node has one Synch input pin, which should be connected to the Synch output pin of a StopGo node. This enables multiple MIDI input devices and files to be started and stopped synchronously.
Output pin: The node has one MidiStream output pin which transmits MIDI messages as they arrive from the physical keyboard. Messages are not transmitted if the node's Synch input pin is invalid (red). Wires can, of course, be used to connect the output pin to more than one MidiStream input pin.

Examples: See the documentation for Moritz’s Ornaments or Assistant Performer.
E-MU Xboard49 OUT  
E-MU_Xboard49_OUT_Node.png
Input pin: MidiStream
Output pin: none
Back-panel menu location: Nodes / MIDI
Shortcut: emuo
Uses background thread: no
Menu: E-MU_OUT_NodeMenu.png
This node represents an E-MU Xboard49 MIDI keyboard being used as an output device. Only one E-MU Xboard49 OUT node can be created per patch.
Moritz' preferences can be set so that a warning will be issued if the keyboard is not available (probably switched off) when Moritz first tries to load a new or existing patch.

If the E-MU keyboard is set to MIDI Thru, it sends incoming MIDI messages out again on a standard MIDI cable. This cable is currently plugged into the MIDI IN socket on my on-board sound card (TS22 PCI MIDI). MIDI messages arriving at the sound card's MIDI IN socket can be read by other software, such as Cubase.
So Moritz patches use this E-MU Xboard49 OUT node as their output device when sending MIDI messages to Cubase. Unfortunately, it seems not to be possible for Moritz to send messages directly to the sound card's MIDI IN input. Conceptually, the keyboard device belongs to Moritz, and the sound card to Cubase.

add input pin: This node is initially created with one MIDIStream input pin, but selecting this command will add a new MidiStream input pin on the right. This enables several streams to be sent to the same output device.
remove right input pin: The command is enabled if there is more than one input pin. It removes the one on the right, deleting any attached wire.
E-MU Xboard49 OUT properties: Selecting this command brings up the following dialog. See the dialog for further explanations.

MIDI_Output_Device-Properties.png

Microsoft GS Wavetable Synth OUT  
MicrosoftGSSynth_OUT_Node.png
Input pin: MidiStream
Output pin: none
Back-panel menu location: Nodes / MIDI
Shortcut: mgwso
Uses background thread: no
Menu: MicrosoftGSWavetableSynth_OUT_NodeMenu.png
This node represents the standard “Microsoft GS Wavetable Synth” output device (part of the Windows operating system). Only one such node can be created per patch.
If, for some reason, this device is not available when Moritz first tries to open a new or existing patch, Moritz quits after advising the user to restart the computer.

add input pin: This node is initially created with one MIDIStream input pin, but selecting this command will add a new MidiStream input pin on the right. This enables several streams to be sent to the same output device.
remove right input pin: The command is enabled if there is more than one input pin. It removes the one on the right, deleting any attached wire.
Microsoft GS Wavetable Synth OUT Properties: Selecting this command brings up a dialog similar to the E-MU Xboard49 OUT Properties dialog. Currently the only option available there is to set a file name so that the output will be saved in a MIDI file. See the dialog for further explanations.

Examples: See the documentation for Moritz’s Ornaments or Assistant Performer.

MIDI File to Sequence  
midiFileToSequenceNode.png
Input pin: Synch
Output pin: MidiSequence
Back-panel menu location: Nodes / MIDI
Shortcut: mfseq
Uses background thread: no
Menu: midiFileToSequenceNodeMenu.png
This node represents a MIDI file. Its output pin’s value is the complete, non-streamed, MIDI information in the file. This node’s file name is displayed on the node. The value of its output pin is loaded when its input pin becomes Valid.
MIDI File to Stream  
midiFileToStreamNode.png
Input pin: Synch
Output pin: MidiStream
Back-panel menu location: Nodes / MIDI
Shortcut: mftos
Uses background thread: no
Menu: midiFileToStreamNodeMenu.png
This node converts a MIDI file to a MidiStream. The slider shows/sets the current position in the file. The pause button can be toggled to start/stop streaming. The text box displays/sets the current position as a percentage.
MIDI Sequence to File  
midiSequenceToFileNode.png
Input pin: MidiSequence
Output pin: none
Back-panel menu location: Nodes / MIDI
Shortcut: mseqf
Uses background thread: no
Menu: midiSequenceToFileNodeMenu.png
This node represents a MIDI file. Its input pin’s value is the complete, non-streamed, MIDI information which is stored in the file.
MIDI Thru  
midiTHRUNode.png
Input pin: MidiStream
Output pin: MidiStream
Back-panel menu location: Nodes / MIDI
Shortcut: mt
Uses background thread: no
Menu: midiTHRUNodeMenu.png
This node simply passes messages recieved at its input pin to nodes connected to its output pin.
StopGo  
stopGoNode.png
Input pin: none
Output pin: Synch
Back-panel menu location: Nodes / MIDI
Shortcut: sg
Uses background thread: no
Menu: stopGoNodeMenu.png
This node simply contains a breakpoint and one output (Synch) pin.
Setting the breakpoint invalidates the output pin (and all its connected pins), thus preventing any of the connected nodes from streaming. Releasing the breakpoint validates the output pin, causing all connected nodes to start streaming. This node is intended to be connected to MIDI IN nodes. Note that a single StopGo node can be connected to several MIDI IN nodes.
Examples: See the documentation for Moritz’s Ornaments or Assistant Performer. Streaming (and file recording) starts when the StopGo node is toggled to green. Streaming and (and file recording) stops when this node is toggled back to red. If Moritz throws an exception in a streaming node for some reason, then its StopGo node is toggled to red, thus stopping all connected streams.

Introduction to Moritz v1    Patch Editor    General Nodes    MIDI Nodes    Krystals Nodes    Ornaments    Assistant Performer