rncbc / qtractor

Qtractor - An Audio/MIDI multi-track sequencer
https://qtractor.org
GNU General Public License v2.0
495 stars 86 forks source link

JACK session management with QjackCtl #366

Closed popapoe closed 1 year ago

popapoe commented 1 year ago

I have not been able to use Qtractor with the JACK session management provided by QjackCtl.

I did some digging around, and I found the lines that create the session save reply: https://github.com/rncbc/qtractor/blob/fad22124e782e9aa4cc417b5361aa52e80dd8d93/src/qtractorMainForm.cpp#L8237-L8250

On line 8247, the session path is surrounded with double quotes. QjackCtl eventually saves this into session.xml. It doesn't seem like it does any processing to the arguments, passing the quotes verbatim into Qtractor. (It appears to be run with QProcess::startDetached.)

Additionally, Qtractor writes a .qtr file into the JACK session directory that refers to the original directory. For me, the associated MIDI and audio files are linked under a different name, so Qtractor fails to find the correct files. I don't understand why a session file is not simply linked here.

rncbc commented 1 year ago

For me, the associated MIDI and audio files are linked under a different name, so Qtractor fails to find the correct files.

audio and MIDI files should be sym-linked from the JACK session's directory to the original file locations; symlink filenames might be different though and that's actually intentional for making them unique; it's exactly these symlink names that should be stored on the qtractor session file under the JACK session directory.

please look into the later and verify what is acttually wrong: is that the audio or MIDI symlinks filenames that are missing or wrong? is it the base session directory? does any of your JACK session directory or session filename has special characters or even a blank or space character (which might offend the qjackctl command line parsing on startDetached()?

I don't understand why a session file is not simply linked here.

because that's not how JACK session works?

BTW. as official as jackaudio.org, JACK session is being deprecated in favor to NSM,

popapoe commented 1 year ago

By the way, this was intended to be a request for help. If it sounded like a bug report, I got a bit carried away :sweat_smile:

I have this setup: Screenshot from 2022-10-17 08-57-36

The session directory is /home/test/Documents/stuff/qtractor/rick/. Inside, I have rick.qtr and rick.mp3. If I save the session into /home/test/Documents/stuff/jack-sessions/test-rick/, loading yields this error: Screenshot from 2022-10-17 08-48-24

Removing the quotes from the command (replacing "${SESSION_DIR}rick.qtr" with ${SESSION_DIR}rick.qtr) gets rid of this, but I get this warning instead: Screenshot from 2022-10-17 08-48-51

Looking into /home/test/Documents/stuff/jack-sessions/test-rick/Qtractor/, there are two files: rick.qtr and a link named rick-f457f296.mp3 that points to /home/test/Documents/stuff/qtractor/rick/rick.mp3. The only difference between this rick.qtr and /home/test/Documents/stuff/qtractor/rick/rick.qtr is that every reference (all relative to the session directory) to a file named rick.mp3 is replaced with a reference to a file named rick-f457f296.mp3.

Trying the following three things "fixed" this for me:

(By "fix", I only mean that QjackCtl is able to start Qtractor without any issues. I do not know how JACK sessions work.)

rncbc commented 1 year ago

you're probably totally right!

it seems like a qtractor bug alright (or al'wrong :)) and it also seems rooted on the double-quotes injection you were flagging all about...

sorry. I guess it's been broke for ages :( will have to investigate a little further but for the time being, consider it utterly broken, sorry.

ps. of course, keep (doing) whatever "fix" if it works ;)

popapoe commented 1 year ago

Alright, thanks! I do recognize that JACK Session has been deprecated for a while now. (I have tried to stay away from NSM due to the tension between the original author and the authors of the respective fork.)

Also, can I comment on how you commented within seconds of me checking this thread :eyes: