Control Surface master
MIDI Control Surface library for Arduino
Classes | Typedefs | Functions
MIDI Routing

Detailed Description

Operators and utilities for MIDI routing.

Two or more MIDI interfaces can be connected using MIDI Pipes. The simplest pipe just carries messages from the input interface to the output interface, but you can write rules for filtering out certain messages, changing the channel of some messages, etc.

Allows you to use syntax like:

midiA = Serial1, midiB = Serial2, midiC = Serial3;
MIDI_PipeFactory<3> pipes; // Factory that can produce 3 pipes
midiA >> pipes >> midiB;
midiC >> pipes >> midiB;
midiC << pipes << midiB;
A class for MIDI interfaces sending and receiving MIDI messages over a Hardware Serial port.
Class that produces multiple MIDI_Pipes.
Definition: MIDI_Pipes.hpp:645

Or for bidirectional connections:

midiA = Serial1, midiB = Serial2, midiC = Serial3;
BidirectionalMIDI_PipeFactory<2> pipes; // Factory that can produce 2 pipes
midiA | pipes | midiB;
midiA | pipes | midiC;

Have a look at the following examples on MIDI routing:

If you're interested how the pipes work, see the documentation for MIDI_Pipe.

Classes

class  MIDI_Sink
 Receives MIDI messages from a MIDI pipe. More...
 
class  MIDI_Source
 Class that can send MIDI messages to a MIDI pipe. More...
 
class  MIDI_Pipe
 Class that routes MIDI messages from a MIDI_Source to a MIDI_Sink. More...
 
struct  TrueMIDI_SinkSource
 A struct that is both a TrueMIDI_Sink and a TrueMIDI_Source. More...
 
struct  MIDI_PipeFactory< N, Pipe >
 Class that produces multiple MIDI_Pipes. More...
 

Typedefs

using TrueMIDI_Sink = MIDI_Sink
 A MIDI_Sink that is not a MIDI_Pipe. More...
 
using TrueMIDI_Source = MIDI_Source
 A MIDI_Source that is not a MIDI_Pipe. More...
 
using BidirectionalMIDI_Pipe = std::pair< MIDI_Pipe, MIDI_Pipe >
 A bidirectional pipe consists of two unidirectional pipes. More...
 
template<size_t N>
using BidirectionalMIDI_PipeFactory = MIDI_PipeFactory< N, BidirectionalMIDI_Pipe >
 

Functions

MIDI_Pipeoperator>> (TrueMIDI_Source &source, MIDI_Pipe &pipe)
 Connect a source to a pipe (source >> pipe). More...
 
TrueMIDI_Sinkoperator>> (MIDI_Pipe &pipe, TrueMIDI_Sink &sink)
 Connect a pipe to a sink (pipe >> sink). More...
 
MIDI_Pipeoperator<< (TrueMIDI_Sink &sink, MIDI_Pipe &pipe)
 Connect a sink to a pipe (sink << pipe). More...
 
TrueMIDI_Sourceoperator<< (MIDI_Pipe &pipe, TrueMIDI_Source &source)
 Connect a pipe to a source (pipe << source). More...
 
MIDI_Pipeoperator<< (MIDI_Pipe &, MIDI_Pipe &)=delete
 Don't connect two pipes to eachother. More...
 
TrueMIDI_SinkSourceoperator| (BidirectionalMIDI_Pipe &pipe, TrueMIDI_SinkSource &sinksource)
 Connect a pipe to a sink+source (pipe | source+sink). More...
 
BidirectionalMIDI_Pipeoperator| (TrueMIDI_SinkSource &sinksource, BidirectionalMIDI_Pipe &pipe)
 Connect a sink+source to a pipe (source+sink | pipe). More...
 
template<size_t N, class Pipe >
MIDI_Pipeoperator>> (TrueMIDI_Source &source, MIDI_PipeFactory< N, Pipe > &pipe_fact)
 
template<size_t N, class Pipe >
MIDI_Pipeoperator>> (MIDI_Pipe &, MIDI_PipeFactory< N, Pipe > &)=delete
 
template<size_t N, class Pipe >
TrueMIDI_Sinkoperator>> (MIDI_PipeFactory< N, Pipe > &pipe_fact, TrueMIDI_Sink &sink)
 
template<size_t N, class Pipe >
MIDI_Pipeoperator>> (MIDI_PipeFactory< N, Pipe > &, MIDI_Pipe &)=delete
 
template<size_t N, class Pipe >
MIDI_Pipeoperator<< (TrueMIDI_Sink &sink, MIDI_PipeFactory< N, Pipe > &pipe_fact)
 
template<size_t N, class Pipe >
TrueMIDI_Sourceoperator<< (MIDI_PipeFactory< N, Pipe > &pipe_fact, TrueMIDI_Source &source)
 
template<size_t N>
TrueMIDI_SinkSourceoperator| (BidirectionalMIDI_PipeFactory< N > &pipe_fact, TrueMIDI_SinkSource &sinksource)
 
template<size_t N>
BidirectionalMIDI_Pipeoperator| (TrueMIDI_SinkSource &sinksource, BidirectionalMIDI_PipeFactory< N > &pipe_fact)
 

Typedef Documentation

◆ TrueMIDI_Sink

A MIDI_Sink that is not a MIDI_Pipe.

Definition at line 66 of file MIDI_Pipes.hpp.

◆ TrueMIDI_Source

A MIDI_Source that is not a MIDI_Pipe.

Definition at line 68 of file MIDI_Pipes.hpp.

◆ BidirectionalMIDI_Pipe

A bidirectional pipe consists of two unidirectional pipes.

Definition at line 589 of file MIDI_Pipes.hpp.

◆ BidirectionalMIDI_PipeFactory

Definition at line 659 of file MIDI_Pipes.hpp.

Function Documentation

◆ operator>>() [1/6]

MIDI_Pipe & operator>> ( TrueMIDI_Source source,
MIDI_Pipe pipe 
)
inline

Connect a source to a pipe (source >> pipe).

Definition at line 592 of file MIDI_Pipes.hpp.

◆ operator>>() [2/6]

TrueMIDI_Sink & operator>> ( MIDI_Pipe pipe,
TrueMIDI_Sink sink 
)
inline

Connect a pipe to a sink (pipe >> sink).

Definition at line 598 of file MIDI_Pipes.hpp.

◆ operator<<() [1/5]

MIDI_Pipe & operator<< ( TrueMIDI_Sink sink,
MIDI_Pipe pipe 
)
inline

Connect a sink to a pipe (sink << pipe).

Definition at line 604 of file MIDI_Pipes.hpp.

◆ operator<<() [2/5]

TrueMIDI_Source & operator<< ( MIDI_Pipe pipe,
TrueMIDI_Source source 
)
inline

Connect a pipe to a source (pipe << source).

Definition at line 610 of file MIDI_Pipes.hpp.

◆ operator<<() [3/5]

MIDI_Pipe & operator<< ( MIDI_Pipe ,
MIDI_Pipe  
)
delete

Don't connect two pipes to eachother.

◆ operator|() [1/4]

TrueMIDI_SinkSource & operator| ( BidirectionalMIDI_Pipe pipe,
TrueMIDI_SinkSource sinksource 
)
inline

Connect a pipe to a sink+source (pipe | source+sink).

Definition at line 619 of file MIDI_Pipes.hpp.

◆ operator|() [2/4]

BidirectionalMIDI_Pipe & operator| ( TrueMIDI_SinkSource sinksource,
BidirectionalMIDI_Pipe pipe 
)
inline

Connect a sink+source to a pipe (source+sink | pipe).

Definition at line 627 of file MIDI_Pipes.hpp.

◆ operator>>() [3/6]

MIDI_Pipe & operator>> ( TrueMIDI_Source source,
MIDI_PipeFactory< N, Pipe > &  pipe_fact 
)
inline

Definition at line 663 of file MIDI_Pipes.hpp.

◆ operator>>() [4/6]

MIDI_Pipe & operator>> ( MIDI_Pipe ,
MIDI_PipeFactory< N, Pipe > &   
)
delete

◆ operator>>() [5/6]

TrueMIDI_Sink & operator>> ( MIDI_PipeFactory< N, Pipe > &  pipe_fact,
TrueMIDI_Sink sink 
)
inline

Definition at line 672 of file MIDI_Pipes.hpp.

◆ operator>>() [6/6]

MIDI_Pipe & operator>> ( MIDI_PipeFactory< N, Pipe > &  ,
MIDI_Pipe  
)
delete

◆ operator<<() [4/5]

MIDI_Pipe & operator<< ( TrueMIDI_Sink sink,
MIDI_PipeFactory< N, Pipe > &  pipe_fact 
)
inline

Definition at line 681 of file MIDI_Pipes.hpp.

◆ operator<<() [5/5]

TrueMIDI_Source & operator<< ( MIDI_PipeFactory< N, Pipe > &  pipe_fact,
TrueMIDI_Source source 
)
inline

Definition at line 687 of file MIDI_Pipes.hpp.

◆ operator|() [3/4]

TrueMIDI_SinkSource & operator| ( BidirectionalMIDI_PipeFactory< N > &  pipe_fact,
TrueMIDI_SinkSource sinksource 
)
inline

Definition at line 694 of file MIDI_Pipes.hpp.

◆ operator|() [4/4]

BidirectionalMIDI_Pipe & operator| ( TrueMIDI_SinkSource sinksource,
BidirectionalMIDI_PipeFactory< N > &  pipe_fact 
)
inline

Definition at line 701 of file MIDI_Pipes.hpp.