FFmpeg 5.0 + adjustable IOCycleSafetyFactor
This release updates to the FFmpeg 5.0 API and jumps through a lot of hoops to avoid memory allocations in audio-threads as the new FFmpeg APIs allocate memory left, right, and center (e.g.
It also changes the default for the safety-factor used for the measurement of the IOCycle adjustment from 4 to 8. It can also be manually set via
defaults write de.maven.SoundPusher SafetyFactor -float <value>. Any value less than 1 disables IOCycle adjustment completely (but results in more latency). If you encounter drop-outs, you can try to set this to a higher value, but hopefully the new default works for most systems.
Apple Silicon support
This release is natively compiled for Apple Silicon (including the FFmpeg AC3 encoder).
None of the available Apple Silicon Macs have a built-in digital (optical) output, so you will need a compatible audio interface. I've been using a "HiFimeDIY UAE23 USB DAC (ESS Sabre ES9023+Savitech SA9023)" and it's been working fine for me.
Support any (compatible) input device
This release no longer hardcodes the
SoundPusher Audio device as input device, but can instead use any compatible (6 channels, 48000Hz) device whose sound is encoded and forwarded to the desired output device. This includes Rogue Amoeba's Loopback Audio when configured to provide 6 channels, which was what I was testing with (in addition to
There's also been improvements to the default device restoration (in particularly when quitting). This should be much more reliable now.
Last but not least: I realized that FFmpeg's "new"
send_frame / receive_packet API (which I started using in v1.2.0) has been resulting in memory (re)allocations on the audio thread. That is bad but there seems to be no way (that I could figure out anyhow) to avoid it, so now we're using the old deprecated API again which behaves better in this regard.
Rename LoopbackAudio to SoundPusherAudio
It seems that some users of Rogue Amoeba's Loopback product were also
using SoundPusher and ended up being rather confused. Their product has
a bit more branding, so it's probably easier to rename my device (even
though I was first
Updated ffmpeg to 4.2.3.
Note that if you mix previous versions of app with current version of
the driver (or vice versa), they will not find each other. You can
safely delete the old
Require macOS 10.14 (Mojave)
This lets us use AVFoundation's
[AVCaptureDevice requestAccessForMediaType:completionHandler:] for querying (and requesting) audio input.
This should be done as soon as the user attempts to start a chain, so they hopefully realize that their action caused this request.
Notarization (and updated FFmpeg)
This enables the hardened run-time and other things required for App Notarization.
The embedded FFmpeg has been updated to v4.1.3.
The provided binaries should be correctly notarized.
edit: SoundPusher.app was missing the audio-input entitlement for the hardened run-time. Try again if you were having problems.
Add microphone entitlement for macOS 10.13.5
- Add microphone entitlement that seems required since macOS 10.13.5. I was so proud of not needing any...
- Updated ffmpeg to 4.0.1.
- Added a small safe amount of excess audio frames to keep around, which should prevent odd situations where SoundPusher continually readjusts between over- and underflow.
IOCycleUsagewith random data instead of silence to stress encoder.
- Increase minimum deployment target to macOS 10.12 and move to
Loopback Audio is unchanged.
Note that the application is a fair bit larger now, this seems due to Xcode 9 putting the largest resource (the app icon) into both the asset catalog as well as a separate
AppIcon.icns. I couldn't figure out how to include only one of them. ¯\(ツ)/¯
Xcode 8 / FFmpeg 3.2 rebuilt
Fix disorderly channel mapping conduct
Fixed channel mapping bug which would have been incorrect were it not for a second coincidence making it correct for the actual case that was being used.
Updated to FFmpeg 3.0.
Note: No changes to LoopbackAudio compared to the previous version.