Something like this should be default in MacOS. I use blackhole daily in my audio production and sound design practices. If you use a modern audio interface you might have a loopback available there.
macOS 14.2 implemented something like this in Core Audio, but it is not user facing (and also documented extremely poorly). You can create a "Tap" that can capture audio from a particular application, or subset of applications, or an output device. This can then be added to a private or public Aggregate Device (depending on the Tap being private or public).
If you think the situation is bad on Mac, you e never had to fight with ASIO on Windows.
On Mac stuff basically just works.
On Windows ASIO works with only ASIO, and doesn’t allow the OS to use the card for “regular” sound unless the device-specific driver allows for it.
Edit: Or in most cases for two ASIO applications to use the same soundcard at the same time. So you end up needing to install a virtual loopback anyway, losing out on the (theoretical) latency benefits of ASIO.
It is unfortunate, the old windows media stack had a nice drag and drop UI that let you connect different inputs and sinks together in all sorts of weird and cool ways. Back when I used Windows 2000 I was able plug a game console into a capture card and split the audio and video inputs so they both went out over streaming video and were visible/audible on my local machine.
Not that anyone cared about watching live streamed video game footage back in 2001 or so.
The problem with the old apis (and this includes directsound) is that they are incapable of stabling running at low latency, which is crucial for recording.
Ditch the Aggregate devices for a start ( yes it’s expensive running a lot of inputs or outputs on a proper system, and you don’t take advantage of all the interfaces built into gear). Uninstall Blackhole and spend the money on Rogue Amoeba stuff.
Buy audio interfaces with good drivers (e.g. RME, Lynx, Metric Halo or even MOTU AVB stuff and stay away from Antelope - they have problems), install, plugin and away you go.
- Seriously though trying to understand audio midi setup from docs was pretty awful.
- I've had a bunch of (mostly DJ) equipment refuse to connect with newer macs as they keep changing their security model.
- Managing/fighting latency took a lot of experimentation (for me anyway).
- The soundflower / blackhole stuff can be a pain until you've stitched everything together once or twice.
for me Windows is the king in backwards compatibility. I get the sense they expend significant resources doing testing in this space and scrutinizing ABIs and APIs and all that. They don't want to disturb the developer ecosystems with bedrock changes.
ah what a conundrum, pitting legacy over security that's a big tradeoff decision. Those mostly seems like independent topics but I wonder if the deeper you go in maximizing legacy support the more vulnerable you make your systems in falling for security lapses of some kind. I wonder if these two things tangle in unforeseen ways deep beneath the surface.
Definitely, MacOS busts kext extensions and other software without mercy leaving the devs to either keep up or to bite the bullet and abandon ship. For projects that are labors of love those often fall to the wayside and you get stuck romanticizing earlier versions of MacOS when you used to be able to do xyz. One I’ve been longing for is a rerelease of https://www.orderedbytes.com/controllermate/
That is very nice. I've been looking for something like this. It's useful in the case where you want to do a tutorial with an application that produces sound, but you want to talk at the same time. The best solution before would be to plug a 3.5mm cable into an audio interface that accepts this sort of input, and then record at the same time. The problem is that then you cannot do small cuts in real-time as easily as if you are recording directly into a DAW with audacity, and plus it gives you the possibility of using real-time effects with your DAW.
Good for streaming also, without needing to use OBS, which is hit and miss when it comes to some things.
I use Loopback and BlackHole both, although for different reasons/setups. I guess it's more an artifact of the surrounding macOS environment at the conception of each project. BlackHole's first commit was September 2019, while Loopback was released in 2016 (but also shares its capture engine with Audio Hijack, and its 1.0 release was 2002!)
Audio Hijack is good if you want to add some VST plugin processing.
A good usecase is having a nice mic for your Zoom calls or Youtube videos and doing basic noise filtering, compression and limiting on it w/o having to run a full DAW in the background.
Otherwise Loopback does everything else like piping specific sound sources from one app to another, without the rest of system audio.
The use case you mentioned is pretty much exactly what I've been wanting to do: run some EQ / filtering / compression on my decent mic so I sound great in Zoom and Google Meet video calls.
I tried using OBS' audio filters and routing through VB-Cable for that, but people in the call complained that my audio was lagging behind the video. If Audio Hijack would address that issue, or if anyone has other suggestions, I'd really appreciate it. So far it feels like "close, but no cigar".
Well suited doesn't meant designed for, and that's not the implication.
The thread of this conversation is why someone might use Audio Hijack instead of a no-cost alternative (of which there are many.)
I'm suggesting that Audio Hijack makes it very easy to rip music from free music services such as Spotify. Thus providing a reason why someone might choose to pay for Audio Hijack rather than the no-cost option.
It's much tidier to have a set of pre-sorted (and if one is clever, pre-named and tagged) output files rather than having one long audio output that would require time to sit and divide up manually.
In my experience if the silence gap is set too low, any pause or silence in the song will trigger a new file for the same song, and if too big, it will sometimes lump two songs together.
It takes extra time verifying that each file is only one track and the full track.
I have opted to turn off the silence detection, record one big file of my playlist, and then use Fission to split up the file while referencing the length of each track. Audacity is a free wav editor that would work for this, but I do love Rogue Amoeba software and Fission is probably a bit quicker.
It still takes a little time but Fission does make it fairly quick and easy, and I prefer this consistent process.
So in my opinion, the auto silence separation is not a killer feature that makes ripping audio significantly easier.
Also I don't think it has the ability to automatically name files appropriately, so you still have to go back and name each individual file, which I handle as I'm splitting them.
This is what I've been using since upgrading to M1 because SoundFlower I used on my previous Mac is a kernel extension and installing those on Apple Silicon is a mess.
As is pretty much anything that comes in a .pkg, to be honest. It's kinda bonkers that you need third-party apps to (attempt to) cleanly uninstall things.
Last Halloween we hired a fortune teller and I used this with some ladspa plugins and my tts to rig up a self signups from cellphone thing. When the fortune teller pressed the button the next in line was announced in a scary voice over the whole home audio system. After the music decreased in volume of course!
How is the latency for you? I know blackhole is advertised as 0ms itself, but I always found that crossing virtual devices incurred the input/output latency of the daw itself.
I haven't experimented with lowering these numbers in maybe two years, but I use BlackHole to route 8 channels from Traktor to Ableton Live (all four decks in stereo as external outputs). I have one big aggregate device with my internal speakers for clock, the BlackHole bridge, and an original RME Babyface for the physical output.
Looks like I have Traktor set to 192 samples @ 44khz. It's showing "4.4 ms processing + 17.6ms output = 22.0 ms" in its UI.
Ableton is set to 128 samples, and showing "Input Latency 4.72 ms, Output Latency 6.05 ms, Overall Latency 10.8 ms".
So maybe 33.8 ms in the whole pipeline? Although I throw audio signal across the room via the Babyface's optical out to a cheap optical -> RCA box, so that's probably adding a little more to my physical environment.
I've had this same Traktor/Live setup going for a long, long time. At one point I even used a physical loopback with the Babyface's optical out/in carrying 8 channels between Traktor and Ableton. That was sadly better than any software available before BlackHole. It was solid, although a bit higher latency, and it's nice to be able to use the optical out for its intended purpose!
I used to get very occasional crackle this BlackHole setup, until I tried a random tip of using the built-in speakers as the clock source on an aggregate device. It's been rock solid since. I could probably lower sample buffers even further these days (M3 Max)...
I've personally been using a nifty piece of software called VB-Cable, which basically does the same thing. Creates a software audio output as well as an audio input, which you can then use across different applications.
I personally use it to route my studio mic input through OBS, where I apply some filtering, to then be able to use it with different VoIP software.
Do you need additional software for this? Can’t you use OBS as a webcam[0] and take its audio source? (I haven’t tried, but that’s how I’d approach it if I was going to).
Unfortunately, no, OBS handles video only, no audio comes through the camera. It's really frustrating, I have wanted to do some more complicated audio setups on a Windows PC (specifically bridging two calls on different platforms together, I know the latency would be bad), but you have to use the VB CABLE proprietary driver, of which you can only have one for free, or try playing with Voicemeeter (same company with old, proprietary software). I have tried Synchronous Audio Router, but I couldn't get it to work after hours of pressing buttons.
On Mac, I can just buy Rogue Amoeba software, and on Linux, I can just run some commands or download a GUI to route audio around however I want.
I also find it interesting that all of the examples are for routing DAWs to video call apps. Don’t these apps have screen sharing and wouldn’t that be higher quality than using the microphone input?
Usually the idea is to record DAW audio seperately, so when you go back and actually edit the video you're not limited to whatever horrible 64Kbps compression algo the video call uses.
Plus you'll often want to be using some sort of mixer to mix in a vocal/talk mic also.
Does anything similar exist for video? There have been meetings I've wished I could route a loop of my face looking alert and interested to Zoom instead of a live camera feed Mission-Impossible-style.
The issue is there is no standard for video out from a single application (except that apps window buffer).
That said, OBS has a “camera” mode where it will present itself as a camera. Anything you can do in OBS (including playing a video) can be sent to anything that takes camera input.
Just start speaking. The surrealism would be amazing. Just tell them there's clearly something wrong with Zoom. Everyone will buy it.
Also, it's just yet another reason that I'm so happy my Zoom meetings do not require a camera feed. There's just something Orwellian to me about having to have a camera on me. Having a camera on me is my absolute nightmare regardless of the purpose of the camera.
You make sure you are wearing the same clothing as the recorded video loop. Use something like a stReamdeck to have hardware buttons that let you toggle to a live webcam. Elgato even has a foot pedal version that works great.
It's probably just me, but the video in these video calls is mostly a waste of bandwidth, I am never paying attention to the bobbing heads in the screen. My point being, I, for one, would not notice very quickly if the person speaking was just a loop of someone looking interested, I sort of want to do this myself, OBS is probably the key, when called to speak you could switch scenes to the live feed.
I did some research into using ffmpeg as a sort of live network based video router and compositor, My conclusion was that it would work. however my heart was set on actual transparent rgba video and support for that was finicky.
> It's probably just me, but the video in these video calls is mostly a waste of bandwidth, I am never paying attention to the bobbing heads in the screen
"People and culture" departments would argue that it creates a sense of belonging and cohesion to the team.
Haha I'd this feeling and add another people which doesn't fully adapt to remote, screaming and justifying that the CEO or someone required the open cam!
And you can pair this with Element [1] to do nice routings.
For example, in my live sets I send 8 separate audio channels from Ableton Live via a miniDSP optical interface [2] to my music partner's audio interface who does fx and live mixing.
When I'm working on the sets without him I don't have the midiDSP audio device plugged in and Ableton get's annoying. So I set up a routing in Element from BlackHole 8 track to mix down to stereo and my usual stereo output without having to remap my channels in Ableton. Just switch output devices.
Over the pandemic, I used this and OBS with a USB HDMI capture dongle attached to my Nintendo Switch to host Jackbox Party Pack nights with friends over Zoom. Such a great tool!
Offtopic: I love Audio MIDI Setup for the Multi-Output Device and the possibility of connecting two Bluetooth headphones to one laptop. Is there a similar thing for Windows or Linux?
Many Linux distributions have moved to Pipewire as the default audio daemon in recent years. With Pipewire, you can use Qjackctl or Qpwgraph to edit how devices route to eachother using a visual graph. Pipewire has the distinct advantage that it works with tools for both the PulseAudio daemon and the JACK daemon simultaneously, so you can typically combine things you might do with either.
Unfortunately, I don't think there's a good UI that exposes both a graph view and a way to create virtual devices for more advanced routing, however there is very rich support for advanced routing:
So there's probably no direct analogue, as at best you'll probably need to run some commands to get a device to combine streams for you, and then you can hook it in using Qpwgraph.
Pipewire also handles video devices and graphs too.
If you ever want to try this with a proper audio interface, you'll also want to switch the audio interface into Pro Audio mode most likely. It's a profile that can be selected (typically in whatever handles your volume settings, e.g. pavucontrol)
This is an awesome program highly recommend. Used to be called Soundflower back in the day but BlackHole works better and works with new M series Mac’s. Awesome!
Do you look at the code / line count when you open a project like this?
I have this "hard time" imagining what the X thousands lines of code do.
Even more when the piece of software claims to be simple. I would have to devote months to really understand it, I guess, and "cure" this "superficialitis" (tendency to think everything is 50 lines of code)
I guess compilers are the only "kind" of project I can imagine a few complex parts.
> I would have to devote months to really understand it, I guess, and "cure" this "superficialitis" (tendency to think everything is 50 lines of code)
You wouldn’t have to spend months understanding it, but you also wouldn’t be able to glance at the code for 5 minutes and understand everything that needs to happen.
Anything that handles driver or system level operations and deals with audio will get complex quickly. What happens when the input device gets unplugged? The output device disconnects? User changes from speakers to AirPods?
How do you handle situations where the input and output sample rate are different? What about when something backs up and a buffer overflows? Or underflows? What mechanism do you use for handling user setting changes?
The list of situations you have to handle goes on and on. The core concept is simple, but there are so many things to do that the code base will naturally become bigger than the 50 lines of code you’re imagining.
The best way to cure this is to write something in 50 lines to show the world how it's done, and wager a large donation to e.g. the trump election campaign if you leave a public ticket unfixed for more than a week. As soon as you try to interface with other people's workflows and needs, the 50 lines turn into thousands very quickly.
> I guess compilers are the only "kind" of project I can imagine a few complex parts.
What's so hard about a compiler? You read some files, split into tokens, sort into a tree, and then walk the tree and write some instructions to disk at each node. Can be done in a couple hundred lines of code. (\s: the point is that all software gets complicated, and a few thousand lines is not a lot of code)
Skimming or folding to only show the names of the functions might make it easier to grok. For example, there are about 75 OSStatus messages this driver supports.
There are a ton of case statements; each one represents a situation that must be supported.
3500 lines goes quickly when you divide it by a few hundred situations/statuses.
As comments in another discussion tree have said, it's a shame that macOS doesn't provide some of this natively. If it did then this would probably be higher level code and shorter. Knowing where the boundary lies between the system and the application is part of having an understanding of why all this was written.
I wouldn't feel bad about this; it's just a domain knowledge thing. Be excited by the opportunity to learn with a toy project or a deep code review!
A large amount of the code is the C boilerplate for implementing the object graph needed by audio system. You'll see that basically every function is a huge switch-case.
Why not? You can create multi-output audio devices in macos, say blackhole and your speakers and use that multi-output device as the input in the recorder.
Not throwing shade on Blackhole. You can accomplish a lot with it. And yes, technically, it can do most if not all of what Loopback does. I just like the experience of using Loopback more than having to use the built-in MIDI setup in macOS, which I always find a bit confusing.
Oh, actually, now I remember why I bought Loopback in the first place. I couldn't figure out how to map a single stereo input channel to both left and right channels with Blackhole, but Loopback makes that very easy. Maybe it's possible to do with Blackhole, but I'll happily pay to not feel like a confused old man when all I want to do is record audio the way I expect.
In the case of Audio Hijack, one might as well save the money and go with Blackhole instead of Loopback.
And in any case, as much as I normally embrace FOSS, Rogue Amoeba makes high quality software that's worth paying for, so I'm not champing at the bit to replace them.
> And in any case, as much as I normally embrace FOSS, Rogue Amoeba makes high quality software that's worth paying for, so I'm not champing at the bit to replace them.
I tried really hard to get my desired audio setup to work with stock Mac OS features, but it was just... not good.
I have two Apple Monitors flanking both sides of a larger display with terrible speakers. I wanted to split left/right between the two Apple monitors. With Audio Midi Setup, I got it to work, but then I couldn't adjust the volume with the soft keys.
I installed Loopback and Soundsource. Everything just worked, and it was very easy to configure. The price was a little high, but I'm not really the target customer. Was worth it to not have to put bulky speakers on my desk.
Recently, I had to record a video call (both audio and my screen) while wearing headphones. Using OBS and BlackHole together was the only option I could find at the time.
If you use it and need it, you’ll get a lot more than $100 worth of value from it. It’s not price gouging, it’s just a small company making enough money to stay in business. They arent sustaining themselves off advertising and your data like big tech
That’s fair. It isn’t cheap, but they’re the only ones I know of who can route things around and mix them together without a DAW or some other utility running.
MacOS doesn’t even have per application volume control, which is a crazy thing to say for the OS aimed at audio professionals (at least as far as I know.)
The lack of per-application volume is annoying I agree, as a consumer.
But I don't think that's a feature requested by audio professionals. They're working within applications, not playing audio from multiple apps at the same time. And it would be extremely annoying to discover that your DAW output volume had accidentally somehow been set to 90% and you hadn't realized it. I mean, mixing is done with visual decibel meters, but a lot still depends on little details that are above or below the threshold of hearing, which an application-level volume control would mess with.
I’m pretty sure MacOS could easily have a built-in master audio mixer and a setting on that mixer labeled “bypass”, which gives the current MacOS behavior of “no master audio mixer.”
I can’t believe that only a few people have ever asked for a way to mute an app entirely.
I grow weary of excuses around the lack of a built-in feature for this. “Apple doesn’t want to do it” is the only reason.
It lets you use the audio output of one program as the audio input of another program in arbitrary ways. A handy tool for live media like streaming- maybe I want my game and music to be streamed, but not my notifications or my A/V tech's voice in my ear. For audio production you can also wire the output of one music creation tool into the input of another.
I think it's unacceptable that a third-party driver is necessary to record system audio on Mac. Both Windows and Linux have been able to natively record system audio for at least 20 years now. I consider it a basic required feature for something like screencasting.
It was vastly overdue, but macOS shipped a native solution for screen recording with audio in macOS 12 and you no longer need BlackHole for that. BH is still useful for more advanced uses, but they're mostly the sort of thing where it's not jarringly weird that they require some third-party software.
This is correct. And if you use a headset it won't pick up the general system sounds. Used it for an IEP call last week and found out afterwards the only audio it picked up was my own. Pretty frustrating.
But then again Windows has no native web cam multiplexing. One app has the camera, and no one else can use it. That app crashes and you need to reboot Windows.
One would think in the edge of remote work, an operating system would bring a virtual web cam driver.
I used ManyCam but they cheated me out of a lifetime license.
> Home users may use their single computer usage license on all computers and mobile devices (USB drive, external hard drive, etc.) which are property of the license owner.