| Clients | Usage | Installation | IPC Specs
A Jackaudio mixer/patchbay suite written in rust
Jamyx is meant to be an easy to use alternative to qjackctl.
Because Jamyx is a server and requires no windows manager or graphics to run. This means that even if you restart your X server, the Jamyx server daemon will keep running independently. Why should your audio setup depend on your window manager? This is also why Jamyx is called Jamyx
and not qJamyx
of Jamyx-gtk
. If you want a graphical front-end to Jamyx, you can download a separate client or even make your own!
I have already written some clients for Jamyx:
- Jmctl: A powerful yet simple client for the Jamyxer server written in go
- Jamyxui: Graphical client for the Jamyx server written in Go
- Jamyxgo: Jamyx client library written in Go (the lib that the above clients use)
Jamyx offers a patchbay utility as well as a full featured audio mixer! After some quick configuration, you can have complex audio routes and volume control over your ports.
Some key features include:
Mixer:
- Individual volume and balance control over ports
- Support for mono and stereo ports
- Supper for monitor channel
- Connection of volume-controlled ports to volume-controlled outputs in a grid-like system
Patchbay:
- Automatic event-based (dis)connections of ports when they appear
- Automatic retrial of (dis)connections when they fail
- Multithreaded and event-based, so never skips a beat!
General:
- On-the-fly loading and saving of current configuration state with non need to restart the daemon.
- Jack server reconnection loop. This means the Jamyx server is independant of the Jackaudio server and will wait for it to restart in case it stops or crashes. Crashing or stopping the Jack server will not crash the Jamyx server.
- Multithreaded IPC
- Easy IPC for server-client communication:
- Monitor any port property and event (e.g.: wait for change in volume of a certain port)
- Getters & Setters for all properties
- Create, delete and rename volume-controlled ports
- Json is used for easy (de)serializing of commands and replies
Interprocess communication is done via a TCP connection to the Jamyx server (default port: 56065
). The messages are formatted in Json as follows:
(using python syntax highlighting in readme for better comment support)
Command
{
"target": "<TARGET>", One of "myx" and "con" for targetting
the mixer and the patchbay respectively
"cmd": "<COMMAND>", One of the later described commands
"opts": ["<OPTIONS>"] The options for the chosen command
}
Reply
{
"ret": <RETURN CODE>, The return code of the command (0 = good)
"msg": <MESSAGE>, Short description of return object or error
"obj": <RETURN OBJECT TREE> Object tree caintaining information
returned by the command
(described in seperate command descs.)
}
A common reply object returned by commands is a Port Object:
{
"port": <str>, The name of the port
"ptype": <"out" | "in">, The port type
"vol": <float>, The volume multiplier (in percentage) of the port
"bal": <float>, The balance of the port
"ismono": <bool>, Whether the port is mono or not
"cons": <list of str> List containing names of all the
connected ports to this one
}
Connect/Disconnect/Toggle two channels together
Command
key | value | description |
---|---|---|
target | "myx" |
|
cmd | "CMD" |
con , dis , or tog for connecting, disconnecting and toggling connection |
opts | ["INPUT_NAME", "OUTPUT_NAME"] |
the names of the two channels |
Return object
This command returns the port object of the output port
Get port(s) specified
Command
key | value | description |
---|---|---|
target | "myx" |
|
cmd | "get" |
|
opts | ["monitor"] OR ["channels"] OR ["TYPE", "NAME"] |
get monitor channel OR get all in/output ports OR get specified channel where TYPE is in or out and NAME is the name of the channel |
Return object
This command returns port object of the specified port.
For the get channels
command, this returns the following object:
{
"inputs": [OBJS],
"outputs": [OBJS]
}
where the OBJS
are port objects
Wait for a certain event and then return the
Command
key | value | description |
---|---|---|
target | "myx" |
|
cmd | "mon" |
monitor property on a certain port |
opts | ["PROPERTY", "TYPE", "NAME"] |
where PROPERTY is any of volume , connections , or balance , and TYPE is in or out and NAME is the name of the channel |
Return object
This command returns port object of the specified port once the monitored property has changed.
Set the value of a certain property
Command
key | value | description |
---|---|---|
target | "myx" |
|
cmd | "set" |
set the value of a property of a channel or set the monitor channel |
opts | ["PROPERTY", "TYPE", "NAME", "VALUE"] OR["monitor", "TYPE", "NAME"] |
where PROPERTY is volume or balance , and TYPE is in or out and NAME is the name of the channel and VALUE is the new value |
Return object
This command returns port object of the specified port.