- Debian 10 (Buster), stable, Debian 4.19.xx
4 Gb, 2 cores
With KXStudio repositories
Separate local installs of Pd 0.50-2 and 0.51-2 (they don't always work with 0.49 externals, but pretty much doing vanilla anyway)
- Also: Ubuntu 20.04, Kxstudio repos
16 Gb, 12 core
Pd 0.50.2 Repo install & Pd 0.51.4 local
RT == Yes, on both
Now using a low-latency Kernel
ACPI disabled on startup via GRUB
Pulseaudio installed, but disabled when using JACK with systemctl
CPU scaling works correctly for this machine.
Still disable Pulseaudio when using JACK.
A new version of the pd2jack app (v0.4.0), a LibPd <-> JACK client for Linux:
This release adds OSC IPC, a simple client example, more cmds (over 40), additional patches (some utility patches) and updated documentation.
OSC i/o is handled by pd2jack directly, with options to passthru data to the running patch(es).
There are now over 40 "immediate commands" for controlling pd2jack (and sending data to the patch).
There's an example client (for MobMuPlat) included:
Other native clients are in the works (the holdup on those is mostly about build issues-makefiles, etc).
Yep, if you have Java installed, look in the "CrossPlatformJava" dir, and MobMuPlatEditor.jar should run with a double-click.
I'm also using Ubuntu 20.04. A right-click also shows "Open with OpenJDK Java 11 Runtime".
(I didn't build it, just used the jar from the development package, linked from the "Setup" section of the website.)
Have you tried replacing both JACK & Pulseaudio with Pipewire? I have high-hopes for that, down the road. The artix Wiki has page specific to this: https://wiki.artixlinux.org/Site/PipewireInsteadPulseaudio
On Ubuntu & Debian now, Pulse and JACK can co-exist fairly well. I migrated to the KXstudio way of handling the two, vs Qjackctl, with the bridging controls in Cadence. Three, really, since there's also an ALSA bridge.
Even with JACK & Pulse bridged, my system automatically resets to the onboard sound device for Pulse, vs my default JACK interface (USB). Usually not an issue, but if I'm using Firefox or a video editor, it needs to be explicitly set.
I also use a pair of scripts to kill or restart Pulseaudio, since I'm using JACK 99% of the time. It's not really necessary, but it can reduce CPU load 3-4% :
#!/bin/bash systemctl --user stop pulseaudio.socket systemctl --user stop pulseaudio.service
If JACK can't start because some other service has grabbed the interface, try that script before re-configuring (I don't recall if that script alone stops Pulse from respawning, tho).
have you ever used a sinc or windowed sinc FIR? or FFT squared filter for that matter? (i.e. allow to introduce latency?)
No, I haven't tried that. I did mess with some fexpr~ FIR filters (again, after upsampling), but the cpu load was massive.
I wish there was a fourth option for [inlet~]: "pad&FIR". The two together are standard for upsampling incoming audio.
I've done a bit with oversampling, and the filter setup in J07 seems to be very efficient, cpu-wise. But you can use what works for your application. ELSE has a LOT of filter objects, too.
I left that part (pre-downsampling), as-is. For oversampling audio input (not audio produced inside the block), post-upsampling filters were more of a judgement call...
Another new release for pd2jack (v0.1.9):
New with v0.1.9, enabling interactive mode (-i) interprets a "live stream" of parameter pairs (in the console), which are passed on as "param" messages to the Pd patch. These work like the startup "parameter pairs," except for:
- No quotes are required
- Passed in real time during run
- Each pair is terminated with a newline
A stream of pairs might look something like this:
1 89 1 88 1 87 1 86 3 2180 3 2200 3 2221 3 2241 3 2261 4 19
NOTE: this has some cool implications -- a separate GUI application can act as a front-end, and "pipe" data into pd2jack.
So ANY GUI api could be used...just convert any input to parameter pairs and print them to the console. This isn't a crazy as it sounds -- two applications connected with a pipe are separate processes, and if the numeric char strings aren't actually printed to the console (the are not, with pipe), the CPU load is pretty small.
Here's a example of how it's invoked:
./revUI | pd2jack -i -p rev_i.pd
(where revUI is the GUI, and pd2jack is running the "rev_i.pd" patch in interactive mode.)
Simple video demo:
There are other options for IPC with Pd (netsend, netreceive & some custom objects) and piping the console might feel like a hack, but it is simple and quick. An additional method (sockets?) might be added to pd2jack in the future...(yeah, I'm thinking maybe a plugin interface).
It's also been suggested this mode might be useful for people with disabilities. I've also successfully piped the output of pd2jack to a speech synthesis module, sending text via Pure Data's [print] object, as well as any info output in "verbose" mode. Of course, that could probably be done in a normal "headless" Pure Data.
Interactive Mode Special Commands (w/ "@" prefix)
Interactive mode also includes a set of special cmds, for controlling some internal operations. Each of these cmds is preceeded with an "at" symbol (@), to differentiate the cmds from the parameter stream. Here's a list:
- @openPatch <name> : load a different patch into the LibPd space (closes current patch first).
- @closePatch : closes the current patch
- @reopenPatch : reopens the last valid patch (patch can be closed or already open)
- @im_sleepTime <int> : sleep time (ms, 5-500) between data fetches for interactive mode.
Invoking "@reopenPatch" on an already open patch will reload the patch.
I expect more cmds will be added in the future.
A new release for pd2jack today (v0.1.6):
- This version has improved MIDI support (all RT message supported). Nearly all of the MIDI code was rewritten (and simplified).
- LibPd is now a submodule, and the build process streamlined.
- A Linux binary (zipped w/docs & Pd examples) is available with the release (Building from source is still recommended).
Great ! Just of curiosity : is the pd~ object supported ?
Nearing a more complete release, I ran a test with the pd~ obj, and (for now) the answer is no. I'm getting the error:
error: pd~: can't stat /pdsched.so pd~ startup failed
It's likely that functionality lies with LibPd's "multiple instance support." I did try early on to enable that, but there's clearly more to it than simply enabling it (seg fault). So stay tuned, it's something I'd like to run down...
Enabling multiple instance support does work now. Progress. Still fails looking for a dynamic library (the other "extras" work without expecting an .so file, and the [pd~] code does build object files.) Hmmm.
Err, or not. Multiple instance still causing seg faults. To do.
The pd2jack project now has an official release, v0.1.0 (!)
- MIDI Sysex msgs larger than 512 are not sent correctly, and will probably send garbage.
- MIDI RT Song Position & Song Select are not implemented (from the encapsulated patch -> output - they should input correctly).
Great ! Just of curiosity : is the pd~ object supported ?
Good question! I haven't tested it, so I don't know. There's a multi-instance build option for LibPd which I'm not using. That has it's own mini-API in the library and isn't directly invoked by any Pd patch code.
But LibPd is Pure Data, with some small caveats. If Pure Data can launch a sub-process, there's a good chance LibPd can as well...