No description
Find a file
Kyle Neideck f61f998c51
BGMDriver: Copy settings when a new client matches an existing one.
If the new client has the same bundle ID as an existing one, we now copy
its settings (volume, etc.) to the new client. This is to fix app
volumes not being applied consistently to apps that play audio through
multiple subprocesses (specifically Google Chrome). See #61.
2019-08-17 16:16:17 +10:00
BGM.xcworkspace Support creating .pkg installers using the debug build configuration. 2018-06-05 00:40:21 +10:00
BGMApp Add app volume workaround for Google Chrome. See #61. 2019-08-17 15:28:16 +10:00
BGMDriver BGMDriver: Copy settings when a new client matches an existing one. 2019-08-17 16:16:17 +10:00
Images Add an option to use a volume icon instead of the Background Music logo. 2019-03-05 00:01:42 +11:00
pkg Make sure the installer launches BGMApp as the logged-in user. 2019-08-17 15:20:47 +10:00
SharedSource Add an option to use a volume icon instead of the Background Music logo. 2019-03-05 00:01:42 +11:00
.editorconfig Add .editorconfig file to fix tab width on GitHub. 2017-12-27 15:22:17 +11:00
.gitignore Add an option to use a volume icon instead of the Background Music logo. 2019-03-05 00:01:42 +11:00
.travis.yml Add Xcode 11 to Travis CI builds. 2019-08-06 17:24:25 +10:00
build_and_install.sh Add an additional method for restarting coreaudiod. 2019-08-17 15:17:51 +10:00
CONTRIBUTING.md BGMDevice: Only enable volume/mute if the output device also has them. 2017-05-30 23:22:48 +10:00
DEVELOPING.md Add a volume slider for system sounds. 2017-12-26 23:10:57 +11:00
LICENSE Initial commit 2016-02-19 16:25:34 +11:00
LICENSE-Apple-Sample-Code Auto-pause: make the unpause delay proportional to the pause duration. 2016-12-29 02:25:44 +11:00
MANUAL-INSTALL.md Add PublicUtility to manual build instructions and... 2017-04-09 15:40:25 +10:00
MANUAL-UNINSTALL.md Add some related projects to README and other minor doc clean up. 2016-04-23 14:21:02 +10:00
package.sh Add "unsigned" to the filenames of packages from Travis CI. 2018-11-24 15:03:09 +11:00
README.md Update the README to link to v0.3.1. 2019-08-13 18:46:25 +10:00
TODO.md Rename BGMDevice from "Background Music Device" to "Background Music". 2017-06-25 12:39:34 +10:00
uninstall.sh Split uninstall.sh into an interactive and non-interactive version. 2017-06-17 21:56:42 +10:00

Background Music

macOS audio utility
  • Automatically pauses your music player when other audio starts playing and unpauses it afterwards
  • Per-application volume, boost quiet apps
  • Record system audio

  • No restart required to install
  • Runs entirely in userspace

Download

Version 0.3.1

BackgroundMusic-0.3.1.pkg (571 KB)

Still very much in alpha.

Requires macOS 10.10+. Should work on 10.9, but I haven't tried it.

MD5: 89a74e9379041abfd6a55471f3e61b94
SHA256: 070bef360bff9e52639a4fbf23ee7052b9645004a431af6ad62997cfed99e2d7
PGP: sig, key (0595DF814E41A6F69334C5E2CAA8D9B8E39EC18C)

We also have snapshot builds.

Or install using Homebrew

brew cask install background-music

If you want the snapshot version:

brew tap homebrew/cask-versions
brew cask install background-music-pre

Auto-pause music

Background Music can pause your music player app when other audio starts playing and unpause it afterwards. The idea is that when I'm listening to music and pause it to watch a video or something I always forget to unpause it afterwards. So this keeps me from wearing headphones for hours listening to nothing.

So far iTunes, Spotify, VLC, VOX, Decibel, Hermes, Swinsian and GPMDP are supported. Adding support for a new music player should only take a few minutes1 -- see BGMMusicPlayer.h. If you don't know how to program, or just don't feel like it, feel free to create an issue.

App volumes

Background Music has a volume slider for each app running on the system. I mostly use this to boost quiet apps above their normal maximum volume.

Recording system audio

With Background Music running, open QuickTime Player and go File > New Audio Recording... (or movie/screen). Then click the arrow next to the record button that looks like and select Background Music as the input device.

You should be able to record system audio and a microphone together by creating an aggregate device that combines your input device (usually Built-in Input) with the Background Music device. You can create the aggregate device using the Audio MIDI Setup utility from /Applications/Utilities.

Install from source

Building should take less than a minute, but you'll need Xcode version 8 or higher.

If you're comfortable with it, you can just paste the following at a Terminal prompt.

(set -eo pipefail; URL='https://github.com/kyleneideck/BackgroundMusic/archive/master.tar.gz'; \
    cd $(mktemp -d); echo Downloading $URL to $(pwd); curl -qfL# $URL | gzcat - | tar x && \
    /bin/bash BackgroundMusic-master/build_and_install.sh -w && rm -rf BackgroundMusic-master)

Otherwise, to build and install from source:

  • Clone or download the project.
  • If the project is in a zip, unzip it.
  • Open Terminal.app and change directory to the directory containing the project.
  • Run the following command: /bin/bash build_and_install.sh.

The script restarts the system audio process (coreaudiod) at the end of the installation, so you might want to pause any apps playing audio.

Additional detailed installation instructions can be found on the Wiki.

Uninstall

  • Run the uninstall.sh script (using Terminal.app) to remove Background Music from your system. You should be able to find it in /Applications/Background Music.app/Contents/Resources/uninstall.sh, but if not you can download the project again.
  • Go to the Sound section in System Preferences and change your default output device at least once. (If you only have one device now, either use Audio MIDI Setup.app to create a temporary aggregate device, restart any audio apps that have stopped working or just restart your system.)

Manual Uninstall

Try following the instructions in MANUAL-UNINSTALL.md if uninstall.sh fails. (You might consider submitting a bug report, too.)

Troubleshooting

If Background Music crashes and your audio stops working, open the Sound panel in System Preferences and change your system's default output device to something other than the Background Music device. If it already is, it might help to change the default device and then change it back again.

Failing that, you might have to uninstall. Consider filing a bug report if you do.

Known issues

  • Setting an app's volume above 50% can cause clipping. Currently, the best solution is to instead set your overall volume to max and lower the volumes of other apps.

  • VLC automatically pauses iTunes/Spotify when it starts playing something, but that stops Background Music from unpausing your music afterwards. To workaround it, open VLC's preferences, click Show All, go Interface > Main interfaces > macosx and change Control external music players to either Do nothing or Pause and resume iTunes/Spotify.

    Similarly, Skype pauses iTunes during calls. If you want to disable that, uncheck Pause iTunes during calls on the General tab of Skype's preferences.

  • Plugging in or unplugging headphones when Background Music isn't running can silence system audio. To fix it, go to the Sound section in System Preferences, click the Output tab and change your default output device to something other than the Background Music device. Alternatively, you may Option+Click on the Sound icon in the menu bar to select a different output device.

    This happens when macOS remembers that the Background Music device was your default audio device the last time you last used (or didn't use) headphones.

  • A Chrome bug can stop Chrome from switching to the Background Music device after you open Background Music. Chrome's audio will still play, but Background Music won't be aware of it.

  • Some apps play notification sounds that are only just long enough to trigger an auto-pause. The only workaround right now is to increase the kPauseDelayNSec constant in BGMAutoPauseMusic.mm. That will make your music overlap the other audio for longer, though, so you don't want to increase it too much. See #5 for details.

  • Plenty more. Some are in listed in TODO.md.

  • Core Audio User-Space Driver Examples The sample code from Apple that BGMDriver is based on.
  • Soundflower - "MacOS system extension that allows applications to pass audio to other applications."
  • WavTap - "globally capture whatever your mac is playing—-as simply as a screenshot"
  • eqMac, GitHub - "System-wide Audio Equalizer for the Mac"
  • llaudio - "An old piece of work to reverse engineer the Mac OSX user/kernel audio interface. Shows how to read audio straight out of the kernel as you would on Darwin (where most the OSX goodness is missing)"
  • mute.fm, GitHub (Windows) - Auto-pause music
  • Jack OS X - "A Jack audio connection kit implementation for Mac OS X"
  • PulseAudio OS X - "PulseAudio for Mac OS X"
  • Sound Pusher - "Virtual audio device, real-time encoder and SPDIF forwarder for Mac OS X"
  • Zirkonium - "An infrastructure and application for multi-channel sound spatialization on MacOS X."

Non-free

  • Audio Hijack - "Capture Audio From Anywhere on Your Mac"
  • Sound Siphon, Sound Control - System/app audio recording, per-app volumes, system audio equaliser
  • SoundBunny - "Control application volume independently."
  • Boom 2 - "The Best Volume Booster & Equalizer For Mac"

License

Copyright © 2016-2019 Background Music contributors. Licensed under GPLv2, or any later version.

Background Music includes code from:


[1] However, if the music player doesn't support AppleScript, or doesn't support the events Background Music needs (isPlaying, isPaused, play and pause), it can take significantly more effort to add. (And in some cases would require changes to the music player itself.)