diff --git a/BGMApp/BGMApp/BGMAppDelegate.mm b/BGMApp/BGMApp/BGMAppDelegate.mm index 5f6d7a6..6da4558 100644 --- a/BGMApp/BGMApp/BGMAppDelegate.mm +++ b/BGMApp/BGMApp/BGMAppDelegate.mm @@ -150,7 +150,7 @@ static float const kStatusBarIconPadding = 0.25; NSError* error = [audioDevices setBGMDeviceAsOSDefault]; if (error) { [self showSetDeviceAsDefaultError:error - message:@"Could not set Background Music Device as your default audio device." + message:@"Could not set the Background Music device as your default audio device." informativeText:@"You might be able to set it yourself."]; } } @@ -224,7 +224,7 @@ static float const kStatusBarIconPadding = 0.25; // TODO: Check whether the driver files are in /Library/Audio/Plug-Ins/HAL and offer to install them if not. Also, // it would be nice if we could restart coreaudiod automatically (using launchd). [alert setMessageText:@"Could not find the Background Music virtual audio device."]; - [alert setInformativeText:@"Make sure you've installed Background Music.driver to /Library/Audio/Plug-Ins/HAL and restarted coreaudiod (e.g. \"sudo killall coreaudiod\")."]; + [alert setInformativeText:@"Make sure you've installed Background Music Device.driver to /Library/Audio/Plug-Ins/HAL and restarted coreaudiod (e.g. \"sudo killall coreaudiod\")."]; } else if (code == kBGMErrorCode_OutputDeviceNotFound) { [alert setMessageText:@"Could not find an audio output device."]; [alert setInformativeText:@"If you do have one installed, this is probably a bug. Sorry about that. Feel free to file an issue on GitHub."]; diff --git a/BGMDriver/BGMDriver/BGM_Device.h b/BGMDriver/BGMDriver/BGM_Device.h index 89edcc1..a90c739 100644 --- a/BGMDriver/BGMDriver/BGM_Device.h +++ b/BGMDriver/BGMDriver/BGM_Device.h @@ -195,7 +195,7 @@ private: static pthread_once_t sStaticInitializer; static BGM_Device* __nonnull sInstance; - #define kDeviceName "Background Music Device" + #define kDeviceName "Background Music" #define kDeviceManufacturerName "Background Music contributors" enum diff --git a/DEVELOPING.md b/DEVELOPING.md index c6c5f33..c4a6b70 100644 --- a/DEVELOPING.md +++ b/DEVELOPING.md @@ -17,7 +17,7 @@ Device". They're shown in `System Preferences > Sound` along with the real audio When you start BGMApp, it sets BGMDevice as your system's default output device so the system (i.e. Core Audio) will start sending all[1](#f1) your audio data to BGMDriver. BGMDriver plays that audio on BGMDevice's -input stream, and the user can record it by selecting "Background Music Device" in QuickTime the same way they'd select +input stream, and the user can record it by selecting the Background Music device in QuickTime the same way they'd select a microphone. So that you can still hear the audio, BGMApp starts listening to BGMDevice's input stream and playing the audio out of @@ -50,10 +50,10 @@ Nothing](http://www.rossbencina.com/code/real-time-audio-programming-101-time-wa ## BGMDriver -The BGMDriver project is an audio driver for a virtual audio device called Background Music Device, which we use to -intercept the audio playing on the user's system. The driver processes the audio data to apply per-app volumes, see if -the music player is playing, etc. and then writes the audio to BGMDevice's input stream. It's essentially a loopback -device with a few extra features. +The BGMDriver project is an audio driver for a virtual audio device named "Background Music", which we use to intercept +the audio playing on the user's system. The driver processes the audio data to apply per-app volumes, see if the music +player is playing, etc. and then writes the audio to BGMDevice's input stream. It's essentially a loopback device with a +few extra features. There are quite a few other open-source projects with drivers that do the same thing--[Soundflower](https://github.com/mattingalls/Soundflower) is probably the most well known--but as far as I know diff --git a/README.md b/README.md index a21e1d2..c414545 100644 --- a/README.md +++ b/README.md @@ -51,11 +51,11 @@ 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 Device` as the input device. +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](https://support.apple.com/en-us/HT202000) that combines your input device (usually Built-in Input) with -Background Music Device. You can create the aggregate device using the Audio MIDI Setup utility from +the Background Music device. You can create the aggregate device using the Audio MIDI Setup utility from `/Applications/Utilities`. ## Install from source @@ -109,9 +109,11 @@ consider submitting a bug report, too.) ## Troubleshooting -If Background Music crashes and system audio stops working, open the Sound panel in System Preferences and change your -system's default output device to something other than 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. +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 @@ -124,13 +126,13 @@ change the default device and then change it back again. Failing that, you might 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 Background Music Device. Alternatively, you may Option+Click on the Sound icon in the menu bar to select a + 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 Background Music Device was your default audio device the last time you last - used (or didn't use) headphones. -- [A recent Chrome bug](https://bugs.chromium.org/p/chromium/issues/detail?id=557620) can stop Chrome from switching to - Background Music Device after you open Background Music. Chrome's audio will still play, but Background Music won't be + 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](https://bugs.chromium.org/p/chromium/issues/detail?id=557620) 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](/BGMApp/BGMApp/BGMAutoPauseMusic.mm). diff --git a/TODO.md b/TODO.md index f3cd43e..0db1fac 100644 --- a/TODO.md +++ b/TODO.md @@ -70,7 +70,7 @@ There are also lots of other TODOs commented around the code. - Should we hide the BGM device when BGMApp isn't running? This would fix the problem of our device being left as the default device if BGMApp doesn't shutdown properly (because of a crash, hard reset, etc.), which stops the system from - playing audio. The problem with that is Background Music Device can still be used without BGMApp, to record + playing audio. The problem with that is the Background Music device can still be used without BGMApp, to record system/apps' audio, so ideally the BGM device would be able to just unset itself as the default device when BGMApp isn't running. For now, I think we should just have `kAudioDevicePropertyDeviceCanBeDefaultDevice` become false.