Combining Jack and SoundFlower on Mac Lion OSX

This blog was last updated: 2011-12-14 2012-02-02

Update: The problem of achieving proper and error free use of SoundPimp together with Jack osx and optionally SoundFlower/SoundFlowerBed has been solved. A new version of SoundPimp will be available within the short timeframe (days), and this post will also be updated accordingly. To keep yourself updated, simply register for newsletters on the SoundPimp frontpage, or remember to visit us again in a few days. Thanks for your patience. Here is the original text from December last year:

SoundPimp works well on Mac OSX when combining the use of SoundFlower and HiJack Pro, however there is a cost element involved with the latter. This means we are currently attempting to establish a solution based on the combination of SoundFlower and Jack OSX. 

This attempt is not yet successful, but there are interesting “tendencies”  from our experimentation so far. In order to enable discussions we have made a screenshot of the test rig setup. Feel free to share your knowledge or make other comments.

Note that these evaluations are done on Mac Lion OSX. Whether the conclusions would be the same on previous versions of OSX has not been investigated.

This article continues below the illustration.



Combining SoundPimp with Jack OSX and SoundFlower / SoundFlowerBed


List of verified functionality in the combination of Jack and SoundFlower 

In this screenshot, observe that:

  1. Our own NRK internet Radio (freeware) is serving as source of the audio stream used for this test. It would be exactly the same to use any arbitrary source, like iTunes and so forth.
  2. In the OSX control panel, a Multi Output Device consisting of JackRouter and SoundFlower has been created. Why ? Because (a) JackRouter needs to be system default in order to capture sound at all, and (b) because SoundFlower 2ch needs to be system default in order to receive the same audio stream as Jack does, so that it can be tapped into the connection manager of the JackRouter. This in turn enable the selection of any audio stream to be connected as we want it in the Jack Connection Manager (namely via SoundPimp). In other words, both these “devices” need to be system default to serve their respective purpose. Hence the Multi Output Device was created. While not exactly a trivial setup, this works well. For verification, the built-in outputs (internal MacBook speakers) can be added to the Multi Output Device, and yes, there is sound on the speakers confirming this setup. So far so good.

    Update: After some more testing, we find that it is also possible to select JackRouter directly as system default instead of the Multi Output device, but this requires that each app (iTunes, Spotify, whatever audio app) must be set up for proper routing in the Jack Connection Manager. This is a bit cumbersome when the purpose is just to route (whatever) audio stream via SoundPimp. This can be compared to using SoundFlower, so that all streams are captured in a “one stop shopping” by routing the SoundFlowerBed as explained above. The disadvantage of this setup is the use of one additional app; SoundFlower.

  3. It is not seen in the screenshot, but SoundFlowerBed has been configured to monitor SoundFlower 2ch JackRouter, which means a copy of this audio stream is sent to JackRouter. 
  4. In other words, we “simply” use SoundFlowerBed so as to enable capturing of the audio stream in the Jack Connection Manager. As seen, SoundFlowerBed has become available in the “Send Ports” of the JackRouter connection manager, serving there the monitoring of the SoundFlower 2ch audio stream.
  5. Strange to say, SoundFlowerBed is also available in the “Receive Ports” selector. To our understanding, it is impossible to write to SoundFlowerBed because it is a (read only) monitor ? However, it would be great if it was possible to write (send) to SoundFlower 2ch or 16 ch. Unfortunately, these devices are not available in the connection manager. 
  6. The output from SoundFlowerBed is successfully sent to SoundPimp (the “Java” entitity in the connection manager), to Garageband and to LineIn, a freeware program from Rogue Amoeba. This is confirmed by observing the red color and the respective peakmeters of these 3 receptors in the illustration above. There is a serious snag with the Java module, but we will come back to that.
  7. There is sound coming through all these channels as well. So this means SoundFlowerBed is tapping the SoundFlower 2ch and sending the result to Jack which is an interesting result even if it is not what we are seeking.
  8. It is interesting to note that the Jack seemingly takes almost full control of the audio routing, overriding the system configuration, because Jack is able to disconnect and mute the audio stream connections defined in the OSX Control Panel. The result is not unlike the HiJack feature of HiJack Pro. Unfortunately, in the setup achieved so fare, this does not include audio streams coming from the Java Sound Audio Engine, see below.
  9. More to follow as options are discovered.

Java, SoundFlower and Jack serving SoundPimpwhat is missing ?

Summarized, from the setup illustrated in the screenshot, the following is presumably missing:

  1. The SoundFlower 2ch / 16 ch “audio routing nodes” are not available for selection as neither “Send ports” nor “Receive ports” in the Jack Connection Manager. It is not clear to us why SoundFlower is missing, because it is regarded by the OSX platform as (two) audio devices, namely 2ch and 16ch versions of SoundPimp. Why then would Jack discriminate and disable these devices ? Hopefully, something is simply wrong with our particular setup, so that this is not a question about fundamental incompatibility between Jack and SoundFlower. This will need further investigation. 
  2. Jack Connection Manager is seemingly able to mute/disable any audio stream defined in the audio setup. This is an excellent feature actually at the core of Jack, granting the ability to route any Jack input audio stream to any output, just what we are looking for. We repeat that this does not include the audio stream output from the Java Sound Audio Engine.  This is a preliminary conclusion, though.

    The effect is heard as a slowly fading echo to the original audio stream coming out of SoundPimp, and this is because there is a slight attenuation involved in the SoundPimp digital signal processing.

  3. The really bad news is not related to Jack at all, but to certain simplifications in the implementation of the Java Sound Audio Engine for Mac OSX. This audio stream is always sent to the default system device, i.e. always the same output as e.g. iTunes. 

    This is seen in the picture below as a major difference between Windows and OSX versions of the SoundPimp audio input/output selector menu: While on Windows all available audio mixers or audio output lines are offered, only the Java Sound Audio Engine is selectable in the OSX version. This is a very old and boring limitation and the sole reason for this and many other posts around the web on this very matter, as it deliberately disables routing of audio streams, at least when using Java.

    On Windows:

    On OSX:


From all this follows the premature conclusion that the setup defined in this post will not be viable for the proper setup and use of SoundPimp, however it may perhaps serve as a basis for a final solution that we think we are starting to get in sight.

To be continued soon…


Your email is never shared. Required fields are marked *