Hello Linux Audio Users,
I'm working on a program to drive LED lights based on music playback on a
Linux system. My application creates Jack input ports for frequency
analysis which I'm currently connecting to the Jack monitor ports, this
frequency analysis info is then used for controlling some RGB LED lights.
The application I'm currently using for music playback is Clementine, which
has a Jack sink option.
All this works fine. However, the frequency analysis of the input audio
incurs unwanted latency, so there is a slight delay between changes in the
music and lighting changes. What I want to do is delay the audio playback
to match the full system latency to match the lighting updates as close to
real time as possible.
My current thinking is to route the incoming Jack audio in my application
back to the Jack playback ports, with a fixed delay buffer.
The problem is getting applications, such as Clementine, to connect to my
application's ports instead of the physical output ports. My understanding
of Clementine is that it is using gstreamer, and thus the jackaudiosink
plugin. This plugin appears to have some properties for changing the
default ports it connects to ("connect" and "port-pattern").
Clementine
does not seem to offer a way to specify what ports it connects to though.
What complicates it more is that the ports are disconnected/recreated for
each song.
I suppose I could look into modifying the Clementine code to allow for a
value for the "port-pattern" property to be specified, but I thought
someone on this list might have some better ideas.
Some other thoughts I had:
Is it possible to modify the default system wide Jack playback ports to be
an application? From what I have seen of code that auto connects to the
playback ports, is that it looks for the first input port marked as
Physical.
Is it possible to change the default system wide setting "port-pattern" for
jackaudiosink?
Is it possible to modify jackaudiosink settings on a per application basis
(say with an environment variable or config file) without having to modify
the client program's source.
Thanks in advance for any help on this and cheers!
Element Green