Learn how easy it is to sync an existing GitHub or Google Code repo to a SourceForge project! See Demo

Close

JACK on Windows with llcon

2011-06-24
2013-05-23
  • Peter L Jones
    Peter L Jones
    2011-06-24

    I was asked the other day about getting FLStudio (FruityLoops still, to many) working with NINJAM.  One way would have been using ReaRoute ASIO and ReaNINJAM hosted in Reaper, of course - but that would mean two DAWs running just to get jamming, when all you really want is a bit of virtual audio cabling.  JACK to the rescue, of course!

    Yes indeed, JACK on Windows is just as capable as JACK on Linux or OSX.  It makes use of PortAudio with ASIO support, so it's a great way to get multiple ASIO application linked up together.  Whilst having llcon support JACK on Windows natively would be nice, it makes little real difference when you need JackRouter to link with other ASIO applications anyway.  (OK, I'll go close that FR now - I just talked myself out of it! :))

    Anyway!  The point of this post is to explain how to get JACK and llcon client up and running, then how to connect one or more ASIO applications to your session.


    JACK - and this means jack2/jackdmp - lives here: http://www.grame.fr/~letz/jackdmp.html

    However, I'm recommending the latest test build for 1.9.8, which you can pick up from the newsgroup: http://comments.gmane.org/gmane.comp.audio.jackit/24153

    Upside: JackRouter built into the Setup.exe
    Downside: it's either "noisy" (lots of error/debugging messages) or takes over your MIDI I/O.  (It's a test release for changes to the WinMME support and has rather over-enthusiastic fail messages when it's not enabled.)

    I'll assume you've got 1.9.8 installed.  I run it from the Start menu with this command line:

    "C:\Program Files (x86)\Jack v1.9.8\jackd.exe" -X winmme -R -S -P91 -d portaudio -d"ASIO::ASIO Echo FireWire" -r48000 -p256
    
    • "-X winmme" lets it have the MIDI ports (otherwise this test version will complain noisily)

    • "-R -S -P91" set it up for real-time and stuff (I forget exactly…)

    • "-d portaudio" is pretty much the only thing to do on Windows…

    • and then you need to find your sound card listed to replace "ASIO::ASIO Echo FireWire".

    • "-r48000 -p256" are the sample rate and period size.  The period size affects how long you have to get compressed audio to the server and back without drop-outs.

    You get portaudio's idea of what sound cards you have by passing "-l" after "-d portaudio".  You want one starting ASIO::.

    Once you have that running, run QJackCtl ("Jack Control" on the start menu).  It should show your Audio and MIDI devices.  Go into set up (spanner icon), then the Display tab.  Down the bottom, make sure "Enable client/port aliases" is checked and in the dropdown select "First".  You may need to restart QJackCtl after that.

    OK, now we have JACK up, it's time for the llcon client.  Run it as usual but change the ASIO driver to "JackRouter".  In QJackCtl's Connections, you should then see llcon appear.  At this stage, it won't be connected to anything but don't worry.  Connect up to the llcon test server and you'll see the connections made automatically to your soundcard.  That's not quite where we want to end up but again,don't worry! :)

    Now you can run all that ASIO software you've got!  OK, let's not get carried away, one at a time now, please.

    I'll take connecting MU.LAB (32bit) and Reaper (64bit) as an example.

    1. Run MU.LAB (your first ASIO application).  It's quite likely going to complain something's stopping it access it's favourite soundcard.

    2. Go change the ASIO driver over to JackRouter.  Once you've done that, in QJackCtl you should see your app appear, automatically connecting up to your soundcard.  Hm.

    3. Time to fix some routing.  I want output from MU.LAB going to llcon, so I click MULAB on "output ports" and "llcon" on "input ports", then the "Connect" button.

    4. Next, I can drop audio input from the soundcard to llcon: click on "portaudio" on the "output ports" and "Disconnect".

    5. And I don't want MU.LAB also going to the soundcard: click on MULAB out, portaudio in and "Disconnect".  There, nice and tidy!
      I could leave it there… but

    6. I've decided I want to be able to capture the online session in Reaper.  So I run Reaper (x64) and switch it over to use JackRouter.

    7. It appears in QJackCtl, connecting to my soundcard.  Ah well!  I want it's output connected to my soundcard but I want to connect llcon's output to Reaper.  Do that first, then disconnect Reaper's input from portaudio.  Also disconnect llcon from portaudio.

    So there we are: soundcard In -> MULAB -> llcon -> Reaper -> soundcard Out

    And of course, MULAB and Reaper could be any two applications.  Or, if you're careful, the same one!  (You'd want to connect specific ports rather than entire applications doing that.)