Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
81 commits
Select commit Hold shift + click to select a range
486955f
Fix handling multiple incoming messages at once
falkTX Jul 12, 2024
5ae41b2
Disable IO processing compressor by default
falkTX Aug 20, 2024
c12a00b
Add activate and preload commands
falkTX Aug 20, 2024
c40de24
[de]activate plugins for buffer size changes
falkTX Aug 20, 2024
995da29
Alternative approach to [de]activate clients, do it in parallel
falkTX Aug 20, 2024
6c1cdd8
Fix last commit, unloading deactivated plugins
falkTX Aug 20, 2024
46f9096
make monitor client generic, matching system playback ports
falkTX Sep 20, 2024
3218168
Cleanup monitor client
falkTX Sep 21, 2024
c1edf9f
Fix socket read with extra leftover null bytes
falkTX Sep 23, 2024
8770226
Fix documentation for cc_map
falkTX Sep 24, 2024
fae0c49
Set TCP_NODELAY
falkTX Sep 28, 2024
09264f9
Implement disconnect_all command
falkTX Oct 12, 2024
92fbabf
activate: use 1 effect at a time, for now
falkTX Oct 21, 2024
d84a8a2
Pass jack client to plugins inside lv2 options
falkTX Oct 21, 2024
83e5da4
Cleanup
falkTX Oct 22, 2024
d157ce0
Allow to fade-in/out while enabling/disabling processing
falkTX Oct 28, 2024
a0bf7d3
Implement monitor_audio_levels (#89)
falkTX Oct 29, 2024
392ef58
Fix macOS build
falkTX Dec 1, 2024
9dc9eb9
Implement lv2 reset designation
falkTX Dec 31, 2024
32b09e0
Implement params_flush command
falkTX Dec 31, 2024
bc9a83e
Allow custom reset value and 0 params in params_flush
falkTX Dec 31, 2024
6044bed
put monitor values in macros for better visibility
falkTX Jan 14, 2025
721c453
Use new macros in effects code too
falkTX Jan 15, 2025
e836641
Do not change reset param if value is 0
falkTX Jan 16, 2025
bcada10
Fix effects_flush_parameters reset param set
falkTX Jan 28, 2025
8e70439
Implement "max_cpu_load" command
falkTX Jan 28, 2025
8ad95cb
Add "cpu-load" feature, for getting cpu-load stats every 0.5s
falkTX Jan 28, 2025
9d4dc13
Fix socket reads of messages of exactly 1024 in size
falkTX Feb 14, 2025
1d86a71
Allow to turn off monitoring of output control ports
falkTX Feb 27, 2025
e2bda73
Bump maximum bpm to 300
falkTX Mar 6, 2025
1e32291
Fix MOD builds
falkTX Apr 10, 2025
0fa82d1
pablito: only connect monitor 5+6 ports (fxsend)
falkTX Apr 28, 2025
c74f24c
Support lv2:isLive
falkTX Apr 28, 2025
bb63541
Use 10 monitor ports for pablito
falkTX Apr 28, 2025
12c91a2
2 more static pablito connections
falkTX Apr 28, 2025
38c89bb
Silence some deprecated warnings
falkTX Jul 30, 2025
2fe8b03
Fix build with latest mingw64
falkTX Jul 30, 2025
09da3d9
Fix build for macOS >= 15.4
falkTX Jul 31, 2025
3fdb5d6
Cleanup, restrict MIDI events for pablito
falkTX Aug 6, 2025
6fde63c
Add monitor_midi_control command, for CC feedback
falkTX Aug 6, 2025
ded2663
Define pablito macro for regular builds too
falkTX Aug 6, 2025
6d79d4a
Fix pablito custom CC handling, actually works now
falkTX Aug 8, 2025
3598481
Fix removing all plugins removing CC mappings from tools
falkTX Aug 12, 2025
95fb2e3
MIDI learn specific details for pablito
falkTX Aug 13, 2025
642ed46
Report pablito reserved CCs if not mapped to a parameter
falkTX Aug 19, 2025
ac9b6e2
Add missing error codes to README
falkTX Oct 13, 2025
864e926
multi variants of a few commands
falkTX Oct 13, 2025
cd8fe41
Make multi add/remove/preload thread-safe
falkTX Oct 14, 2025
0622794
Fix effects_bypass_multi
falkTX Oct 15, 2025
a5e18b2
Fix mod-duo build
falkTX Oct 15, 2025
b9dc27c
Always use zix threads, also with only little cores for pablito
falkTX Oct 27, 2025
2c4e9e7
Only use HMI widgets on Duo X and Dwarf, as MOD_HMI_CONTROL_ENABLED
falkTX Oct 27, 2025
009c7e9
Use the highest non-rt prio for socket handling threads
falkTX Oct 27, 2025
a5d9124
Do not handle external-ui on pablito
falkTX Oct 27, 2025
14df896
Implement port-state-update extension
falkTX Oct 30, 2025
bd00c4d
Fix a typo, more HMI only for MOD units
falkTX Oct 30, 2025
361a2a4
Implement connect_matching command
falkTX Nov 10, 2025
b6ecd76
Cache and ignore repeated port-state-update requests
falkTX Nov 12, 2025
2f1be30
Start some cleanup
falkTX Dec 10, 2025
aff7a46
Do not use multi-threading for add/remove plugins
falkTX Dec 10, 2025
9519849
Add [dis]connect_safe commands
falkTX Dec 11, 2025
d16c79a
Remove experimental flag from multi-add/preload/remove commands
falkTX Dec 11, 2025
219e367
Do not try to send responses to stdout
falkTX Dec 11, 2025
f7c5f50
Only try to stop monitor if running as first instance
falkTX Dec 11, 2025
780779e
Fix a compiler warning
falkTX Dec 17, 2025
2bd134c
Use new LILV_OPTION_OBJECT_INDEX option when supported
falkTX Dec 21, 2025
af11901
Fix win32 build
falkTX Dec 27, 2025
0169b93
worker: deal with incomplete ringbuffer writes
falkTX Jan 6, 2026
665ae0a
lock memory used for worker restore
falkTX Jan 6, 2026
754070f
Schedule multi param changes so they happen in sync
falkTX Jan 8, 2026
9c97d8f
Fix MOD devices build
falkTX Feb 27, 2026
bd0061e
Replace some pablito usage with generic rk358x
falkTX Mar 18, 2026
eed327f
Delay worker responses until next run instead of trying to yield
falkTX Apr 9, 2026
e50c17d
Add pre-run related commands (#90)
falkTX Apr 20, 2026
74e0363
Add monitor_cpu_load command
falkTX Apr 28, 2026
7dd4698
Keep lilv instances always active, only deactivate jack clients (#92)
falkTX Apr 29, 2026
d8fb520
Corrections on mod-monitor client code
falkTX Apr 29, 2026
098cabc
Merge branch 'master' into monitor-cpu-load
falkTX Apr 29, 2026
aee8aba
Implement dgpros:noPreRun (#93)
falkTX Apr 30, 2026
df2cdf6
Merge branch 'master' into monitor-cpu-load
falkTX Apr 30, 2026
c902652
Fix cache handling for POSTPONED_CPU_MONITOR
falkTX May 8, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -85,6 +85,10 @@ ifeq ($(shell pkg-config --atleast-version=1.9.0 jack && echo true), true)
INCS += -DHAVE_JACK2
endif

ifeq ($(shell pkg-config --atleast-version=1.9.23 jack && echo true), true)
INCS += -DHAVE_JACK2_1_9_23
endif

ifeq ($(HAVE_NE10),true)
LIBS += -lNE10
INCS += -DHAVE_NE10
Expand Down
127 changes: 113 additions & 14 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -91,7 +91,7 @@ Options
-i, --interactive
interactive shell mode

-n, --nofork
-n, --nofork
run in non-forking mode

-V, --version
Expand All @@ -107,15 +107,26 @@ Commands (or Protocol)
The commands supported by mod-host are:

add <lv2_uri> <instance_number>
* add an LV2 plugin encapsulated as a jack client
* add an LV2 plugin encapsulated as a jack client, in activated state
e.g.: add "http://lv2plug.in/plugins/eg-amp" 0
instance_number must be any value between 0 ~ 9990, inclusively

remove <instance_number>
* remove an LV2 plugin instance (and also the jack client)
* remove an LV2 plugin instance, and also the jack client
e.g.: remove 0
when instance_number is -1 all plugins will be removed

activate <instance_number> <activate_value>
* toggle effect activated state
e.g.: activate 0 1
if activate_value = 1 activate effect
if activate_value = 0 deactivate effect

preload <lv2_uri> <instance_number>
* add an LV2 plugin encapsulated as a jack client, in deactivated state
e.g.: preload "http://lv2plug.in/plugins/eg-amp" 0
instance_number must be any value between 0 ~ 9990, inclusively

preset_load <instance_number> <preset_uri>
* load a preset state of an effect instance
e.g.: preset_load 0 "http://drobilla.net/plugins/mda/presets#JX10-moogcury-lite"
Expand All @@ -132,10 +143,26 @@ The commands supported by mod-host are:
* connect two jack ports
e.g.: connect "system:capture_1" "effect_0:in"

connect_matching <matching_port> <destination_port>
* connect the same connected ports of a port to another, so they match.
e.g.: connect "effect_0:in" "effect_1:in"

connect_safe <origin_port> <destination_port>
* safely connect two jack ports, verifying that they exist beforehand
e.g.: connect_safe "system:capture_1" "effect_0:in"

disconnect <origin_port> <destination_port>
* disconnect two jack ports
e.g.: disconnect "system:capture_1" "effect_0:in"

disconnect_all <origin_port>
* disconnect all connections of a jack port
e.g.: disconnect_all "effect_0:in"

disconnect_safe <origin_port> <destination_port>
* safely disconnect two jack ports, verifying that they exist and have connections beforehand
e.g.: disconnect_safe "system:capture_1" "effect_0:in"

bypass <instance_number> <bypass_value>
* toggle effect processing
e.g.: bypass 0 1
Expand All @@ -154,6 +181,17 @@ The commands supported by mod-host are:
* monitor a control port according to a condition
e.g: param_monitor 0 "gain" ">" 2.5

params_flush <instance_number> <reset_value> <param_count> <params...>
* flush several param values at once and trigger reset if available
* reset value must be according to reset property spec
e.g.: params_flush 0 1 2 "gain" 0.0 "distortion" 0.5

pre_run <instance_number> <reset_value> <param_count> <params...>
* pre-run and flush several param values at once and trigger reset if available
* reset value must be according to reset property spec
* instance must be in deactivated state or global processing disabled (and plugin does not have isLive flag)
e.g.: pre_run 0 1 2 "gain" 0.0 "distortion" 0.5

patch_set <instance_number> <property_uri> <value>
* set the value of a control port
e.g.: patch_set 0 "gain" 2.5
Expand All @@ -176,6 +214,10 @@ The commands supported by mod-host are:
* request monitoring of an output control port (on the feedback port)
e.g.: monitor_output 0 "meter"

monitor_output_off <instance_number> <param_symbol>
* turn off monitoring of an output control port (on the feedback port)
e.g.: monitor_output_off 0 "meter"

midi_learn <instance_number> <param_symbol> <minimum> <maximum>
* start MIDI learn for a control port
e.g.: midi_learn 0 "gain" 0.0 1.0
Expand All @@ -189,21 +231,25 @@ The commands supported by mod-host are:
* unmap the MIDI controller from a control port
e.g.: midi_unmap 0 "gain"

monitor_audio_levels <source_port_name> <enable>
* monitor audio levels for a specific jack port (on the feedback port)
e.g.: monitor_audio_levels "system:capture_1" 1

monitor_cpu_load <enable> <instance_count> <instance_number...>
* monitor cpu load for specific instances
e.g.: monitor_cpu_load 1 2 0 1

monitor_midi_control <midi_channel> <enable>
* listen to MIDI control change messages (on the feedback port)
e.g.: monitor_midi_control 7 1

monitor_midi_program <midi_channel> <enable>
* listen to MIDI program change messages (on the feedback port)
e.g.: monitor_midi_program 0 1

set_midi_program_change_pedalboard_bank_channel <enable> <midi_channel>
* set the MIDI channel which changes pedalboard banks on MIDI program change. <midi_channel> is in the range of [0,15].
e.g.: set_midi_program_change_pedalboard_bank_channel 1 5 to enable listening for bank changes on channel 6

set_midi_program_change_pedalboard_snapshot_channel <enable> <midi_channel>
* set the MIDI channel which changes pedalboard snapshots on MIDI program change. <midi_channel> is in the range of [0,15].
e.g.: set_midi_program_change_pedalboard_snapshot_channel 1 4 to enable listening for preset changes on channel 5

cc_map <instance_number> <param_symbol> <device_id> <actuator_id> <label> <value> <minimum> <maximum> <steps> <unit> <scalepoints_count> <scalepoints...>
cc_map <instance_number> <param_symbol> <device_id> <actuator_id> <label> <value> <minimum> <maximum> <steps> <extraflags> <unit> <scalepoints_count> <scalepoints...>
* map a Control Chain actuator to a control port
e.g.: cc_map 0 "gain" 0 1 "Gain" 0.0 -24.0 3.0 33 "dB" 0
e.g.: cc_map 0 "gain" 0 1 "Gain" 0.0 -24.0 3.0 33 0 "dB" 0

cc_unmap <instance_number> <param_symbol>
* unmap the Control Chain actuator from a control port
Expand All @@ -222,7 +268,10 @@ The commands supported by mod-host are:
e.g.: cv_unmap 0 "gain"

cpu_load
* return current jack cpu load
* return current average jack cpu load

max_cpu_load
* return current maximum jack cpu load

load <file_name>
* load a history command file
Expand Down Expand Up @@ -268,6 +317,52 @@ The commands supported by mod-host are:
output_data_ready
* report feedback port ready for more messages

multi_add <instance_count> <lv2_uri,instance_number...>
* add an LV2 plugin encapsulated as a jack client, in activated state (multiple instance variant)
e.g.: multi_add 2 "http://lv2plug.in/plugins/eg-amp" 0 "http://lv2plug.in/plugins/eg-amp" 1
instance_number must be any value between 0 ~ 9990, inclusively

multi_remove <instance_count> <instance_number...>
* remove an LV2 plugin instance, and also the jack client (multiple instance variant)
e.g.: multi_remove 2 0 1

multi_activate <activate_value> <instance_count> <instance_number...>
* toggle effect activated state (multiple instance variant)
e.g.: multi_activate 0 2 0 1
if activate_value = 1 activate effect
if activate_value = 0 deactivate effect

multi_preload <instance_count> <lv2_uri,instance_number...>
* add an LV2 plugin encapsulated as a jack client, in deactivated state (multiple instance variant)
e.g.: multi_preload 2 "http://lv2plug.in/plugins/eg-amp" 0 "http://lv2plug.in/plugins/eg-amp" 1
instance_number must be any value between 0 ~ 9990, inclusively

multi_bypass <bypass_value> <instance_count> <instance_number...>
* toggle effect processing (multiple instance variant)
e.g.: multi_bypass 0 2 0 1
if bypass_value = 1 bypass effect
if bypass_value = 0 process effect

multi_param_set <param_symbol> <param_value> <instance_count> <instance_number...>
* set the value of a control port (multiple instance variant)
* must be instances of the same plugin
e.g.: multi_param_set "gain" 2.5 2 0 1

multi_params_flush <reset_value> <instance_count> <instance_number...> <param_count> <params...>
* flush several param values at once and trigger reset if available (multiple instance variant)
* reset value must be according to reset property spec
* all instances must be in activated state
e.g.: multi_params_flush 1 2 0 1 2 "gain" 0.0 "distortion" 0.5

multi_pre_run <reset_value> <instance_count> <instance_number...> <param_count> <params...>
* pre-run and flush several param values at once and trigger reset if available (multiple instance variant)
* reset value must be according to reset property spec
* all instances must be in deactivated state or global processing disabled (and plugins do not have isLive flag)
e.g.: multi_pre_run 1 2 0 1 2 "gain" 0.0 "distortion" 0.5

wait_audio_cycle
* wait for at least 1 audio cycle to pass

help
* show a help message

Expand Down Expand Up @@ -300,12 +395,16 @@ If status is a negative number an error has occurred. The table below shows the
| -204 | ERR\_JACK\_PORT\_REGISTER |
| -205 | ERR\_JACK\_PORT\_CONNECTION |
| -206 | ERR\_JACK\_PORT\_DISCONNECTION |
| -207 | ERR\_JACK\_VALUE\_OUT\_OF\_RANGE |
| -301 | ERR\_ASSIGNMENT\_ALREADY\_EXISTS |
| -302 | ERR\_ASSIGNMENT\_INVALID\_OP |
| -303 | ERR\_ASSIGNMENT\_LIST\_FULL |
| -304 | ERR\_ASSIGNMENT\_FAILED |
| -304 | ERR\_ASSIGNMENT\_UNUSED |
| -401 | ERR\_CONTROL\_CHAIN\_UNAVAILABLE |
| -402 | ERR\_LINK\_UNAVAILABLE |
| -403 | ERR\_HMI\_UNAVAILABLE |
| -404 | ERR\_EXTERNAL\_UI\_UNAVAILABLE |
| -901 | ERR\_MEMORY\_ALLOCATION |
| -902 | ERR\_INVALID\_OPERATION |

Expand Down
Loading
Loading