Jack on Windows

There’s something to be said for making connections in hardware studios: if you’ve got the cables, you can make it happen. In the world of the computer, it’s another story. The vision of Jack is to make routing audio between software as flexible. As the creators put it:

Have you ever wanted to take the audio output of one piece of software and send it to another? How about taking the output of that same program and send it to two others, then record the result in the first program? If so, JACK may be what you’ve been looking for.

Previously, Jack lived primarily on Linux and Mac. But Stéphane Letz’s brilliant jackdmp implementation, which fully supports multiple processors (among other things), is now available on Windows, via Stéphane’s hard work. Even the Qjackctl graphical front end gets a port, thanks to Rui Nuno Capela. With all three platforms supported, it’ll be interesting to see what’s next — perhaps more development of netjack, the over-the-network rendition of the idea.

I think it’s also worth mentioning, after all Microsoft’s puffery about “innovation” for musicians in Vista, here’s something genuinely innovative and practically useful for XP and Vista alike. That’s not just to take a slam at Microsoft, either. I hope that these larger companies (all of them) will start to take notice of the value of some of these independent efforts of developers for the larger good. (Developers! Developers! Developers!) For OS development, it means better document your APIs. Be public about changes, earlier and wider. And install these tools, use, and test them.

jackdmp project, background, and details, for all three platforms

  • Kyran

    Does it doe midi too?

  • emmett

    has anyone heard anything about wormhole (audio routing software, multi-processor networking, etc.) recently? last i heard, it was up for sale along with rax but there was no mention of it in the article yesterday….

  • http://www.createdigitalmusic.com Peter Kirn

    Emmett, I can't speak to Wormhole, no. I'll let you know if I hear anything. I think the absence of information means it's safe to say there's been no official announcement, as I chat regularly with the plasq guys.

    The implementation is a little different, but netjack does do routing over a network.

    @Kyran: MIDI, no. On Windows, you can use MIDI-Yoke. On Mac, IAC does the trick (built in, turned on via Audio MIDI Setup.)

  • http://www.asciinoid.net Liam

    It's not an instant out-of-the-box solution though, is it? You need to build the Qjackctl application natively within Windows, presumably linking to the jackdmp libraries, otherwise you don't get the nice Jack GUI…

  • http://www.createdigitalmusic.com Peter Kirn

    Well, this may not be newbie-friendly just yet, but they have gotten as far as pre-compiled binaries, ready to go. If you can deal with code, there are CVS and SVN links. But QJackctl and jackdmp are now both available as compiled, not just source code.

    Erm, translation: you don't have to build anything if you don't want to. And this is already enormous progress.

  • http://www.paulsop.com Doktorfuture

    The Jack interface needs to be improved.

    It doesn't seem to make a lot of sense to me. Sometimes it works, sometimes it stops (for no reason I can tell). It doesn't update state in real time. Debug messages are for programmers and not users.

    Could someone write a real good looking gui (like a real patch bay) for Jack?

  • Kyran

    I know about midi yoke, but it'd just be fine to have it bundled all in one app ofcourse.

    And looking at the version numbers (ie 0.6, the essential point being the zero), it's still in beta phase. So it might crash, and the gui is most likely not finished etc.

    My experience with FOSS stuff is that users often don't understand that they're using a work in progress (and devs sometimes don't know a stable release every now and then keeps their audience happy)

    Anyway, it's great to see jack coming to windows and this is one hell of a step in the right direction

  • Adrian Anders

    On a side note, I've been using LoopBe1 as my virtual MIDI driver and it works great!

    http://www.nerds.de/en/loopbe1.html

    I found it to be alot easier to use than some of the other Windows options out there. The single port version is free, and the 30 multi-port version is only $20!

    Check it out guys, I think it's the best internal MIDI option for Windows.

  • http://www.milezero.org Thomas

    Does any software on Windows actually use this yet?

  • carmen

    im fairly certain it offers ASIO devices, so apps that support ASIO can hook into jack without being modified (thus the proprietary software in above screenshot)

  • disturb

    It took me less thann 10 minutes to stream some audio from EnergyXT into Live6, and finally into Bidule, pretty amazing !

    I don't seem to be able to access any midi port though, and i haven't figured out how to sync everything…

    Anyone knows more about this ? Is it implemented yet ?

    cheers

    PS: i'm running WindowsXP by the way

  • sletz

    There is indeed a "JackRouter" Jack/ASIO bridge that allow ASIO aware applications to access the jack server. ASIO "jackified" applications appear with their names. JackRouter is part of the binaries components included in jackdmp package. To install it, use "regsvr32 JackRouter.dll" in a terminal (use regsvr32 /u JackRouter.dll to uninstall).

  • http://www.milezero.org Thomas

    Well that's good then.

    I thought ASIO wasn't something that could be used in GPL'd projects, because of something with its license agreement?

  • http://www.karhumusic.org karhu

    @Kyran: The current jack version for *nix

    supports (experimental) midi; but jackdmp is some sort of a rewrite of the original jack. I guess, the main-reason that midi wasn't built into jack from the beginning is that ALSA (linux audio architecture) supports easily virtual midi-devices and that the controller application for jack – namely qjackctl (which pretty much everybody uses) allows to use these virtual midi devices to route midi "transparently" to different applications.

    On a side note, there is also jack_net which supports streaming jack-audio-connections on the network bewteen apps on different computers.

  • http://www.karhumusic.org karhu

    d'uh.. didnt see that netjack was already mentioned.

  • http://jackit.sf.net/ Paul Davis

    Some clarifications (since I am the original author of the JACK API and jackd):

    jackd was the first implementation of the JACK API and server. it is written in C and continues to this day to be the "reference" implementation. jackd runs on Linux and OS X, but has not been ported to windows.

    stephane's jackdmp is an alternative implementation of the same API and a drop-in replacement server. it is written in C++, and will likely become the future reference implementation of JACK at some point. jackdmp runs on Linux, OS X and Windows.

    MIDI handling was added first to jackd because there are/were more people using it than using jackdmp. Patches to add the same support exist for jackdmp and they will be integrated into jackdmp sooner rather than later. in general, jackdmp tracks changes to the JACK API very closely, lagging by a few days or weeks.

    JACK's MIDI support is sample accurate, just like its audio support. It is quite a lot harder to integrate JACK MIDI with existing APIs because most of them are not sample accurate in the same way and simply don't have the same basic concepts.

    in addition, JACK also features a sample accurate transport mechanism that allows all JACK-aware clients to share transport control, tempo/meter information and so forth. Even more than MIDI, this is hard to expose to applications that do not use JACK explicitly, because the APIs provided by Apple and Windows do not offer anything equivalent. This is not true for audio, where CoreAudio and ASIO (not from MS, but Steinberg) are similar enough to what JACK does (JACK attempted to learn from them both) that we can map between them rather easily. There is nothing that we are aware of in the APIs used by most programmers on OS X or Windows, for examples, which can be used to notify an application that "the transport has started".

  • http://jackit.sf.net/ Paul Davis

    Doktorfuture: there are already alternative patching systems for JACK, such as patchage:

    http://wiki.drobilla.net/Patchage

    Some linux users even use command line tools for patching because they can be scripted and thus used to recreate very complex setups rapidly and using program logic along the way.

    However, there is no agreement among many users (and developers) on what an ideal patching app should look like, or how it should function. This is fortunate, since these apps are NOT jack itself, but just GUI front ends to control it.

    Anyone can write a new GUI front end, and if its good, it will spread. For example, Ardour, the Linux/OSX open source DAW that uses JACK has recently added its own JACK control dialog. That dialog has no patching functionality at all, and reorganizes the setup menus/options setting compared to QJackctl.

    One reason why QJackctl looks the way it does is that most Linux developers (where JACK is most heavily used) tend to favor function over chrome, even though many of us like chrome too. QJC is certainly not a particular sexy application, but it works very well and is quick and easy to learn.

  • disturb

    Thanks for the heads up Paul !

    I really hope the transport functionality will be doable on windows, ethough that seems tricky.

    Looking forward to the midi implementation too, can't wait to retire midi yoke….

  • Dan Nigrin

    Doktorfuture РI'm Dan Nigrin, one of the people involved with the Jack OS X work. In 2006, Evan Olcott, mastermind over at Audiofile Engineering, began working with St̩phane Letz and I to come up with a better UI and overall "packaging" of Jack on OS X, as we all agreed that it could be enhanced, to make it more understandable and easy to use.

    Much to my dismay – that work never got finished; Ev had other priorities, and we had some overall design obstacles that we never resolved. But for a glimpse of where we were going, take a look here:

    http://www.jackosx.com/prototype.html

    An enterprising developer I'm sure could help us to finish this work, as well as port it at least in part to Windows and Linux…

    Dan

  • http://jackit.sf.net/ Paul Davis

    dan, the other problem with graphical patchers is that they work very well in situations involving a few "nodes" each of which has only a few ports. they work very,very much less well when you have either a lot of nodes and/or some of the nodes have a lot of ports. Imagine Ardour in use with 1 or more RME HDSP cards.

    that said, the prototype patcher does look *very* pretty :)

  • http://www.batuhanbozkurt.com Batuhan Bozkurt

    Well I use jackd with qjackctl in linux but since I have a dual boot machine(with windows) I gave it a shot in windows.

    Following the readmes and by registering JackRouter.dll I got it running, tried a simple setup getting the audio from Max/MSP to Cubase worked very well. It feels prety stable too.

    Sometimes I really have to use windows and need audio routing between ASIO applications badly. So this will come VERY handy in windows.

    I have a Core2Duo CPU. Is switching to jackdmp instead of jackd a good idea in Linux? I'm very happy with jackd though, just curiosity let's say…

    Anyways, this is great news…

  • Dan Nigrin

    Paul, yes, this was one of the "design obstacles" I referred to in my post. The design has to scale well enough to accomodate situations you describe, and as seen in the screenshot for Patchage you supplied.

    But it also has to be not so overwhelming that the casual user won't be able to say, connect iTunes to their audio recorder of choice.

    We're in sync on this one I think.

  • http://www.paulsop.com Doktorfuture

    Paul Davis: Thanks for the info. I'm familiar with Patchage — I like it more. Thanks for reminding me that the Jack API and patcher can be separated. I had forgotten that.

    Dan Nigrin: I have some ideas for a visual patch system. If you have time, can I hire you to finish the visual Jack patcher project on OS X incorporating some of my ideas? It would be very useful. Results can be open-source or whatever you like. I just want a good solution at the Jack level vs. the MAX/MSP level I've got right now.

  • http://www.defectiverecords.com Dan Nigrin

    Doktorfuture: Unfortunately my Objective-C skills are not good enough to finish that work (yet) – that was all Ev Olcott's work… But still happy to hear your ideas….

  • matt k

    A friend of mine recently told me that Midi-Yoke wasn't going to be available for Vista. Does anyone know if this is true and if so, why?

  • chan

    Using linux jackd with fst, and dssi-vsthost on misc distro linux, the newest jackd version doesn't allow vsts to load, reverting back to 1.02 versions works fine, but invokes dependancy issues with apps wanting 1.03 vrsions of jack…(wineasio works fine with either jackd). I realize this is low-priority, but fst wrapping vsts is more fun than wineasio with Reaper, energyXT2 and Cantabile, for low overheaad audio.) Thanx for jackd, it's the greatest thing in linux!

  • Pingback: digital lofi » Jacking Windows: Internally routing audio and MIDI in Windows

  • http://www.myspace.com/ohtravioso Oh Travioso

    So I've downloaded jackdmp, and I've got qjackctl. I'm on XP, and I want to take the output of some different software programs and send them to one universal input in Ableton Live. I don't know how to set that up. How do I tell Qjackctl to use some software program as an audio output and Ableton as the input?

  • http://www.grame.fr/~letz/jackdmp.html sletz

    Programs can access the jack server by using the "JackRouter" ASIO/Jack bridge. This has to be done in each program and not in Qjackctl.

    1) Follow the Readme files in order to properly register JackRouter driver to become an ASIO driver available for applications.

    2) Launch jack server with Qjackctl

    3) Launch a first application and select "JackRouter" as the ASIO driver to be used

    4) Launch a secons application and select "JackRouter" as the ASIO driver to be used

    5) Applications now should appear in Qjackctl connection manager (note that some will appear only when they are *actively* playing audio…)

    6) Connect the first application output to second application input

  • http://www.myspace.com/ohtravioso Oh Travioso

    Hmm…ok. Now, if I'm using Gearbox 3.0 by Line 6, which only works with their hardware and their ASIO driver, how can I "Jack" that audio and merge it into one Jack input stream to be recorded into Ableton Live?

    I use a live looping setup, and I find that if I improvise what I'm creating, I end up changing the inputs of several Ableton tracks. I'd rather have everything that I might want to loop merging into one input so I can just record and keep the momentum going without having to think about the track settings on stage.

  • http://www.myspace.com/ohtravioso Oh Travioso

    Alright. Alright. I'm getting closer. I've setup my Line 6 Guitarport to be my Jack audio interface using the command jackdmp -R -S -d portaudio -d "ASIO Guitarport"

    In Qjackctl, I've connected everything that makes noise into input 1 in Ableton Live. I get audio into Ableton on that input and I can record. I'm even getting audio out of the system!

    My problem is that in order to use Reason, I've started it before Ableton so that it won't run in ReWire mode. I then select the JackRouter as the Reason interface. Then I start Ableton which says Reason has already started, and therefore, I can't run it in ReWire slave mode. That way, I get audio on the same input as everything else, but Reason won't sync with Ableton. So their tempos are off, which I can manually change. But if I start a drum loop, it's not in sync with what's going on in Ableton because their start points are not in sync.

    I could use an external midi clock I suppose, but that seems to be a bit much. Any ideas on how to get Reason to sync with Ableton all in sofware while sending it's output to the JackRouter?

  • http://www.grame.fr/~letz/jackdmp.html sletz

    >Alright. Alright. I’m getting closer. I’ve setup my Line 6 Guitarport to >be my Jack audio interface using the command jackdmp -R -S -d >portaudio -d “ASIO Guitarport”

    Right. At some point setting the ASIO card will be possible in Qjackctl itself, but right now it has to be done "by hand".

    >I could use an external midi clock I suppose, but that seems to be a >bit much. Any ideas on how to get Reason to sync with Ableton all in >sofware while sending it’s output to the JackRouter?

    Jack server has a transport sync mechanism (see Paul Davis comment before) but it cannot be used unless the applications use the jack API directly. I don't see a simple way to do what you need in the current state… ))-:

  • http://www.myspace.com/ohtravioso Oh Travioso

    Paul Davis says there's no API that will tell an application that the transport has started, but the ReWire protocol does just that. I don't know much about how developers integrate ReWire into their products technically, but it seems like someone could make a mini reWire host that receives audio information and sends and receives midi information that could use jackrouter as its output. Almost like you were running Reason and Ableton as two ReWire slaves to some audio/midi midway.

    Is there any way to send out MIDI master clock information from Ableton? Or maybe some software program that can run as a MIDI master clock? So I can sync Ableton and Reason to it?

  • Dan Nigrin

    Nice hack!

    Hijack ReWire for it's MIDI transport info – a ReWire Jack bridge, but just for MIDI… Might work!

  • Dan Nigrin

    Of course, now that I think about it a bit more, it's not going to be that useful after all, perhaps only to address the problem you're currently having…

    If we would build a Rewire to Jack bridge just for MIDI, then the only apps that could take advantage of it are ReWire'd apps in the first place, so why not just use ReWire altogether for both audio and MIDI… No need for Jack at all in those setups.

  • http://www.myspace.com/ohtravioso Oh Travioso

    ReWire works really well for what it does. I find there's probably only a handful of people that have my problem. They need to be live loopers using Ableton Live. They need to doing more than just recording the input on an interface. They need to be looping sounds coming from various pieces of software. And, they have to be improvising and performing in order to want the flexibility of playing anything without changing the inputs to the tracks.

    Not a big market for that kind of product. The only advantage I can think of for doing something like this is to merge all your audio outputs into one input and still have everything be in sync.

    It would be really useful for song sketches. You would never have to stop making music to change some setting. Just keep hitting record.

    This is mirroring the setup of having a hardware looper and a lot of gear actually. Instead of having an echoplex, you have Abelton Live with a foot controller. Instead of a bunch of instruments on stage, you have a laptop and a midi controller running a bunch of different software. And instead of a mixer merging everything into one stereo signal to be sent to your looper, you have jackdmp running everything into a single stereo or mono input.

    And of course, if you have a drum machine that you're looping with, the Echoplex will work with MIDI clock to get the right tempo.

    Now, if you look at it that way, there's many more loopers out there. But there's no way to do it all within software. Not that I've found yet.

    What would almost be ideal would be a Jack/ReWire hybrid. A Jack style host that supports ReWire and takes the ReWire audio input but will also take the input of any app running JackRouter just as it does now. Then, in this little host app, you have your patchbay where you can use programs that are running jackrouter and programs using rewire all together. Send the outputs wherever you want, and any tempo/transport messages will just be passed through the host to all the slaves.

    Since ReWire is a known protocol and has been adopted by many different software programs. Why not leverage its ubiquitousness into something more flexible?

    Did I sell you Mr. Nigrin?

  • http://www.grame.fr/~letz/jackdmp.html sletz

    I think one of the problem if getting the ReWire SDK. From the Propellerhead page:

    Propellerhead Software will issue licenses to companies in the audio or music industry interested in creating commercial ReWire applications.

    There are no costs involved. Propellerhead Software will administer the authorization, copyrights, logos and trademarks. The company will also provide the licensee with technical support, free of charge.

    Due to the legal aspects of the agreement you need to have a proper, registered company in order to qualify as a ReWire developer. We do not allow private persons, schools or companies in other types of businesses to become licensors.

  • Pingback: markkilborn.com » Blog Archive » JACK for Windows. Ohhhh yeah…

  • Dan Nigrin

    Oh Travioso — yes small market, but cool nonetheless… Maybe we'll take a look, but no promises though!

  • http://www.myspace.com/ohtravioso Oh Travioso

    Actually, you wouldn't even need to integrate Jack into the app for it to be functional. Just make a mini ReWire host that doesn't do anything except pass through tempo and transport data and take the audio output of its ReWire slaves. Then, Jack can take the output of that application and send it back to the ReWire slaves that can still accept input.

  • http://jackit.sf.net/ Paul Davis

    Oh Travioso: Propellerheads have *refused* to release the SDK to me, even though I have a registered business name in the state of Pennsylvania. They told me that they do not consider me to be a serious commercial software developer.

    I'm with Dan on this: if people are using ReWire-capable applications, I see little point in adding JACK into that setup. It gets more complex for them, and they don't really gain anything as a result.

  • Pingback: telstar falls » Jack for Windoze!

  • Grant Nestor

    To respond to Oh Travioso's idea of a ReWire > JACK bridge, I think that ReWire users definitely have something to gain. JACK offers much more than ReWire: it's more flexible in regards to patch configurations, it doesn't "require" client apps to adhere to its API (not confined to a set of apps), and it's open-source. The majority of digital music is created using these ReWire-enabled applications…so it's important to get them working with JACK. It seems that the ReWire API could offer access to these apps' tempo and transport data (and MIDI). If I'm not mistaken, I believe that the VST API could too. I believe that VST/AU strategy was used for JACK OSX. In either case, I am fully behind the future development of JACK (jackdmp) for Windows and Mac OSX…meaning I will fund the effort, to see 1) JACK acquire full MIDI and control (tempo, transport) support with ReWire-enabled apps on Windows and Mac, 2) Improve it's UI to cater a more general audience, and 3) Reintegrate netJack with the standard JACK distribution. By the way, I've got a copy of the ReWire SDK and the VST SDK is freely available.

  • Fabian

    In the last few days, I had *excactly* the idea of Oh Travioso: A Rewire-to-Jack bridge, just a small prog being the master of a rewire slave to enable those progs. can't be much of code. I saw the same licensing problems, as getting hands of the sdk is the first barrier (however Grand Nestor managed to do this, I'd also like to take a look on it).

    I'd use it for live-jamming with several computers & apps. Namely Ableton Live on one computer with Reason and on another PC FL Studio (and maybe some other weird stuff). Rewire just can't do the network thingie and this is where the strengths of netjack are (in addition of Jack's possibilities to route audio in ALL ways, not just from slave to master).

    We could then use a common mixing app which lets everyone get his own headphone mix out + a main mix.

    I first thought of network-enabling a virtual rewire-slave + a virtual receiving rewire host on the other side (FX Teleport 2 promised to gain that possibility, but the project died). Or extending Wormhole 2 for a standalone version which can host a plugin (as FL can be run as VSTi and at the moment we are doing excactly that with FX Teleport, but there are several buggy things with that one). But why reinventing the wheel?

    So the Rewire-Minihost-Jack-Bridge would really be a wonderful solution as long as those commercial apps out there don't support Jack natively (and I don't expect one copmpany to jump out and say: "Let's put in effort and pay a programmer to support that partially well working Jack thing even when it will be a bit complicated to setup for computer-unskilled musicians and even if there are no other apps out there supporting it").

  • Pingback: jack of qjackctl - homerecording.be forum

  • akram

    Hi guys its akram searching for help i m not sure where is the problem i download jack audio Jack_v1.9.8_32 for my windows vista operating system purpose of sound routing from Traktor 3 with abelton 8 also i have Novation nio 2|4 ASIO sound card i do 1st i start jack portaudio server then jack control everything work good my problem is i only getting two output (system)Playback_1 Playback_2. i should get 4 output anyone have idea what i make mistake? please help..thank-x
    akram2kbd@gmail.com