Control Surface disable-pipes
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:648

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 69 of file MIDI_Pipes.hpp.

◆ TrueMIDI_Source

A MIDI_Source that is not a MIDI_Pipe.

Definition at line 71 of file MIDI_Pipes.hpp.

◆ BidirectionalMIDI_Pipe

A bidirectional pipe consists of two unidirectional pipes.

Definition at line 592 of file MIDI_Pipes.hpp.

◆ BidirectionalMIDI_PipeFactory

Definition at line 662 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 595 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 601 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 607 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 613 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 622 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 630 of file MIDI_Pipes.hpp.

◆ operator>>() [3/6]

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

Definition at line 666 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 675 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 684 of file MIDI_Pipes.hpp.

◆ operator<<() [5/5]

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

Definition at line 690 of file MIDI_Pipes.hpp.

◆ operator|() [3/4]

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

Definition at line 697 of file MIDI_Pipes.hpp.

◆ operator|() [4/4]

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

Definition at line 704 of file MIDI_Pipes.hpp.