Nedko Arnaudov on Linux Audio
no-self-connect patch for jack-1.9.9.5

People are asking for no-self-connect patch updated for the new 1.9.9.5 jack2 release. While one can always use the git no-self-connect branch to build jack or generate patch, not everybody knows how to use git. So I’ve made a p1 patch and uploaded it.

The patch itself and a PGP signature for it:

or if you want to use HTTPS and have ipv6:

Tagged: #lv2 #linuxaudio
Created: Wed Dec 19 12:42:00 +0200 2012
My LV2 projects

I’m abandoning all lv2 related projects that I currently maintain. Here is a list:

The zyn-rewrite project that produced lv2zynadd stays but will be cleared from all lv2 code. If anyone wants to take over the maintainership of any project of mine, contact me. I’ll wait a month before wiping out all online lv2-related resources I control.

I don’t want to participate in the lv2 madness anymore. I admit I cannot communicate rationally with David Robillard. If contributing is not pleasure, then one doesn’t belong to the community. I wish everyone involved more luck than I had.

Tagged: #lv2 #linuxaudio
Created: Tue Aug 21 09:16:00 +0300 2012
LADI Session Handler - Version 1

This release marks end of the preview series. It brings three new user visible features - virtual graph manipulation, LASH support and jack-session support.

Virtual graph manipulation allows to perform these operations:

The added LASH and jack-session support allows apps to be run in rooms at LASH or jack-session level. jack-session support requires jack-1.9.8.

Download
The tarballs are available at the usual location:

There are two tarballs. ladish-1-with-deps.tar.bz2 is 5.3 MiB and bundles the major dependencies that are usually needed for running ladish:

All of these are either development (git/svn) versions or release versions that are patched to work better with ladish. The last released versions of these dependencies are expected work with ladish. The most serious "incompatibility" is that the jack2 mainline is missing the no-self-connect changeset. This changeset adds option to jack that allows prevention of jack apps self connection to "hardware" ports (usually system:playback_N). As such self-connecting apps are not rare at all, without it, the studio/room separation is not-effective and the workflow can get very confusing.

If you are compiling the software by yourself, then you should probably use this "fat" tarball.

The ladish-1.tar.bz2 tarball is 586 KiB and contains only ladish itself. It is expected to be used mainly by packagers.

Known issues
If you want to use yoshimi-0.060.10, beware that its jack-session implementation is broken. As a workaround, in gladish settings dialog, "JS delay" can be set to few seconds instead of the default 0. Two seconds should work in most cases. For more info, check http://ladish.org/ticket/187

More info on the ladish project
Homepage: http://ladish.org/

LADI Session Handler or simply ladish is a session management system for JACK applications on GNU/Linux. Its aim is to allow you to have many different audio programs running at once, to save their setup, close them down and then easily reload the setup at some other time. ladish doesn't deal with any kind of audio or MIDI data itself; it just runs programs, deals with saving/loading (arbitrary) data and connects JACK ports together. It can also be used to move entire sessions between computers, or post sessions on the Internet for download.

Project goals:

Tagged: #ladi #ladish #linuxaudio
Created: Mon Dec 19 19:59:39 +0200 2011
Last updated: 2012-02-17 13:59:00 EET
ladish roadmap update, mobilis in mobili

ladish initial roadmap was set more than two years ago and like it or not, some things have changed since then. The most important thing is JACK session that was released earlier this year. It gained some popularity and seems to be looked for, despite its drawbacks. So the the next ladish release will have JACK session and LASH support.These were originally planned for preview 5 (ladish-0.5) but are here already. The export/import feature was planned for preview 4 (ladish-0.4) but there seems to be little demand for it. The other feature that was planned for 0.5, libladish, is not forgotten and its goal is still valid - to provide the perfect session management API. Unfortunately JACK session introduction caused big disturbance in The Force that lowered expectations, promotes ignorance and attempts to reject the path of perfection. So libladish is moving forward to future perfect, maybe even post-1.0.

From now on the roadmap will not try to cover long term goals anymore, except for the 2.0 feature set (multihost sessions). The 0.5 milestone is removed and 0.4 is redefined. The next release will be ladish-0.4 (preview 4). Given that even in its current state ladish serves its main goals, the release after 0.4 may be 1.0.

After the 1.0 release I’ll switch to integer version numbering. To me this approach makes much sense for projects driven by a single man. 2.0 milestone will be renamed to “Distributed studio” to better reflect the availability expectations - when it’s ready. New releases will be rolled out when the codebase has enough important changes.

Tagged: #linuxaudio #ladi #ladish #software #jack
Created: Tue Oct 11 05:01:36 +0300 2011
jack-session or ladish? both!

I’m glad to announce the new ladish ability - to act as a jack session manager. If you want to try it out, you have to use latest git version of ladish and latest svn/git version of jack2. jack-session apps are supported in rooms/projects only. If you want to give feedback or have questions, use the #ladi IRC Channel on FreeNode IRC network and/or the ladish mailing list.

Tagged: #linuxaudio #ladi #ladish #software #jack
Created: Mon Oct 03 01:52:19 +0300 2011
LASH strikes back

I’m glad to announce that LASH support in ladish is now fully functional. Apps can be started at level “LASH” (the two others are L0 and L1). The LASH API/protocol provides three high-level commands - quit, save and restore. All three commands are implemented in ladish version of liblash, and ladishd (the ladish daemon) calls them when appropriate.

I’ve used D-Bus for IPC. The liblash implementation can be used standalone as well. Once the app initializes liblash, a D-Bus object is created. The object implements three methods that match the three commands mentioned above. During liblash initialization, a method call to ladishd is made to provide some parameters, of which only the process id (aka pid) is actually used by ladishd. The call does not wait for reply and does not care if it will succeed or not. Strictly speaking this initial registration call can be avoided by watching for new object registrations and querying the process id from the D-Bus bus daemon. I’ve chosen the manual registration approach because it was simpler to implement and because it does not have practical drawbacks.

Next step in supporting L2 protocols (LASH and jack-session) should be improved tracking of app save/restore and start/stop states. Intermediate states like “starting”, “stopping”, “registered”, “saving”, “saved”, “restoring” and “restored” app states will give useful visual feedback. Studios and projects also need to report “modified” state. They get modified when one changes connections and/or start/stop apps. Of course, apps need “modified” state as well but no existing session protocol allows apps to report whether their internal state is modified or not. It will be part of L3, hopefully before 2020.

If you want to try the LASH support, you have to use latest git version of ladish. If you find any issues - please report them.

Tagged: #linuxaudio #ladi #ladish #software #lash
Created: Thu Aug 04 04:46:00 +0300 2011
So Im Back From Seashore Because The Weather And

So I’m back from seashore because the weather and I’m going to dedicate rest of my vacation to Linux Audio software. The tempting goals are JACK MIDI support for QMidiArp, support for multiclient apps in ladish, jack-session support in jackdbus and ladish, and LASH support in ladish.

For JACK MIDI QMidiArp, close cooperation with Frank Kober is required but he is in summer mood. Implementing support for multiclient apps makes more sense after or along with adding jack-session support in ladish, because jack-session is designed to support multiclient apps. So I started implementing it, the org.jackaudio.SessionManager interface is now pushed to the js-dbus branch at repo.or.cz jack2 repo. Unfortunately it does not work, all methods fail at JACK API level. I suspect that the session manager API in jack2 is not implemented for in-process (server side) clients, like the one that jackdbus uses. This suspicion is yet to be proven though. Hopefully Stephane Letz will investigate whats going on soon. Until then, I’m thinking about what IPC mechanism would be best for communication between lash-enabled apps and ladish daemon. Original lash implementation used custom messages over sockets, but then 0.6 series switched to D-Bus. I was not really happy with D-Bus used for this because I didn’t and still don’t see any benefits. The old custom IPC code worked well. The situation for ladish is however different. I don’t have legacy IPC code and I cannot easily adapt the LASH one. So I have to either implement a custom IPC mechanism or use some ubiquitous one. And despite the myths flying around, there is only one that matches the requirements - D-Bus.

So it looks it is time for some D-Bus research. First I have to research how D-Bus will behave if there are two “clients”. Some time I’ve asked about this on IRC and the suggestion that I got is to use dedicated D-Bus connection in liblash. I’d like to prove this before implementing ladish`s liblash over D-Bus.

The other topic is async D-Bus calls. As it is now, all D-Bus calls in jackdbus and ladish are synchronous. This is problematic when the call can take long time to execute. For example with (some?) FireWire devices JACK server start can take several seconds. As it is now, the D-Bus loop of services are stalled. No other method calls are possible until the slow operation ends. When this happens UI apps that call methods in jackdbus or ladishd from their main threads are frozen and it is possible that method calls will timeout at client side. The issue will happen during jack-session save too, if some app takes long time to save, or even worse, fails to send reply to jack. It is less likely for jack-session that it is for LASH because jack-session reply has real info in it, as opposed to LASH “save done” reply that does not have any real info. Several LASH apps were (and maybe still are) buggy - they didn’t send the reply event. And then the even worse things happened, LASH became unusable. From what I known about jack-session is that it will freeze just like LASH did. Waiting for “save done” reply event that will never be received. But lets pray that I’m wrong and put this problem aside. The goal is to not block the D-Bus main loop of jackdbus and ladish services. The method call request actually defers execution to a background/worker thread. When the blocking call finishes, it sends the method call reply back, from the background/worker thread. The callers are not stalled as well, they just don’t wait for the reply but are notified when the method call is done. I’ve read on several blog-like and tutorial like places that this is supposed to work. I’d like to verify that such low-level D-Bus async approach actually works though. Alternative would be to implement async semantics over sync calls. Such approach however will prevent existence of clients that want to be simple and kind of stupid, by calling methods async-capable methods synchronously.

Tagged: #linuxaudio #ladi #ladish #software #jack #jackdbus #lash
Created: Thu Jul 21 22:15:00 +0300 2011
flattr

This night I received the revenue report from flattr for January. I was surprised to find that with flattr one can now make a real donation apart from the traditional flat rate micro-payments. And I even got a donation! The donation seems to be anonymous and no context is explicitly attached to it, but I assume it is for my contributions to the Linux Audio. So I would like to thank all of you that have made flattr micro-payments and especially the generous person that made the donation.

Tagged: #linuxaudio #ladi #ladish #software #flattr
Created: Thu Feb 10 18:30:29 +0200 2011
LADI Session Handler - Preview 3

After a year of development ladish-0.3 is out! The main feature that
this release implements is the hardware port virtualization. Studios
that manage JACK and the overall infrastructure of the setup now can
contain the so called rooms. The rooms provide a predefined set of
ports that are linked to the studio through a virtual JACK multicore
(aka snake). The “contents” of the rooms are the projects. As with
studios, projects manage apps and connections between them. However
projects are not bound to particular audio/midi hardware and JACK
setup because project apps are connected to the room-studio link ports
that are fixed. On the studio side, these room-studio link ports can
be connected to the actual hardware ports, to ports of apps that are
part of the studio or even to room-studio link ports of different
rooms. Yes, you can have more than one room in the studio! It is quite
possible that room usage will fall into one of these two categories:

Central and side rooms are interconnected in the studio. The studio
setup (JACK settings, connections between hardware and rooms) is
supposed to be almost static.

The new user visible features include:

ladish now can install the python bindings for liblash that are used
by some apps (jack_mixer, zynjacku). The ladish implementation of
liblash is still not functional, lashified apps will be told that lash
server is not available. The jack-session support is also not
implemented yet.

Thanks
In the past year lot of people helped the project, but some of them
played a major role:

Download
The tarballs are available at the usual location:

There are two tarballs. ladish-0.3-with-deps.tar.bz2 is 3.6 MiB and
bundles the major dependencies that are usually needed for running
ladish:

All of these are either development (git/svn) versions or release
versions that are patched to work better with ladish. The last released
versions of these dependencies are expected work with ladish. The most
serious “incompatibility” is that the jack2 mainline is missing the
no-self-connect changeset. This changeset adds option to jack that
allows prevention of jack apps self connection to “hardware” ports
(usually system:playback_N). As such self-connecting apps are not rare
at all, without it, the studio/room separation is not-effective and
the workflow can get very confusing.

If you are compiling the software by yourself, then you should
probably use this “fat” tarball.

The ladish-0.3.tar.bz2 tarball is 569 KiB and contains only ladish
itself. It is expected to be used mainly by packagers.

Known issues
There is one known jack2 bug that sometimes hits the ladish
workflows. If two instances of same app are started in parallel and
these apps don’t request unique jack client name but instead rely on
jack feature that autorenames clients, apps usually fail to start. The
bug has a ticket recorded in the jack bugtracker:

http://trac.jackaudio.org/ticket/193

More info on the ladish project

LADI Session Handler or simply ladish is a session management system
for JACK applications on GNU/Linux. Its aim is to allow you to have
many different audio programs running at once, to save their setup,
close them down and then easily reload the setup at some other
time. ladish doesn’t deal with any kind of audio or MIDI data itself;
it just runs programs, deals with saving/loading (arbitrary) data and
connects JACK ports together. It can also be used to move entire
sessions between computers, or post sessions on the Internet for
download. Check the project goals for more info.

Project goals:

Tagged: #ladi #ladish #linuxaudio
Created: Sun Jan 09 21:46:48 +0200 2011
ladish-0.3-rc20110102

I’ve created the ladish-0.3-rc20110102 release candidate tarball.
Download from from here:

http://ladish.org/download/
http://ladish.org/download/ladish-0.3-rc20110102.tar.bz2
http://ladish.org/download/ladish-0.3-rc20110102.tar.bz2.sig

There are two changes since ladish-0.3-rc20101231:
 * Improve the fix for #62 so that L1 apps with a2j ports
   are properly handled.
 * Implement a workaround for a jack2/jackdbus bug that happens from
   time to time. http://trac.jackaudio.org/ticket/209

The jack2/jackdbus bug, when hits, caused a project unload, studio
stop, app stop or app remove to never finish. It happened to me from
time to time, with yoshimi or ardour client box not leaving the gladish
canvas.

There are no pending tickets for 0.3 so with more luck this tarball
will be identical to the 0.3 release that will follow in few days.

Tagged: #ladi #ladish #linuxaudio
Created: Sun Jan 02 15:49:59 +0200 2011
ladish-0.3 (hopefully) final release candidate

I’ve created the ladish-0.3-rc20101231 release candidate tarball. The release
candidate tarball can be downloaded from from here:

http://ladish.org/download/
http://ladish.org/download/ladish-0.3-rc20101231.tar.bz2
http://ladish.org/download/ladish-0.3-rc20101231.tar.bz2.sig

There are no pending tickets for 0.3 so with more luck this tarball
will be identical to the 0.3 release that will follow in the first days
of year 2011.

Happy New Year!
Ein glückliches neues Jahr!
Bonne année!
С Новым Годом!
Честита Нова Година!

Tagged: #linuxaudio #ladi #ladish
Created: Fri Dec 31 20:21:57 +0200 2010
ladish news

Last night I fixed some ladish-0.3 issues. You can now safely start L1 aware apps in terminal or through shell scripts that create intermediate processes between ladish and the real jack app. This fix also renders the Debian/Ubuntu default shell (dash) usable for L1 apps (launched without terminal). The other two issues that I fixed are related to the liblash emulation library and its python bindings (ladish can be built to provide them both). The one should make jack-rack buildable against ladish liblash. The other one is actually the addition of the python bindings, it is not good idea to use pylash from lash-0.6.x with liblash from ladish, because liblash supports only the 0.5.x LASH API and this results in nasty messaged in jack_rack and zynjacku/lv2rack.

Now on the top of my TODO list is to teach ladish to recognize what process creates what alsa client. The ALSA library does not provide such feature so I plan to use some LD_PRELOAD magic. I’m yet to decide how the child process will announce the process <-> ALSA client association (D-Bus or unix pipes) and whether a2jmidid should maintain this information or only ladishd will care about this.

Lately Nikita Zlobin is working quite actively on the ladish codebase and hopefully I’ll be soon able to review the bunch of changes that he made as part of his “process adoption” work and decide whether they will get into 0.3 or process adoption functionality will be merged after the 0.3 release. He made some generally useful fixes that are already merged and I hope there will be more of them in the future :)

Filipe (KXStudio) has pointed me to a nice KXStudio 10.04.2 Review that features ladish. It is really inspiring to see people using your software :)

As last note, I’d like to share a nice ladish trick that I found today. If one starts bash (in terminal) as an app in ladish and starts a command-line tool like jack-smf-player, after the first start & manual connect, ladish will restore the connection(s) for the following invocations. So what I did is that I created a project in my basic room and stated bash in it. Then I started download of random .mid files from Internet through wget. The jack-smf-player midi output is connected to the playback midi port of the room and it in turn is connected to a sf2 player in the studio itself. The nice part is that the box that appears on canvas is always named like the bash app (custom name).

Tagged: #linuxaudio
Created: Mon Oct 25 00:34:32 +0300 2010
jack1 jackdbus and ladish

Recently I’ve been hit by a bug in jack2 and this motivated me to bring jack1 jackdbus to state useful for ladish setups. The result is in the dbus git branch in my jack1 git repo. I successfully loaded a project created on a jack2 studio in a room created in a jack2 studio. If you wonder why this is something that is worth to mention, here is the reason: The ALSA raw midi driver in jack1 creates its ports as part of the alsa_pcm client while audio ports are part of the system client. In jack2, both audio and midi ports are part of the system client. It is problematic to restore session saved on different hardware (in this case it is actually jack1 vs jack2) because connection endpoints are named differently. This is the problem the ladish rooms aim to solve. Room defines a fixed set of “hardware” ports. Because ports have fixed meaning that can be determined by the session manager, loading of projects always connect the ports. The room “hardware” ports are the one side of the JACK multi-core “cable” (aka “snake). The other side appears in the studio graph where they can be connected to the actual hardware ports. This approach also allows complex setups where there are multiple interconnected rooms. Here are two screenshots:

Tagged: #linuxaudio
Created: Sat Sep 11 18:41:00 +0300 2010
ladish-0.3 is much closer now

As some of you know, the main goal for the next release is to implement rooms and save/load of projects in rooms. Although this feature may get few tweaks here and there, I’m happy to announce that I consider it finished now.

The code in git has no known regressions against ladish-0.2. If you feel brave, you are welcome to try it.

I plan to release ladish-0.3 around New Year’s Eve (almost 4 months ahead). In the following months I’ll try to do the rest of the scheduled work.

The Discuss LADI mailing list has been quite silent recently but the IRC channel is quite the opposite. distrozapper, falxtx and nick87720z are especially active. distrozapper is testing ladish on regular basis. falxtx is working mainly on integration of LADI technologies into the KXStudio Linux distribution and he made some nice ladish-aware tools, especially klaudia and festige. nick87720z is working on a new ladish feature - the ability to adopt processes/programs that were started externally.

Some of you may have noticed that jack-1.9.6 was recently released. distrozapper reports problems on his machine. It works fine on mine though. More reports are needed, so please try jack-1.9.6 and report. The ladish git submodule for jack is currently set to contain jack-1.9.6 + no-self-connect stuff (the ladi branch). The jack repo also has a tag named ladi-1.9.5 . This tag contains all ladi-related fixes
against jack-1.9.5 (that are part of 1.9.6 too) plus the no-self-connect changeset.

Tagged: #linuxaudio
Created: Mon Sep 06 00:01:48 +0300 2010
Flattr? Hmmm...

Today a clever guy came to the #ladi IRC channel and told me about http://flattr.com/. Indeed Flattr looks like a good way to donate a fixed amount of money per month (the minimum is €2) to the world of things one likes.You click on icons that represent “things” and at the end of the month your fixed donation is split (equally) among things that you liked. These things can be anything, from software projects to blog entries, from video to photos and music. It looks like a good way to donate to small open source projects that are often lead by a single person. The world of Linux Audio is full of such projects and as a test, I’ve used some of the donations I’ve received in past to register myself. For good or bad this is needed: in order to register “things” that can get income, one has to give money as well.

I like the video that explains the Flattr and in general the site looks nice and is not too heavy. The absence of OpenID login was unexpected though and was somewhat annoying. Hey! It is 2010!

So I’ve registered ladish as a “thing” and looked for cool software that I use on regular basis and some Linux Audio software that I like. The only one I’ve found is the Jacker by Leonard Ritter (a.k.a paniq) - a JACK-MIDI sequencer with tracker interface. I’ll definitively like to split my donation into more parts if other Linux Audio software developers register their cool projects. To name a few: epichord, calf, yoshimi, phasex, ingen, dino and the non-things.

Tagged: #linuxaudio #flattr
Created: Fri Aug 13 02:22:00 +0300 2010
JACK over network

Today I’ve tried to create a working netjack setup over Internet. I was curious whether the netjack technology has reached a usable by general public state.

I’ve tried two tools that aim to simplify such setups: The Mike Cookson`s jack-netmanager-gtk-0.2.3.1 and and Torben Hohn`s netjackconnect-0.8.

The jack-netmanager-gtk suggested to install it and I did it in “~/opt/”, but it will be useful if it can be started without installing it. It presents a GUI dialog with options. Without much knowledge of netjack technology I was not sure what to do. I’ve got some information from the wiki page about netjack1 at jackaudio.org, but it was not enough. That wiki page does not give overview on how to setup the firewall, does not give overview of the communication channels and does not tells much about the (UDP) ports being used. I’ve been pointed by Torben to try his netjackconnect (aka njc). The use of njc requires registration on the http://hochstrom.endofinternet.org/ site and it does not even start if ran manually. Maybe this approach is intentional and is supposed to track and control netjack interactions over Internet, something I definitively don’t like. Global tracker is definitively a good thing, but only if it is optional and not forced.

A JACK Internet connectivity manager should present a dialog a choice of whether to connect to user supplied IP address or to use a tracker. List of such trackers should be configurable with the default one being hosted under jackaudio.org. All connectivity options should be negotiated directly between peers and not through a man-in-the-middle tracker site. Sending connectivity parameters to the tracker should be suggested but optional and should default to *privacy*.

The netjack1 documentation should contain an overview of the the interaction between involved software components. The network communication channel(s) should be explicitly described and the UDP firewall “puncturing” should be mentioned as well.

I’ve set up the netone (jack2) driver with alsa_out. The audio sent to to soundcard ports was chopped and it remained chopped even with high buffer sizes (big latencies). With big buffer size, I’ve tracked chops to “delay” lines in alsa_out output, but it was not obvious whether these lines are errors or part of normal output.

Tagged: #linuxaudio
Created: Sun Aug 08 00:52:33 +0300 2010
ladish rooms and other good news

This week I’m on vacation and hopefully will be able to improve ladish rooms so they can save and load projects. More and more people are attracted by LADI and this definitively increases my motivation to work on it. My plan to finish the mixes of songs that I’ve started the last year also increase my motivation. Some of the new community members have coding skills and hopefully soon someone will start contributing code. Still, even now a good number of users without coding skills have made great contributions on the wiki. Recently even a native english speaker, Cody Loyd, joined and he already edited the tutorial text, so it is hopefully a little clearer now or at least more proper English. The distro affair is going well too. KX Studio is improving a lot and Filipe (aka falktx) even has made some GUI frontends for jackdbus and ladishd. Mike Cookson is improving cooperation between his JACK Network Manager and ladish.

Tagged: #linuxaudio
Created: Wed Aug 04 15:31:43 +0300 2010

Valid XHTML 1.0 Strict Valid CSS! [Valid Atom 1.0]