You are here

Qtractor DOES work with sidechain

Tutorial and Examples Proyects:

It's as simple as creating a bus with extras chanels.
These extra channels are occupied by the sidechain.
Then with inserts we route the signal to the sidechain.

We all thought it wasn't possible, but since version 9.35 inserts work more reliably... there is no problem creating these types of flows.


Image icon sidechain.png126.89 KB


Nice +1
Thanx for posting this !!

OK some additional information about this workflow :
I did experience with a 2 track setup ; a kick track ( audio ) which is triggering the sidechain compressor from a bassline audio track, so the bassline is having a ducking effect.
First create via Qtractors > view > buses a 3 or 4 channel audio buss type output.
In the connections window ( F8 ) connect the first 2 channels from this 4 track audio buss to the master-in, so we can later hear the ducked bassline.

Tracks setup in Qtractors mixer :
Track 1 : kick ( 2 channel track, with an insert ( "insert 1" ) in the mixer of this audio channel.
Track 2 : bassline ( 3 or 4 channel audio buss track, with an insert ( "insert 2" ) followed up with the sidechain compressor plugin in the mixer of this audio channel.
I did try both LSP sidechain compressor stereo and Calf sidechain compressor, which are 100% compatible.
Don't forget to activate the sidechain function in these plugins ; in lsp plugin > setup > chosse external & in the Calf plugin click the activate sidechain button.

Routing ( because of this specific insert effect setup, kick's send is pre qtractors mixer fader. ):
Open and activate the insert 1 plugin in the kick track > click sends > connect insert_1/out_1 with insert_2/in_3 and insert_1/out_2 with insert_2/in_4.
This sends the kick audio signal to channels 3 & 4 of the sidechain compressor plugin of the bassline track.
Settings sliders insert 1:
* send gain = kick volume to compessor sidechain channels 3 & 4
* dry gain = 1 ( signaal kick unaffected volume )
* wet gain = 0

On the bassline track : open and activate insert 2 plugin > click sends > connect insert_2/out_1 with insert_2/in_1 and insert_2/out_2 with insert_2/in_2.
Click the returns and check if insert_1/out_1 with insert_2/in_3, insert_1/out_2 with insert_2/in_4, insert_2/out_1 with insert_2/in_1 and insert_2/out_2 with insert_2/in_2 are connected.
Settings sliders insert 2:
* send gain = 1
* dry gain = 0 ( no original signal )
* wet gain = 1

Hoping this explanation is helpfull for some other qtractor users.
Maybe someone can add if this workflow also functions for a vocoder setup.... ;-)


I have improved the flow.

I want to clarify that the number of channels to add depends on each case, whether mono, stereo, or special demands of a specific plugin. I did not indicate it in the first post, and the example image that I attached with 3 channels can be confusing.

The thing is that the channels destined for sidechain shouldn't emit the audio of the track. By default, Qtractor attempts to output the track's audio on all channels. This allows you to combine mono and stereo clips into a single track in a functional and intuitive way. This is brilliant, but in this specific case it is not interesting.

Muting the channels that will function as sidechain feedback is achieved with the following plugin, at the beginning of the chain:

I am attaching a routed vocoder example. It is necessary to have Calf Vocoder and x42-mixtrix installed.

File attachments: 

Hi G3N-es,

Thank you for the example_vocoder_sidechain.gtz, fantastic !
I did load your file in my qtractor, with same behaviour I already had on my system.
Although the insert 1 on the Voz track was active and connected correctly ; the audio don't seem to pass through the insert 1 reaching insert 2.
I had to remove the insert 1 from the Voz track, and after then recreate a new insert ( and connect : insert_1/out_1 with insert_2/in_3 and insert_1/out_2 with insert_2/in_4 ) in the voz track.
Then the vocoder effect on track 2 was working 100% :-)
Ooh yes, I'm also on version 09.36, did also try it on the app-image with same results as written above.
Also did some testing with qjackctl dbus / jackdbus, but without succes.

There is definitively something going on with inserts thats weird, seems to relate in the order the way inserts are inserted in the tracks.
On my system qtractor changes inserts and - sometimes - existing connections between them.
I'm investigating this and will report back how to replicate this strange behaviour.
Takes some time to investigate...

Meanwhile can you load my Qtractor file ?? :
Is the bassline on track 2 on your system ducking at 4/4 rhythm from the kick on track 1 ?
Everytime after opening the project, on my system I have to first remove the insert1 on the kick track, then recreate a new insert on the kick track make the connections,
( insert_1/out_1 with insert_2/in_3 & insert_1/out_2 with insert_2/in_4 ) before its working ok.
If I don't take these steps there is no sidechaining.

Kind Regards, Luc.

The configuration you sent me does not work for me, but I think it is for other reasons.

It works for me like this:

1) All tracks involved must have the same bus as their output.

2) That bus must have the extra channels added to receive returns.

3) Do not touch the gain settings in the inserts, leave them all at 1 (Send, effect, no effect).

4) In the track that receives the sidechain, start the plugin chain with a plugin that allows you to mute the sidechain channels. (Mixer 'n' Trigger does the job well.)

Try this configuration, which I attach in the example.
If it doesn't work, maybe it's Jack's thing, I have no problem with PipeWire.

PipeWire today, in version 0.3.84, gives me better latency performance than Jack, with the advantages in added connections.

File attachments: 

Thank you,
Your modified RE-Sidechain-project.2.qtz 'did work', again after I did remove the insert on the kicktrack and then recreate a new insert and make the connections.
I did find find another solution, and thats to start a standalone Carla and insert it in between Qtractors insert1 out and insert2 in.
I guess it's related to that infamous issue, when connecting qtractor outputs directly to qtractor inputs, no signal is passed through the connection.
Would be welcome if Rui could integrate something in Qtractor, so that all can be done within Qtractor.
Don't know if its only Jack related ; I'm happy to hear you don't experience these issues I'm talking about on your PipeWire system !!

Did search Qtractors forum :

Over here the working Qtractor / Carla solution from Carl Irwin :

I think it's time to update to a PipeWire distro, any ideas ?

If the "inserts" always gave problems. I thought they had been fixed in the previous version of Qtractor (I'm talking to you about less than a month ago). But now that I come to terms, perhaps what solved it was that I also installed PipeWire less than a month ago.

On the other hand PipeWire has also caused a lot of problems before (at least that's what I read). But I decided to try this latest version and it's all good things.

UbuntuStudio works with PipeWire, but I haven't tried it. Apparently it does not come with the latest version of PipeWire.

Like you, I have MX (AVlinux). I installed it following this tutorial without problems. It is in Spanish, which is my language, (I don't know if it will be a problem), although the command lines are logically in English: default/

rncbc's picture

yes, the infamous zero-copy optimization on genuine jackd(bus) is prolly at stake here; pipewire-jack doesn't seem to have that thing so it is now possible to connect an insert-send directly to an insert-return without having it silent.

pd. and yes, PW is actually getting better and better by the day ;)

I have devised this sidechain workflow that avoids inserts, I only send to BUS.
Should work fine on Jack without PipeWire.

In case it's useful to you

File attachments: 

Sorry for late reacting, YES !!, your latest setup "ejm_sidechain_NO-INSERT.qtz" using only auxsends is working here ( on jack without pipewire installed ). In the kicktrack I had to switch the first plugin, the auxsend-bus from Master to SideCompressor. Then I did save the project, reload the project and sidechain'd bassline is ducked.

So nice to have this issue tackled, thank you so much for your help !
Kind Regards, Luc.

I think what was wrong was not the inserts, but the plugin I used as a channel switch.

I say this because I have returned to pure Jack.
The motives:

· PipeWare makes everything work, whatever the cost. And the cost translates into desynchronizations between tracks and inaccuracies in time changes.

- Personal ethical and philosophical reasons. It's not that there is anything unethical about PipeWire, but it opens doors for unethical intentions to manifest.

So weighing the pros and cons I'm left with Jack.
He is finicky to set up in some situations, but he gives you total freedom.
Freedom implies knowledge and responsibility, because without knowledge there is dependence. Jack fits more with my way of thinking.

And surprise, in pure Jack the inserts work well for me.

I'll give you the tutorial I created. It contains example sessions and I think they should work without problems for you.

FYI, I moved over to Pipewire myself recently and with the same system load, have occasionally seen screen tearing and strange audio dropouts. Certainly enough for me to believe Pipewire is not as stable as pure Jack. I'm even careful to use the same 1024/44100 setup I had when on pure jack.

So basically, I really don't think Pipewire is "ready" for Pro-audio use despite the fact everyone seems to be using it.

ubuntustudio is pretty good about this but as mentioned, 23.10 is shipping with pipewire 0.3.79. In order to upgrade...

sudo add-apt-repository ppa:pipewire-debian/pipewire-upstream
sudo apt update
sudo apt -y install pipewire

FYI, Pipewire defaults to a sample rate of 48000 so if, like me, you want 44100, you'll need to run the ubuntustudio-config-audio tool.

I did that and also set min quantum (what I used to call buffer in the pure jack days?) to 1024 but I've just learned Pipewire goes ahead and changes this dynamically. Imagine my surprise when I'd see Qtractor and Carla reporting 256 and other values at random times.... Basically, everything can be done in ~/.config/pipewire/pipewire.conf if/when you get tired of the ubuntustudio-audio-config wrapper. I'm thinking I may want to add an override to set default.clock.quantum = 1024 in order to prevent this dynamic behavior but haven't really made up my mind on that just yet.

Hi windowsrefund,

Since a few weeks running / testing pipewire on my fresh installed MXlinux 23.1.
When I put in terminal : pactl info | grep "Server Name" I see that I'm running pipewire version 1.0.0.
So far so good, although some things in Qtractor are different compared to Qjackctl setup.

I did follow the easy steps as written on the Debian Wiki to create and setup pipewire on my mxlinux.
Like you did mention, I also did change some settings ( sample frequency ) in the pipewire.conf file, which isn't difficult at all.
Rest of the pipewire.conf I didn't change ; did you use the ubuntustudio-config-audio tool do alter other pipewire settings ?

If someone is interested in the nessesairy steps to install pipewire on debian / mxlinux :
Manual for starters : see attachement, Kind Regards Luc.

That bass line has been very inspiring to me.
Can I use it for a project?

enjoy the bass line, I'm shocked if its inspirational, its just 1 measure :-)
create something nice out of it, happy to,hear the result. Mela Luc.

rncbc's picture

play it again

Once the song is finished, it is difficult to recognize the original line that inspired it.
Anyway here it is. :-)

File attachments: 

Hi G3N-es,
Although I only partly can understand the lyrics ( spanish ? ), I like this song !
It's about hope I think.. ??
The charactistic voice is beautifull and fits very nice in the mix of this song, mixed with plenty of high-end frequency's.
Are the spanish acoustical guitar and drums / percussion real audio recordings tracked in Qtractor ?

If my 1 measure snippit 'bassline' was some inspiration for this song, I think maybe the first 5 seconds I do recognize it.
I feel honored. Congratulations to you !
Thank you for sharing this over here on the forum.

_1 The lyrics
Maybe hope is not as positive as we are led to believe, is what the lyrics suggest. Hope is passive and immobilizing. Perhaps the positive thing is the longing > "anhelo", which implies an active action.

In Spanish hope > "esperanza" and wait >"espera" share the same root.


Lazos de esperanza que sin duda hay que soltar.
Esperanza es soga que te impode actuar.

Atado en la espera no hay acción.
Ni voluntad, anulada intención.
Rompo el lazo, no hay regalo aquí.

Pasos sin espera y sin dudas avanzar.
Esperanza solo es la orden para atar.

No me queda espera, si acción.
Mi voluntad cargada de intención.
Rompo el lazo, no hay regalo aquí.

Ties of hope that undoubtedly must be let go.
Hope is a rope that prevents you from acting.

Bound in waiting there is no action.
No will, no intention.
I break the tie, there is no gift here.

Steps without waiting and without doubts move forward.
Hope only is the order to bind.

I have no hope, but action.
My will loaded with intention.
I break the tie, there is no gift here.

_2 The Mix
Mixing and mastering is still difficult for me.
For example, here I thought I achieved an interesting final mix and master. With headphones and speakers it seemed that way. However, when taken to mobile devices it is a total disaster. XD
Everything is learning.

_3 Instruments
They are virtual. On other occasions I record real guitar (and I also use it to simulate a bass), and percussions. But no drum (I don't have one and it's not an instrument I control). Fortunately in Linux we have excellent virtuals drums.

Here has been used its virtuals instruments:
* General MIDI Synth-lv2
* Yoshimi Synth

Thank you for allowing this small collaboration for this exercise.

copyc4t's picture

If you describe what makes such a disaster, it could be fixed; two things that come to mind are:

  • Decorrelation when listening in mono; your digital piano is quite wide even on the lower frequencies, you could try narrowing the lower end with GStereo by GVST or any similar stereo imager.

  • Trouble in reproducing lower frequencies; if the low end sounds too weak, try adding some saturation in 2x/3x the frequency range of the bass notes, or use harmonic enhancers for the same purpose (Rakarrack Exciter, Steve Harris' Harmonic generator, CALF Exciter...).

I will investigate those solutions in the next project.
Thank you so much :-)

Today I did reload yesterdays sidechain project, and did notice faulty behaviour ( BUG ) ?
Qtractors internal insert connections aren't correctly saved or reloaded with a qtractor project, causing changed internal insert connections.
Only the kick channel is playing and the sidechained bassline channel audio can't be heard, due to changed connections.

Whats changed to the internal connections ? :
Insert 1 out sends audio signal to insert2-in 1 & 2 ( instead of to insert2-in 3 & 4 )
Insert 2 out 1 & 2 is connected with insert1 in 1 & 2 and with insert2 in 3 & 4 ( instead of insert 2 out 1 & 2 with insert 2 in 1 & 2 )
Disconnecting and again connecting correct insert connections doens't help ( no audio from sidechained bassline track ).

Solution :
* firstly, you have to REMOVE the insert from the kick track and create a new insert, then make connections insert 1 out 1&2 to insert 2 in 3&4 again.
* secondly, modify the connections from insert 2 : remove ( automatically made faulty ) connected insert2 out 1&2 with insert2 in 3&4, and connect insert2 out 1&2 with insert2 in 1&2.

Now you can still hear the bassline sidechaining by the kick.
But again, this setup can't be saved and reloaded correctly.

Would be nice if someone could dive into this strange behaviour and that this issue or bug could be fixed !!

My system : MXLinux 21.3 KDE with QJackCTL Debian 11.8 ( no pipewire )

I don't have this problem. I am using PipeWare but I don't think it has any influence, but I'm not sure either.

Could it be that you created it in 9.35 and are now editing it in 9.36? Try creating it again from scratch in your current version of Qtractor?

Add new comment