mirror of
https://gitlab.freedesktop.org/pipewire/pipewire.git
synced 2025-10-29 05:40:27 -04:00
doc: update some MIDI docs
The current situation is: - The ALSA sequencer produces and consumes raw UMP only. Legacy input is converted with the control mixer to UMP. - All apps and plugins are made to consume and produce UMP. - The control mixer can convert between UMP and MIDI when required. - Legacy apps (pw-filter) will still receive MIDI1 events (converted by the control mixer). - Helper functions to convert UMP to and from MIDI can be used to ease implementation when legacy MIDI is still required. Using UMP natively over raw MIDI has some advantages: - Transparent support for MIDI2 hardware and the new MIDI2 features such as increased resolution for events, microtonal support, etc.. - Easy to convert between legacy MIDI and UMP - Large SysEx can be fragmented properly. - Fixed size messages are easier to parse and handle.
This commit is contained in:
parent
d057c95b2b
commit
e507c03ad3
1 changed files with 16 additions and 4 deletions
|
|
@ -58,6 +58,10 @@ Since the MIDI events are embedded in the generic control stream,
|
|||
they can be interleaved with other control message types, such as
|
||||
property updates or OSC messages.
|
||||
|
||||
As of 1.4, SPA_CONTROL_UMP (Universal Midi Packet) is the prefered format
|
||||
for the MIDI 1.0 and 2.0 messages in the \ref spa_pod_sequence. Conversion
|
||||
to SPA_CONTROL_Midi is performed for legacy applications.
|
||||
|
||||
## The PipeWire Daemon
|
||||
|
||||
Nothing special is implemented for MIDI. Negotiation of formats
|
||||
|
|
@ -78,9 +82,9 @@ in order to route MIDI streams to them from applications that want this.
|
|||
|
||||
# Implementation
|
||||
|
||||
## PipeWire Media Session
|
||||
## Session manager (Wireplumber)
|
||||
|
||||
PipeWire media session uses the \ref SPA_NAME_API_ALSA_SEQ_BRIDGE plugin for
|
||||
The session manager uses the \ref SPA_NAME_API_ALSA_SEQ_BRIDGE plugin for
|
||||
the MIDI features. This creates a single SPA Node with ports per
|
||||
MIDI client/stream.
|
||||
|
||||
|
|
@ -93,8 +97,16 @@ until the sequencer device node is accessible.
|
|||
JACK assumes all `"application/control"` ports are MIDI ports.
|
||||
|
||||
The control messages are converted to the JACK event format by
|
||||
filtering out the \ref SPA_CONTROL_Midi types. On output ports, the JACK
|
||||
event stream is converted to control messages in a similar way.
|
||||
filtering out the \ref SPA_CONTROL_Midi, \ref SPA_CONTROL_OSC and
|
||||
\ref SPA_CONTROL_UMP types. On output ports, the JACK event stream is
|
||||
converted to control messages in a similar way.
|
||||
|
||||
Normally, all MIDI and UMP messages are converted to MIDI1 jack events unless
|
||||
the JACK port was created with an explcit "32 bits raw UMP" format, in which
|
||||
case the raw UMP is passed to the JACK application directly. For output ports,
|
||||
the JACK events are assumed to be MIDI1 and converted to UMP unless the port
|
||||
has the "32 bit raw UMP" format, in which case the UMP messages are simply
|
||||
passed on.
|
||||
|
||||
There is a 1 to 1 mapping between the JACK events and control
|
||||
messages so there is no information loss or need for complicated
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue