Session Management
Moderators: MattKingUSA, khz
Session Management
So how do you musicians make music on linux? It's a bit annoying having to reroute connections every time I want to work on a music project (I don't have a dedicated box, unfortunately and need to use it for more than just music) and while jack sessions and qtractor helps a little bit it's still quite troublesome. There seems to be a wealth of session management ideologies out there (ladish, non-, carla/cadence) but I'm not sure which one is the most usable at the moment. I used to use ladish but it was quite buggy and didn't really restore very much.
Any ideas?
PS: KXStudio looks really cool and I definitely want to give it a try.
Any ideas?
PS: KXStudio looks really cool and I definitely want to give it a try.
Re: Session Management
Judging from others comments non-session seems to be recommended. Another approach is to use shell scripts to start programs and then aj-snapshot to restore all connections: http://aj-snapshot.sourceforge.net/
Re: Session Management
I'll be blunt, as they put me on a "word diet".
Right after I uninstall Pulse Audio, the next thing I do is uninstall any music software that can't speak directly to ALSA.
I will not deal with Jack configuration. If I want convolution, that means reverb -- not QJackCtl.
Right after I uninstall Pulse Audio, the next thing I do is uninstall any music software that can't speak directly to ALSA.
I will not deal with Jack configuration. If I want convolution, that means reverb -- not QJackCtl.
Author of BackupBand at https://sourceforge.net/projects/backupband/files/
My fans show their support by mentioning my name in their signature.
Re: Session Management
There's really nothing wrong with Jack, and it's impossible to do that sort of audio routing with alsa.
- autostatic
- Established Member
- Posts: 1994
- Joined: Wed Dec 09, 2009 5:26 pm
- Location: Beverwijk, The Netherlands
- Has thanked: 32 times
- Been thanked: 104 times
- Contact:
Re: Session Management
Shell scripter here. Just works best for me at the moment. But I reckon if you're very productive you're better off with a session manager. As long as I don't write several tunes a day I'll stick with shell scripts.
- bhilmers
- Established Member
- Posts: 229
- Joined: Mon Apr 23, 2012 11:44 pm
- Has thanked: 5 times
- Been thanked: 17 times
Re: Session Management
I have the best results from shell scripting and JACK's Patchbay, jointly.
- Launch the programs with a shell script
- Open the JACK connection manager and disconnect all
- Load/Activate your Patchbay file (.xml)
-
- Established Member
- Posts: 1350
- Joined: Fri Feb 24, 2012 7:40 pm
- Location: Portland, OR
- Been thanked: 2 times
- Contact:
Re: Session Management
I have the feeling that KXStudio and claudia is the way to go, but I still don't fully understand how to really use it best. I've dabbled. I'm patiently waiting for the full cadence release.
Re: Session Management
I've been starting my sessions with scripts, but this conversation got me interested in checking out some of the session managers. This is on Fedora 17 using the Planet CCRMA stuff.
Yesterday I messed around a bit with ladish (Fedora doesn't provide a package so I built it from source). This requires jackdbus which is provided by the "jack-audio-connection-kit-dbus" rpm, which isn't installed by default. Ladish works pretty good at saving and loading sessions but jackdbus has a serious problem in that it won't shut down. I just have to kill it by hand to get it to go away. I don't see any bug reports with Fedora about this, but it's probably not very widely used. I did see a bug report with Ubuntu that's been open since May.
After being discourage a bit by jackdbus I tried messing around with jack_session. I can't find much of any documentation. It's great when I stumble across an app that uses it.
This afternoon I spent some time with non-session-manager. So far it seems really cool. I like being able to use nsm-proxy as a wrapper for clients that don't support it. My only problem so far is that some clients don't behave nicely when it tells them to shut down. Renoise has been the biggest offender. It will launch and load a session, and I can save from Renoise and quit Renoise by itself, but when nsm tells it to quit it refuses and proceeds to lock up jack. Other than that I'm puzzled about how NSM preserves jack connections. I've tried experimenting a bit with "jackpatch" but wasn't very successful with it.
Yesterday I messed around a bit with ladish (Fedora doesn't provide a package so I built it from source). This requires jackdbus which is provided by the "jack-audio-connection-kit-dbus" rpm, which isn't installed by default. Ladish works pretty good at saving and loading sessions but jackdbus has a serious problem in that it won't shut down. I just have to kill it by hand to get it to go away. I don't see any bug reports with Fedora about this, but it's probably not very widely used. I did see a bug report with Ubuntu that's been open since May.
After being discourage a bit by jackdbus I tried messing around with jack_session. I can't find much of any documentation. It's great when I stumble across an app that uses it.
This afternoon I spent some time with non-session-manager. So far it seems really cool. I like being able to use nsm-proxy as a wrapper for clients that don't support it. My only problem so far is that some clients don't behave nicely when it tells them to shut down. Renoise has been the biggest offender. It will launch and load a session, and I can save from Renoise and quit Renoise by itself, but when nsm tells it to quit it refuses and proceeds to lock up jack. Other than that I'm puzzled about how NSM preserves jack connections. I've tried experimenting a bit with "jackpatch" but wasn't very successful with it.
Re: Session Management
Well in this case they both (stopping studio via gladish and stopping jack via qjackctl) do the same thing. Jackdbus never goes away, kill -9 from command line is the only way to get rid of it.falkTX wrote:I think this is a different matter. If you're using jackdbus, you must use tools that can handle it. qjackctl can do dbus mode, but very poorly.
when using (g)ladish in fedora, you should use its gui to stop/start jack as needed (is this case, "studios").
Re: Session Management
This isn't really the behavior I'm seeing.falkTX wrote:oh wait, if you're referring to the 'jackdbus' process then yes, it never goes away and that's the point.
jack can still be stopped, started, configured etc with it active (which is needed).
Do not confuse jackd with jackdbus. jackd only runs when jack is active, but jackdbus should always be present.
jackdbus is not the exact dbus version of jackd, they are completely different things.
So I created a test studio, started it and added a single application, hydrogen to it. Everything looks good. Then I try to stop it and I get all these log messages after which it's impossible to start another studio again until I forcibly kill jack and unload/reload ffado:
Code: Select all
Sat Oct 6 22:33:36 2012: Disconnecting 'Hydrogen:out_L' from 'firewire_pcm:0014866f9925a1a9_Unknown_out'
Sat Oct 6 22:33:36 2012: Disconnecting 'Hydrogen:out_R' from 'firewire_pcm:0014866f9925a1a9_Unknown0_out'
Sat Oct 6 22:34:26 2012: ERROR: JackPosixSemaphore::TimedWait err = Connection timed out
Sat Oct 6 22:34:26 2012: ERROR: JackFreewheelDriver::ProcessSync SuspendRefNum error
Sat Oct 6 22:34:26 2012: ERROR: JackAudioDriver::ProcessGraphSync: ProcessWriteSlaves error, engine may now behave abnormally!!
Sat Oct 6 22:34:26 2012: ERROR: JackProcessSync::LockedTimedWait error usec = 50000000 err = Connection timed out
Sat Oct 6 22:34:26 2012: ERROR: JackEngine::ClientDeactivate wait error ref = 6 name = Hydrogen
Sat Oct 6 22:34:26 2012: ERROR: JackServer::ClientKill ref = 6 cannot be removed from the graph !!
Sat Oct 6 22:34:26 2012: ERROR: Failed to find port 'Hydrogen:out_L' to destroy
Sat Oct 6 22:34:26 2012: ERROR: Failed to find port 'Hydrogen:out_R' to destroy
Sat Oct 6 22:34:26 2012: ERROR: Failed to find port 'Hydrogen:Track_1_Kick_L' to destroy
Sat Oct 6 22:34:26 2012: ERROR: Failed to find port 'Hydrogen:Track_1_Kick_R' to destroy
Sat Oct 6 22:34:26 2012: ERROR: Failed to find port 'Hydrogen:Track_2_Stick_L' to destroy
Sat Oct 6 22:34:26 2012: ERROR: Failed to find port 'Hydrogen:Track_2_Stick_R' to destroy
Sat Oct 6 22:34:26 2012: ERROR: Failed to find port 'Hydrogen:Track_3_Snare Jazz_L' to destroy
Sat Oct 6 22:34:26 2012: ERROR: Failed to find port 'Hydrogen:Track_3_Snare Jazz_R' to destroy
Sat Oct 6 22:34:26 2012: ERROR: Failed to find port 'Hydrogen:Track_4_Hand Clap_L' to destroy
Sat Oct 6 22:34:26 2012: ERROR: Failed to find port 'Hydrogen:Track_4_Hand Clap_R' to destroy
Sat Oct 6 22:34:26 2012: ERROR: Failed to find port 'Hydrogen:Track_5_Snare Rock_L' to destroy
Sat Oct 6 22:34:26 2012: ERROR: Failed to find port 'Hydrogen:Track_5_Snare Rock_R' to destroy
Sat Oct 6 22:34:26 2012: ERROR: Failed to find port 'Hydrogen:Track_6_Tom Low_L' to destroy
Sat Oct 6 22:34:26 2012: ERROR: Failed to find port 'Hydrogen:Track_6_Tom Low_R' to destroy
Sat Oct 6 22:34:26 2012: ERROR: Failed to find port 'Hydrogen:Track_7_Closed HH_L' to destroy
Sat Oct 6 22:34:26 2012: ERROR: Failed to find port 'Hydrogen:Track_7_Closed HH_R' to destroy
Sat Oct 6 22:34:26 2012: ERROR: Failed to find port 'Hydrogen:Track_8_Tom Mid_L' to destroy
Sat Oct 6 22:34:26 2012: ERROR: Failed to find port 'Hydrogen:Track_8_Tom Mid_R' to destroy
Sat Oct 6 22:34:26 2012: ERROR: Failed to find port 'Hydrogen:Track_9_Pedal HH_L' to destroy
Sat Oct 6 22:34:26 2012: ERROR: Failed to find port 'Hydrogen:Track_9_Pedal HH_R' to destroy
Sat Oct 6 22:34:26 2012: ERROR: Failed to find port 'Hydrogen:Track_10_Tom Hi_L' to destroy
Sat Oct 6 22:34:26 2012: ERROR: Failed to find port 'Hydrogen:Track_10_Tom Hi_R' to destroy
Sat Oct 6 22:34:26 2012: ERROR: Failed to find port 'Hydrogen:Track_11_Open HH_L' to destroy
Sat Oct 6 22:34:26 2012: ERROR: Failed to find port 'Hydrogen:Track_11_Open HH_R' to destroy
Sat Oct 6 22:34:26 2012: ERROR: Failed to find port 'Hydrogen:Track_12_Cowbell_L' to destroy
Sat Oct 6 22:34:26 2012: ERROR: Failed to find port 'Hydrogen:Track_12_Cowbell_R' to destroy
Sat Oct 6 22:34:26 2012: ERROR: Failed to find port 'Hydrogen:Track_13_Ride Jazz_L' to destroy
Sat Oct 6 22:34:26 2012: ERROR: Failed to find port 'Hydrogen:Track_13_Ride Jazz_R' to destroy
Sat Oct 6 22:34:26 2012: ERROR: Failed to find port 'Hydrogen:Track_14_Crash_L' to destroy
Sat Oct 6 22:34:26 2012: ERROR: Failed to find port 'Hydrogen:Track_14_Crash_R' to destroy
Sat Oct 6 22:34:26 2012: ERROR: Failed to find port 'Hydrogen:Track_15_Ride Rock_L' to destroy
Sat Oct 6 22:34:26 2012: ERROR: Failed to find port 'Hydrogen:Track_15_Ride Rock_R' to destroy
Sat Oct 6 22:34:26 2012: ERROR: Failed to find port 'Hydrogen:Track_16_Crash Jazz_L' to destroy
Sat Oct 6 22:34:26 2012: ERROR: Failed to find port 'Hydrogen:Track_16_Crash Jazz_R' to destroy
Sat Oct 6 22:34:36 2012: ERROR: JackProcessSync::LockedTimedWait error usec = 10000000 err = Connection timed out
Sat Oct 6 22:34:36 2012: ERROR: JackEngine::ClientCloseAux wait error ref = 6
Sat Oct 6 22:34:36 2012: Client 'Hydrogen' with PID 2230 is out
Sat Oct 6 22:34:36 2012: Stopping jack server...
Sat Oct 6 22:35:16 2012: ERROR: JackPosixSemaphore::TimedWait err = Connection timed out
Sat Oct 6 22:35:16 2012: ERROR: JackAudioDriver::ProcessGraphSync: SuspendRefNum error, engine may now behave abnormally!!
Sat Oct 6 22:35:16 2012: ERROR: JackFFADODriver::ffado_driver_wait - unhandled xrun
Sat Oct 6 22:35:16 2012: ERROR: firewire ERR: wait status < 0! (= -1)
Sat Oct 6 22:35:16 2012: ERROR: JackAudioDriver::ProcessSync: read error, stopping...
Sat Oct 6 22:35:26 2012: ERROR: JackProcessSync::LockedTimedWait error usec = 50000000 err = Connection timed out
Sat Oct 6 22:35:26 2012: ERROR: JackEngine::ClientDeactivate wait error ref = 2 name = dbusapi
Sat Oct 6 22:35:26 2012: ERROR: failed to deactivate dbusapi jack client. error is -1
Sat Oct 6 22:35:26 2012: Client 'firewire_pcm' with PID 0 is out
Sat Oct 6 22:35:26 2012: Client 'PulseAudio JACK Sink' with PID 1840 is out
Sat Oct 6 22:35:26 2012: Client 'PulseAudio JACK Source' with PID 1840 is out
Sat Oct 6 22:35:26 2012: Client 'a2j' with PID 2069 is out
Sat Oct 6 22:35:36 2012: ERROR: JackProcessSync::LockedTimedWait error usec = 10000000 err = Connection timed out
Sat Oct 6 22:35:36 2012: ERROR: JackEngine::ClientCloseAux wait error ref = 2
Re: Session Management
Renoise might not handle the SIGTERM signal right on quit.SR wrote: This afternoon I spent some time with non-session-manager. So far it seems really cool. I like being able to use nsm-proxy as a wrapper for clients that don't support it. My only problem so far is that some clients don't behave nicely when it tells them to shut down. Renoise has been the biggest offender. It will launch and load a session, and I can save from Renoise and quit Renoise by itself, but when nsm tells it to quit it refuses and proceeds to lock up jack. Other than that I'm puzzled about how NSM preserves jack connections. I've tried experimenting a bit with "jackpatch" but wasn't very successful with it.
For jackpatch, just add the client to your session and when you hit save or close, the connections you made in the session will be saved. Nothing difficult about it as a user.
edit: Pianoteq has the same bug, it has been reported an will be fixed.
Re: Session Management
Ok, all this choice is.. overwhelming.
The shell script might be the way to go but I wonder if there's some way of automating generation of such a shell script? Because of course during the session I might add new apps and connections as I need them and I won't necessarily know the names of all the ports beforehand.
Any tips for shell scripting with jack_connect (is that what you do)?
What about jack session? Does anyone use that?
The shell script might be the way to go but I wonder if there's some way of automating generation of such a shell script? Because of course during the session I might add new apps and connections as I need them and I won't necessarily know the names of all the ports beforehand.
Any tips for shell scripting with jack_connect (is that what you do)?
What about jack session? Does anyone use that?
Re: Session Management
I said this before, but I think the easiest way to work with shell scripts is to start all the applications you want and then use aj-snapshot to save/restore all connections. Let aj-snapshot worry about all the connection names. The first time you have to start applications manually and make connections manually (with QJackCtl or whatever you prefer) then save all connections with aj-snapshot (which saves the list of connections to a file). Then make a script with starts all the applications and runs aj-snapshot using the file of saved connections. The only tricky part is sometimes you need to add sleep commands to wait a little while to make sure the applications have started so their connections are available.
Re: Session Management
Ladish was really promising but when I last used it hardly any apps were above compliance level 1, how is ladish support nowadays?falkTX wrote:This is one of the reasons I love ladish.
When you make connections and some app quits, ladish remembers that connection and auto-restores it when such app appears again.