Skip to content

Releases: q-p/SoundPusher

FFmpeg 5.0 + adjustable IOCycleSafetyFactor

@q-p q-p
Compare
Choose a tag to compare

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. AVBufferRef).

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.

Fixes #24 (not sure whether #23 is the same root cause.)

Apple Silicon support

@q-p q-p
Compare
Choose a tag to compare

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

@q-p q-p
Compare
Choose a tag to compare

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 SoundPusher Audio).

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

@q-p q-p
Compare
Choose a tag to compare

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
/Library/Audio/Plug-Ins/HAL/LoopbackAudio.driver

Require macOS 10.14 (Mojave)

@q-p q-p
Compare
Choose a tag to compare

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)

@q-p q-p
Compare
Choose a tag to compare

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

@q-p q-p
Compare
Choose a tag to compare
  • 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.
  • Measure IOCycleUsage with random data instead of silence to stress encoder.
  • Increase minimum deployment target to macOS 10.12 and move to os_log from asl.

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

@q-p q-p
Compare
Choose a tag to compare

There should be no perceptible changes, but internals moved around a fair bit.

Fix disorderly channel mapping conduct

@q-p q-p
Compare
Choose a tag to compare

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.

Support for up-mixing stereo content

@q-p q-p
Compare
Choose a tag to compare

Added stereo upmix (enabled or disabled from the menu).

The current upmix matrix is

L'   = L
R'   = R
C'   = C  + (L + R) * 1/sqrt(2)
Ls'  = Ls + (L - R) * 1/2
Rs'  = Rs + (R - L) * 1/2
LFE' = LFE