Piping audio between two Macs


    Dec 01 2018 | 9:34 pm
    Apologies if I missed a post about this, but everything I've found in the forums and by searching the web was either too old to be useful (FX teleport, netsend~) or wasn't a workable solution (AuNetSend for example).
    I'm looking to use an older Macbook Pro to do some effects processing in Max on audio coming from a more recent Macbook Pro running Mainstage. Currently, I run all of this on a single laptop using Rogue Amoeba's Loopback to send audio between Mainstage and Max. I'd like to expand the processing power for live sets by separating the apps on to two laptops, but don't know how to best transfer the audio and keep things in sync. Obviously I could rig ADAT or MADI interfaces on each laptop and connect a bunch of cables between the two. I had hoped that I could find some software or MacOS support for audio over IP and use a thunderbolt cable or Ethernet cable to connect the two machines.
    I'm aware of Dante Via, which I tried but couldn't get to work for this setup. Maybe there is a piece of Dante or AVB hardware that can join two (or more) Macs via Ethernet in this way? I'm not concerned right now with analog I/O being a part of this.
    This seems like something Max tinkerers would be doing on the regular—so it surprises me to be finding so little that supports this scenario. Hopefully I'm, just not searching for the right terms?
    Many thanks in advance for any help or advice!

    • Dec 04 2018 | 6:42 pm
      bump (was moderated over the weekend...)
    • Dec 05 2018 | 3:25 am
      You can try this; On Mac 1 send your audio from whatever app you are using (MainStage etc..) to Max via for example Sound Flower. Convert the audio to a Jitter matrix (there are example patches to show you how to do that). Use jit.net.send to send the stream to Mac 2 and receive it with jit.net.recv and convert back to audio. Send via Sound flower to whatever processing app you want. This will mean delay between Mac 1 and Mac 2 so you will need to compensate by delaying the outgoing audio from Mac 1 (not the signal you send to Mac 2)
    • Dec 05 2018 | 9:03 pm
      Thanks Parmerud! I'll try out jit.catch~ with jit.net.send.
      Is the Jitter matrix-over-network stuff resilient enough to use for a live set of music? Anyone have experience using it in such a scenario?
    • Dec 05 2018 | 10:13 pm
      I know JACK was a thing, but maybe it's not supported anymore? Can't remember and never used, but I know other people have:
      http://jackaudio.org/faq/netjack.html
    • Dec 05 2018 | 11:06 pm
      Jack as well as sound flower are inter app protocols that only works inside one computer. Sending a stream of data between two (or more) computers requires wifi or hard wired net connections. Max have some different ways of doing that. Jit.net.send is the best for sending audio...
    • Dec 05 2018 | 11:12 pm
      @Brian, if it works it works and is very stable. Not sure what u mean by " resilient" but I have used it many times in complex setups with little or no problems
    • Dec 06 2018 | 12:04 am
      That’s great. By resilient I meant whether it either stays in sync or at least recovers from glitches reliably. If a patch were to hang and require some sort of restart that would disqualify it for a live show...
      Thanks for the advice!
    • Dec 06 2018 | 1:50 pm
      Use network cable for best performance/stability. Avoid wifi...
    • Dec 06 2018 | 6:56 pm
      Definitely no wifi. I'm thinking Thunderbolt bridge for the network.
    • Dec 07 2018 | 6:10 pm
      Is there a system-level (generic wrt software) solution for this sort of audio transport between Macs?
      Would be great if Loopback/JACK/Soundflower could work over a network or FireWire/TB. I know NetJack but it’s abandoned. Dante isn’t too expensive but I couldn’t get a topology that worked for this simple use case...
    • Oct 13 2019 | 9:54 pm
      Brian, better late than never (?) but you can use the built-in AUNetSend and AUNetRecieve to do what you want. You can use this with or without Soundflower. Using Soundflower:

      On the sending Mac

      1. Set System Audio to the desired Soundflower instance (2 channel?) (System Preferences -> Audio -> Output). Alternately, you can use Audio MIDI Setup to create an "Multi-Output Device". This way you can output to (wait for it) multiple output devices, such as, say, the sending Mac's speakers and the receiving Mac's speakers, simultaneously.
      2. Install and run AU Lab (https://www.apple.com/itunes/mastered-for-itunes/docs/au_lab.zip).
      3. Under "FACTORY CONFIGURATIONS", select "Stereo In/Stereo Out", set the "Audio Input Device" to whichever Soundflower device you are using and the "Audio Output Device" to "Built-in Output" (or the Multi-Output Device you created in Audio MIDI Setup). Click "Create Document".
      4. In the resulting window, in the "Output 1" column, there should now be an "Effects" dropdown. Set that to "AUNetSend". At the top of the resulting window you can optionally give this Generator a name by clicking the dropdown menu, third from the left. You can also configure a port if you want and/or give your stream a password (if you want the connection to be protected) as well as set audio/quality.Even on WiFi (802.11N) 24 Bit Apple Lossless should steam with no problems.

      On the receiving Mac

      1. Again run AU Lab
      2. Under "FACTORY CONFIGURATIONS", select "Stereo In/Stereo Out", set the input to None and the output to "Built-in Output" (or again, you can use Audio MIDI Setup on the receiving machine to create an "Multi-Output Device" if for some reason you want to send the audio to multiple devices, say, headphones, a Thunderbolt audio card, and a USB sound card). Click "Create Document".
      3. Go to the “Edit” menu (as in menu bar) and select Add Audio Unit Generator. Select "AUNetRecieve"
      4. In the Directory pane of the new window, the share name you created earlier should appear. Select it and press "Select Host" and then click the "Connect" button (top right). The "Sender" field should change to reflect the host you just selected, and the “Status” field should change to “Connected”. If all is good, you can close this window. (If you need to edit it later, you do so by selecting the Generator and using Edit -> Edit Selected Generator.)
      5. Back at the bottom of the original window, the Generator should say “Audio Engine Running". You can toggle this by clicking.
      And there you have it.

      Note:

      AUNetSend accumulates a bit of lag over the course of several hours. You can fix this as needed by resetting the AUNet connection from either the send or receiving ends. (On the receiver machine, you can do this by selecting the streaming track you made above and then using Edit -> Edit Selected Generator. There you can click the "Disconnect" button which then changes to "Connect". Clicking that will immediately reset the AUNetSend effect plugin and fix the lag. On the sending machine, click the "Effects" drop down menu in the middle of the track you made above, and the AUNetSend window should come up. As with the receiving machine, click the "Disconnect" button and then "Connect".) Which one you chose depends on how you have the stage set up and which is most convenient but it will sync you back up instantaneously. For a show of a less than a couple hours, though, you should not really experience too much of a sync/lag issue.
    • Oct 24 2019 | 1:19 am
      Thanks Mark! I’ll definitely try this setup out. I wasn’t familiar with AU lab.
    • Nov 06 2019 | 6:11 pm
      Hey Brian, Which have you found a successful setup? I am trying to do the same!
    • Nov 06 2019 | 8:31 pm
      Why not use AUNetSend /~Receive directly from the audiounit~.mxo within Max?
    • Nov 08 2019 | 5:29 pm
      Ill have to tinker around. I am a complete amateur when it comes to max! Do you know if either solution would work with a fire wire/thunderbolt instead of ethernet?
    • Nov 08 2019 | 5:41 pm
      Wow looks much easier than I thought! Good to know. Things should work out well.