mod-host is an LV2 host for jackd, that can be controlled via a socket or shell.
Currently the host supports the following LV2 features:
- lv2core
- atom
- event
- buf-size
- midi
- options
- uri-map
- urid
- worker
mod-host is part of the MOD project.
mod-host uses a simple Makefile to build the source code. The steps to build and install are:
make
sudo make install
The default instalation path is /usr/local/bin, this can be modified passing the variable INSTALL_PATH to make install, e.g.:
sudo make install INSTALL_PATH=/usr/bin
Dependencies:
libjack-jackd2 >= 1.9.8
liblilv >= 0.14.2
libargtable2 >= 2.13
libreadline >= 6.2
lilv-utils (optional)
lv2
Installing all dependencies on debian based distros:
sudo apt-get install libjack-jackd2-dev liblilv-dev libargtable2-dev libreadline-dev lilv-utils
Compiling lv2 from source
wget http://lv2plug.in/spec/lv2-1.6.0.tar.bz2
sudo apt-get install libgtk2.0-dev libsndfile1-dev
cd lv2**
./waf configure
./waf
sudo ./waf install
To turn doc/man.txt into a groff manpage you need txt2man. To build and install the manpage run:
make man
sudo make install-man
To read the manual type man mod-host
in your terminal.
mod-host does not startup jackd automatically, so you need to start it before run mod-host.
If you run mod-host without parameters the process will be forked and can only be controlled through the socket. The default socket port is 5555, this can be changed by passing the parameter -p (or --socket-port) to mod-host.
The other way to control mod-host is the interactive mode, in this case the
commands must be provided on the shell prompt.
The interactive mode has autocomplete, therefore, you can always type [TAB]
twice if you need a hint.
Obs.: When you are in the interactive mode, the socket communication does not work.
The commands supported by mod-host are:
add <lv2_uri> <instance_number>
e.g.: add http://lv2plug.in/plugins/eg-amp 0
instance_number must be any value between 0 ~ 9999, inclusively
remove <instance_number>
e.g.: remove 0
connect <origin_port> <destination_port>
e.g.: connect system:capture_1 effect_0:in
disconnect <origin_port> <destination_port>
e.g.: disconnect system:capture_1 effect_0:in
param_set <instance_number> <param_symbol> <param_value>
e.g.: param_set 0 gain 2.50
param_get <instance_number> <param_symbol>
e.g.: param_get 0 gain
param_monitor <instance_number> <param_symbol> <cond_op> <value>
e.g: param_monitor 0 gain > 2.50
monitor <addr> <port> <status>
e.g: monitor localhost 12345 1
if status = 1 start monitoring
if status = 0 stop monitoring
bypass <instance_number> <bypass_value>
e.g.: bypass 0 1
if bypass_value = 1 bypass the effect
if bypass_value = 0 process the effect
load <filename>
e.g.: load my_preset
save <filename>
e.g.: save my_preset
this command saves the history of typed commands
help
show a help message
quit
bye!
For each effect added one client on jackd will be created. The names of clients follow the standard: effect_<instance_number>
For each command sent one response is given. If the command is valid the response format will be:
resp <status> [value]
If status is a negative number, an error occurred. The error will be one of the following:
status | error |
---|---|
-1 | ERR_INSTANCE_INVALID |
-2 | ERR_INSTANCE_ALREADY_EXISTS |
-3 | ERR_INSTANCE_NON_EXISTS |
-101 | ERR_LV2_INVALID_URI |
-102 | ERR_LILV_INSTANTIATION |
-103 | ERR_LV2_INVALID_PARAM_SYMBOL |
-201 | ERR_JACK_CLIENT_CREATION |
-202 | ERR_JACK_CLIENT_ACTIVATION |
-203 | ERR_JACK_CLIENT_DEACTIVATION |
-204 | ERR_JACK_PORT_REGISTER |
-205 | ERR_JACK_PORT_CONNECTION |
-206 | ERR_JACK_PORT_DISCONNECTION |
-301 | ERR_MEMORY_ALLOCATION |
A status zero or positive means that the command was executed successfully. In case of the add command, the status returned is the instance number. The value field currently only exists for the param_get command.