1
Fork 0
Dynamic and static MIDI bridging between JACK MIDI and ALSA sequencer graphs https://a2jmidid.ladish.org/
Go to file
Nedko Arnaudov 319d21eec3 NEWS: release LADI a2jmidid 9.1 2023-05-04 15:03:20 +03:00
.github/workflows CI: apt install libasound2-dev 2022-08-28 17:26:51 +03:00
man Let the user bypass note on filtering when velocity is 0 2023-05-04 14:52:31 +03:00
siginfo@ba0ec23f8d Update siginfo git submodule to latest 2022-08-20 18:46:49 +03:00
waf-autooptions@cc16822604 Add waf-autooptions git submodule 2022-08-20 18:18:11 +03:00
.gitignore wscript: adjust for newer waf (incomplete) 2022-08-28 17:09:37 +03:00
.gitmodules Add siginfo git submodule 2022-08-20 18:20:35 +03:00
AUTHORS.rst Feature/release cleanup (#4) 2019-09-24 00:34:12 +02:00
GNUmakefile CI: build ubuntu LTS 2022-08-28 17:23:30 +03:00
INSTALL.rst INSTALL.rst for waf & meson 2022-08-28 20:55:06 +03:00
LICENSE Feature/release cleanup (#4) 2019-09-24 00:34:12 +02:00
Makefile Revert "Feature/meson (#1)" and reintroduce waf and the regular Makefile 2022-08-20 17:27:48 +03:00
NEWS.rst NEWS: release LADI a2jmidid 9.1 2023-05-04 15:03:20 +03:00
README.rst Feature/release cleanup (#4) 2019-09-24 00:34:12 +02:00
a2j Fix typo in a comment 2010-08-21 16:18:19 +03:00
a2j_control a2j_control: apply python 2to3 2022-08-28 20:55:06 +03:00
a2jmidi_bridge.c Update copyright years (2009) 2009-05-07 21:33:55 +03:00
a2jmidid.c Let the user bypass note on filtering when velocity is 0 2023-05-04 14:52:31 +03:00
a2jmidid.h improved error handling in a2j_new; light coding style changes 2009-12-29 06:15:32 +02:00
conf.c Update copyright years (2009) 2009-05-07 21:33:55 +03:00
conf.h control unique port names over DBUS 2013-11-26 23:47:58 +02:00
config.h.in Reintroduce Feature/meson (#1) 2022-08-28 19:48:01 +03:00
dbus.c return explicit dbus void replies 2009-12-07 02:34:42 +02:00
dbus.h Update copyright years (2009) 2009-05-07 21:33:55 +03:00
dbus_iface_control.c control unique port names over DBUS 2013-11-26 23:47:58 +02:00
dbus_iface_control.h Update copyright years (2009) 2009-05-07 21:33:55 +03:00
dbus_iface_introspectable.c Update copyright years (2009) 2009-05-07 21:33:55 +03:00
dbus_internal.h return explicit dbus void replies 2009-12-07 02:34:42 +02:00
gitversion_regenerate.sh wscript: adjust for newer waf (incomplete) 2022-08-28 17:09:37 +03:00
internals.txt * Remove obsolete info about semaphore 2008-07-30 12:28:08 +00:00
j2amidi_bridge.c Update copyright years (2009) 2009-05-07 21:33:55 +03:00
jack.c Let the user bypass note on filtering when velocity is 0 2023-05-04 14:52:31 +03:00
jack.h improved error handling in a2j_new; light coding style changes 2009-12-29 06:15:32 +02:00
list.c list_sort() 2009-05-31 19:59:55 +03:00
list.h list_sort() 2009-05-31 19:59:55 +03:00
log.c Fix log text 2010-08-28 04:31:03 +03:00
log.h Update copyright years (2009) 2009-05-07 21:33:55 +03:00
meson.build Reintroduce Feature/meson (#1) 2022-08-28 19:48:01 +03:00
meson_options.txt Reintroduce Feature/meson (#1) 2022-08-28 19:48:01 +03:00
org.gna.home.a2jmidid.service.in Reintroduce Feature/meson (#1) 2022-08-28 19:48:01 +03:00
paths.c Update copyright years (2009) 2009-05-07 21:33:55 +03:00
paths.h Update copyright years (2009) 2009-05-07 21:33:55 +03:00
port.c improved error message for snd_seq_connect_to() failures 2011-09-15 12:58:30 +03:00
port.h Update copyright years (2009) 2009-05-07 21:33:55 +03:00
port_hash.c Update copyright years (2009) 2009-05-07 21:33:55 +03:00
port_hash.h Update copyright years (2009) 2009-05-07 21:33:55 +03:00
port_thread.c add debug log 2009-12-15 02:22:06 +02:00
port_thread.h Update copyright years (2009) 2009-05-07 21:33:55 +03:00
sigsegv.c Switch to siginfo, fix build on arm64 2022-08-20 18:36:46 +03:00
sigsegv.h Switch to siginfo, fix build on arm64 2022-08-20 18:36:46 +03:00
structs.h use port name buffer of actual max size; print warning on truncation 2010-04-04 23:16:18 +03:00
waf Upgrade waf to 2.0.24 2022-08-28 15:48:47 +03:00
wscript make gitversion.h optional include for a2jmidid.c 2022-08-28 19:56:54 +03:00

README.rst

========
a2jmidid
========

This project aims to ease the usage of legacy, non |jack| enabled applications,
in a |jack| MIDI enabled system, when using |jack2|

There are two ways to use legacy |alsa| sequencer applications in a |jack| MIDI
system:

**Automatic bridging**: For every |alsa| sequencer port you get one |jack| MIDI
port. If an |alsa| sequencer port is both an input and an output, you get two
|jack| MIDI ports, one input and output.
(*This approach works almost always except when the legacy ALSA sequencer
application does not create ports and/or wants to use an existing port to
capture from or playback to. Such programs are using a feature of the |alsa|
sequencer framework that allows sending and receiving MIDI events to/from a
port, without creating a connection to it.*)

**Static bridges**: You start an application that creates one |alsa| sequencer
port and one |jack| MIDI port. Such a bridge is unidirectional.

For details on how to build and install this project, look at `INSTALLATION.rst
<INSTALLATION.rst>`_.

a2jmidid
--------

a2jmidid is a daemon that implements **automatic bridging**.

It has two modes of operation: Running a bridge manually or as a backgrounded
|dbus| service.

Start daemon
____________

To start *a2jmidid* in manual mode, just run the executable.
*a2jmidid* will start bridging, and you will get output on stdout and stderr.
You can stop the bridge using *ctrl-c*.

Usually you want to bridge software ports and not bridge hardware
ports (they are handled by |jack| itself). In case you want to force
*a2jmidid* to bridge hardware ports nonetheless, you can use the according
flags::

  a2jmidid -e

or::

  a2jmidid --export-hw

Start D-Bus service
___________________

In D-Bus service mode, a2jmidid works in the background. When service access is
requested by some application (such as *a2j_control*), the |dbus| session bus
daemon activates the object by executing the service executable.

The object has methods for starting and stopping the
bridging. You can use *a2j_control* to do this::

  a2j_control --start
  a2j_control --stop

You can deactivate (that may cause later reactivation) the service
like this::

  a2j_control --exit

You can query the bridge status using this command::

  a2j_control --status

There also methods (and corresponding a2j_control commands) that can
be used to query mapping information::

  a2j_control --help

The *a2jmidid* implementation is based on *jack-alsamidi-0.5*, which is
(almost) identical to the jackd |alsa| *seq* MIDI backend), both created by
Dmitry Baikov.

a2jmidi_bridge
--------------

*a2jmidi_bridge* creates a **static bridge** between one |alsa| sequencer
playback port and one |jack| MIDI capture port. MIDI events sent to the |alsa|
sequencer playback port can be read from the |jack| MIDI capture port.

*a2jmidi_bridge* has an optional argument that allows overriding the name used
for the |jack| and |alsa| client::

  a2jmidi_bridge "my precious bridge"

The *a2jmidi_bridge* implementation is based on *alsaseq2jackmidi* by Sean
Bolton.

j2amidi_bridge
--------------

*j2amidi_bridge* creates a **static bridge** between one |jack| MIDI playback
port and one |alsa| sequencer capture port. MIDI events sent to |jack|
MIDI playback port can be read from the |alsa| sequencer capture port.

*j2amidi_bridge* has an optional argument that allows overriding the name used
for the |jack| and |alsa| client::

  j2amidi_bridge "my precious bridge"

The *j2amidi_bridge* implementation is based on jackmidi2alsaseq by Lars
Luthman.

.. |jack| raw:: html

  <a href="http://jackaudio.org" target="_blank">JACK</a>

.. |jack2| raw:: html

  <a href="https://github.com/jackaudio/jack2" target="_blank">jack2</a>

.. |dbus| raw:: html

  <a href="https://www.freedesktop.org/wiki/Software/dbus/" target="_blank">D-Bus</a>

.. |alsa| raw:: html

  <a href="https://alsa-project.org/wiki/Main_Page" target="_blank">ALSA</a>