Control Surface main
MIDI Control Surface library for Arduino
Loading...
Searching...
No Matches
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.

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.

See also
Routing MIDI messages (MIDI tutorial)

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.
 
using TrueMIDI_Source = MIDI_Source
 A MIDI_Source that is not a MIDI_Pipe.
 
using BidirectionalMIDI_Pipe = std::pair<MIDI_Pipe, MIDI_Pipe>
 A bidirectional pipe consists of two unidirectional pipes.
 
template<size_t N>
using BidirectionalMIDI_PipeFactory
 

Functions

MIDI_Pipeoperator>> (TrueMIDI_Source &source, MIDI_Pipe &pipe)
 Connect a source to a pipe (source >> pipe).
 
TrueMIDI_Sinkoperator>> (MIDI_Pipe &pipe, TrueMIDI_Sink &sink)
 Connect a pipe to a sink (pipe >> sink).
 
MIDI_Pipeoperator<< (TrueMIDI_Sink &sink, MIDI_Pipe &pipe)
 Connect a sink to a pipe (sink << pipe).
 
TrueMIDI_Sourceoperator<< (MIDI_Pipe &pipe, TrueMIDI_Source &source)
 Connect a pipe to a source (pipe << source).
 
MIDI_Pipeoperator<< (MIDI_Pipe &, MIDI_Pipe &)=delete
 Don't connect two pipes to eachother.
 
TrueMIDI_SinkSourceoperator| (BidirectionalMIDI_Pipe &pipe, TrueMIDI_SinkSource &sinksource)
 Connect a pipe to a sink+source (pipe | source+sink).
 
BidirectionalMIDI_Pipeoperator| (TrueMIDI_SinkSource &sinksource, BidirectionalMIDI_Pipe &pipe)
 Connect a sink+source to a pipe (source+sink | pipe).
 
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 68 of file MIDI_Pipes.hpp.

◆ TrueMIDI_Source

A MIDI_Source that is not a MIDI_Pipe.

Definition at line 70 of file MIDI_Pipes.hpp.

◆ BidirectionalMIDI_Pipe

A bidirectional pipe consists of two unidirectional pipes.

See also
MIDI Routing
Routing MIDI messages (MIDI tutorial)

Definition at line 600 of file MIDI_Pipes.hpp.

◆ BidirectionalMIDI_PipeFactory

template<size_t N>
using BidirectionalMIDI_PipeFactory
Initial value:

Definition at line 673 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 603 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 609 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 615 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 621 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 630 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 638 of file MIDI_Pipes.hpp.

◆ operator>>() [3/6]

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

Definition at line 677 of file MIDI_Pipes.hpp.

◆ operator>>() [4/6]

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

◆ operator>>() [5/6]

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

Definition at line 686 of file MIDI_Pipes.hpp.

◆ operator>>() [6/6]

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

◆ operator<<() [4/5]

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

Definition at line 695 of file MIDI_Pipes.hpp.

◆ operator<<() [5/5]

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

Definition at line 701 of file MIDI_Pipes.hpp.

◆ operator|() [3/4]

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

Definition at line 708 of file MIDI_Pipes.hpp.

◆ operator|() [4/4]

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

Definition at line 715 of file MIDI_Pipes.hpp.