diff --git a/.gitignore b/.gitignore index 6cdfc5b..3e21031 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,3 @@ xcuserdata/ -.DS_Store \ No newline at end of file +.DS_Store +.idea diff --git a/BlackHole.xcodeproj/project.pbxproj b/BlackHole.xcodeproj/project.pbxproj index 9a21774..dd07436 100644 --- a/BlackHole.xcodeproj/project.pbxproj +++ b/BlackHole.xcodeproj/project.pbxproj @@ -7,21 +7,37 @@ objects = { /* Begin PBXBuildFile section */ - 039FF2582341B6E800400D7A /* CHANGELOG.md in Resources */ = {isa = PBXBuildFile; fileRef = 039FF2572341B6E800400D7A /* CHANGELOG.md */; }; 03FDCADA233F235500101681 /* BlackHole.icns in Resources */ = {isa = PBXBuildFile; fileRef = 03FDCAD9233F235500101681 /* BlackHole.icns */; }; 03FDCADC233FAE0500101681 /* LICENSE in Resources */ = {isa = PBXBuildFile; fileRef = 03FDCADB233FAE0500101681 /* LICENSE */; }; + 181F454727C38398001F1689 /* BlackHole.c in Sources */ = {isa = PBXBuildFile; fileRef = 2D616EF215B8C82500D598BD /* BlackHole.c */; }; + 181F454927C38398001F1689 /* Accelerate.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3D6C8E45275E92B40030C104 /* Accelerate.framework */; }; + 181F454A27C38398001F1689 /* CoreAudio.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2D7477EC157823CF00412279 /* CoreAudio.framework */; }; + 181F454B27C38398001F1689 /* CoreFoundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2D7477AC1578168D00412279 /* CoreFoundation.framework */; }; + 181F454D27C38398001F1689 /* LICENSE in Resources */ = {isa = PBXBuildFile; fileRef = 03FDCADB233FAE0500101681 /* LICENSE */; }; + 181F454E27C38398001F1689 /* BlackHole.icns in Resources */ = {isa = PBXBuildFile; fileRef = 03FDCAD9233F235500101681 /* BlackHole.icns */; }; 2D616EF415B8C82500D598BD /* BlackHole.c in Sources */ = {isa = PBXBuildFile; fileRef = 2D616EF215B8C82500D598BD /* BlackHole.c */; }; 2D7477AD1578168D00412279 /* CoreFoundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2D7477AC1578168D00412279 /* CoreFoundation.framework */; }; 3D6C8E44275E92AE0030C104 /* CoreAudio.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2D7477EC157823CF00412279 /* CoreAudio.framework */; }; 3D6C8E46275E92B40030C104 /* Accelerate.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3D6C8E45275E92B40030C104 /* Accelerate.framework */; }; /* End PBXBuildFile section */ +/* Begin PBXContainerItemProxy section */ + 181F455627C38C7D001F1689 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 2D74779D1578162B00412279 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 181F454527C38398001F1689; + remoteInfo = "BlackHole copy"; + }; +/* End PBXContainerItemProxy section */ + /* Begin PBXFileReference section */ - 039FF2572341B6E800400D7A /* CHANGELOG.md */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = net.daringfireball.markdown; path = CHANGELOG.md; sourceTree = ""; }; 03FDCAD9233F235500101681 /* BlackHole.icns */ = {isa = PBXFileReference; lastKnownFileType = image.icns; path = BlackHole.icns; sourceTree = ""; }; 03FDCADB233FAE0500101681 /* LICENSE */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = LICENSE; sourceTree = ""; }; 03FEA4BB233D27770005D277 /* BlackHole.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = BlackHole.h; sourceTree = ""; }; - 2D616EF115B8C82500D598BD /* BlackHole-Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = "BlackHole-Info.plist"; sourceTree = ""; }; + 181F455427C38398001F1689 /* BlackHoleAux.driver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = BlackHoleAux.driver; sourceTree = BUILT_PRODUCTS_DIR; }; + 181F455527C38398001F1689 /* BlackHoleAux-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = "BlackHoleAux-Info.plist"; sourceTree = ""; }; + 2D616EF115B8C82500D598BD /* BlackHole-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = "BlackHole-Info.plist"; sourceTree = ""; }; 2D616EF215B8C82500D598BD /* BlackHole.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = BlackHole.c; sourceTree = ""; }; 2D7477A91578168D00412279 /* BlackHole.driver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = BlackHole.driver; sourceTree = BUILT_PRODUCTS_DIR; }; 2D7477AC1578168D00412279 /* CoreFoundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreFoundation.framework; path = System/Library/Frameworks/CoreFoundation.framework; sourceTree = SDKROOT; }; @@ -33,6 +49,16 @@ /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ + 181F454827C38398001F1689 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 181F454927C38398001F1689 /* Accelerate.framework in Frameworks */, + 181F454A27C38398001F1689 /* CoreAudio.framework in Frameworks */, + 181F454B27C38398001F1689 /* CoreFoundation.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; 2D7477A61578168D00412279 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; @@ -49,6 +75,7 @@ 2D616EF015B8C82500D598BD /* BlackHole */ = { isa = PBXGroup; children = ( + 181F455527C38398001F1689 /* BlackHoleAux-Info.plist */, 03FDCAD9233F235500101681 /* BlackHole.icns */, 2D616EF115B8C82500D598BD /* BlackHole-Info.plist */, 03FEA4BB233D27770005D277 /* BlackHole.h */, @@ -62,7 +89,6 @@ children = ( 2DA8FA1515FEAAB000F04B50 /* README.md */, 03FDCADB233FAE0500101681 /* LICENSE */, - 039FF2572341B6E800400D7A /* CHANGELOG.md */, 2D616EF015B8C82500D598BD /* BlackHole */, 2D7477AB1578168D00412279 /* Frameworks */, 2D7477AA1578168D00412279 /* Products */, @@ -73,6 +99,7 @@ isa = PBXGroup; children = ( 2D7477A91578168D00412279 /* BlackHole.driver */, + 181F455427C38398001F1689 /* BlackHoleAux.driver */, ); name = Products; sourceTree = ""; @@ -92,6 +119,23 @@ /* End PBXGroup section */ /* Begin PBXNativeTarget section */ + 181F454527C38398001F1689 /* BlackHoleAux */ = { + isa = PBXNativeTarget; + buildConfigurationList = 181F455027C38398001F1689 /* Build configuration list for PBXNativeTarget "BlackHoleAux" */; + buildPhases = ( + 181F454627C38398001F1689 /* Sources */, + 181F454827C38398001F1689 /* Frameworks */, + 181F454C27C38398001F1689 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = BlackHoleAux; + productName = AudioNULLDriver; + productReference = 181F455427C38398001F1689 /* BlackHoleAux.driver */; + productType = "com.apple.product-type.bundle"; + }; 2D7477A81578168D00412279 /* BlackHole */ = { isa = PBXNativeTarget; buildConfigurationList = 2D7477B51578168D00412279 /* Build configuration list for PBXNativeTarget "BlackHole" */; @@ -103,6 +147,7 @@ buildRules = ( ); dependencies = ( + 181F455727C38C7D001F1689 /* PBXTargetDependency */, ); name = BlackHole; productName = AudioNULLDriver; @@ -116,11 +161,6 @@ isa = PBXProject; attributes = { LastUpgradeCheck = 1220; - TargetAttributes = { - 2D7477A81578168D00412279 = { - DevelopmentTeam = Q5C99V536K; - }; - }; }; buildConfigurationList = 2D7477A01578162B00412279 /* Build configuration list for PBXProject "BlackHole" */; compatibilityVersion = "Xcode 3.2"; @@ -136,24 +176,41 @@ projectRoot = ""; targets = ( 2D7477A81578168D00412279 /* BlackHole */, + 181F454527C38398001F1689 /* BlackHoleAux */, ); }; /* End PBXProject section */ /* Begin PBXResourcesBuildPhase section */ + 181F454C27C38398001F1689 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 181F454D27C38398001F1689 /* LICENSE in Resources */, + 181F454E27C38398001F1689 /* BlackHole.icns in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; 2D46CA7A17D6ADC500049D4A /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( 03FDCADC233FAE0500101681 /* LICENSE in Resources */, 03FDCADA233F235500101681 /* BlackHole.icns in Resources */, - 039FF2582341B6E800400D7A /* CHANGELOG.md in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXResourcesBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ + 181F454627C38398001F1689 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 181F454727C38398001F1689 /* BlackHole.c in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; 2D7477A51578168D00412279 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; @@ -164,7 +221,78 @@ }; /* End PBXSourcesBuildPhase section */ +/* Begin PBXTargetDependency section */ + 181F455727C38C7D001F1689 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 181F454527C38398001F1689 /* BlackHoleAux */; + targetProxy = 181F455627C38C7D001F1689 /* PBXContainerItemProxy */; + }; +/* End PBXTargetDependency section */ + /* Begin XCBuildConfiguration section */ + 181F455127C38398001F1689 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ENABLE_OBJC_WEAK = YES; + DEVELOPMENT_TEAM = ""; + GCC_PREPROCESSOR_DEFINITIONS = ( + "$(inherited)", + "DEBUG=0", + "IS_AUX=1", + ); + INFOPLIST_FILE = "$(SRCROOT)/BlackHole/BlackHoleAux-Info.plist"; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Audio/Plug-Ins/HAL"; + MACOSX_DEPLOYMENT_TARGET = 10.9; + MARKETING_VERSION = 0.3.0; + PRODUCT_BUNDLE_IDENTIFIER = audio.existential.BlackHole2ch; + PRODUCT_NAME = "$(TARGET_NAME)"; + WRAPPER_EXTENSION = driver; + }; + name = Release; + }; + 181F455227C38398001F1689 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ENABLE_OBJC_WEAK = YES; + DEVELOPMENT_TEAM = ""; + GCC_PREPROCESSOR_DEFINITIONS = ( + "$(inherited)", + "DEBUG=1", + "IS_AUX=1", + ); + INFOPLIST_FILE = "$(SRCROOT)/BlackHole/BlackHoleAux-Info.plist"; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Audio/Plug-Ins/HAL"; + MACOSX_DEPLOYMENT_TARGET = 10.9; + MARKETING_VERSION = 0.3.0; + PRODUCT_BUNDLE_IDENTIFIER = audio.existential.BlackHole2ch; + PRODUCT_NAME = "$(TARGET_NAME)"; + WRAPPER_EXTENSION = driver; + }; + name = Debug; + }; + 181F455327C38398001F1689 /* Debug-Opt */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ENABLE_OBJC_WEAK = YES; + DEVELOPMENT_TEAM = ""; + GCC_PREPROCESSOR_DEFINITIONS = ( + "$(inherited)", + "DEBUG=1", + "IS_AUX=1", + ); + INFOPLIST_FILE = "$(SRCROOT)/BlackHole/BlackHoleAux-Info.plist"; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Audio/Plug-Ins/HAL"; + MACOSX_DEPLOYMENT_TARGET = 10.9; + MARKETING_VERSION = 0.3.0; + PRODUCT_BUNDLE_IDENTIFIER = audio.existential.BlackHole2ch; + PRODUCT_NAME = "$(TARGET_NAME)"; + WRAPPER_EXTENSION = driver; + }; + name = "Debug-Opt"; + }; 2D7477A21578162B00412279 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { @@ -330,15 +458,16 @@ buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; CLANG_ENABLE_OBJC_WEAK = YES; - DEVELOPMENT_TEAM = Q5C99V536K; + DEVELOPMENT_TEAM = ""; GCC_PREPROCESSOR_DEFINITIONS = ( "$(inherited)", "DEBUG=0", + "IS_AUX=0", ); INFOPLIST_FILE = "$(SRCROOT)/BlackHole/BlackHole-Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Audio/Plug-Ins/HAL"; MACOSX_DEPLOYMENT_TARGET = 10.9; - MARKETING_VERSION = 0.3.0; + MARKETING_VERSION = 0.4.0; PRODUCT_BUNDLE_IDENTIFIER = audio.existential.BlackHole2ch; PRODUCT_NAME = "$(TARGET_NAME)"; WRAPPER_EXTENSION = driver; @@ -350,15 +479,16 @@ buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; CLANG_ENABLE_OBJC_WEAK = YES; - DEVELOPMENT_TEAM = Q5C99V536K; + DEVELOPMENT_TEAM = ""; GCC_PREPROCESSOR_DEFINITIONS = ( "$(inherited)", "DEBUG=1", + "IS_AUX=0", ); INFOPLIST_FILE = "$(SRCROOT)/BlackHole/BlackHole-Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Audio/Plug-Ins/HAL"; MACOSX_DEPLOYMENT_TARGET = 10.9; - MARKETING_VERSION = 0.3.0; + MARKETING_VERSION = 0.4.0; PRODUCT_BUNDLE_IDENTIFIER = audio.existential.BlackHole2ch; PRODUCT_NAME = "$(TARGET_NAME)"; WRAPPER_EXTENSION = driver; @@ -370,15 +500,16 @@ buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; CLANG_ENABLE_OBJC_WEAK = YES; - DEVELOPMENT_TEAM = Q5C99V536K; + DEVELOPMENT_TEAM = ""; GCC_PREPROCESSOR_DEFINITIONS = ( "$(inherited)", "DEBUG=1", + "IS_AUX=0", ); INFOPLIST_FILE = "$(SRCROOT)/BlackHole/BlackHole-Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Audio/Plug-Ins/HAL"; MACOSX_DEPLOYMENT_TARGET = 10.9; - MARKETING_VERSION = 0.3.0; + MARKETING_VERSION = 0.4.0; PRODUCT_BUNDLE_IDENTIFIER = audio.existential.BlackHole2ch; PRODUCT_NAME = "$(TARGET_NAME)"; WRAPPER_EXTENSION = driver; @@ -388,6 +519,16 @@ /* End XCBuildConfiguration section */ /* Begin XCConfigurationList section */ + 181F455027C38398001F1689 /* Build configuration list for PBXNativeTarget "BlackHoleAux" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 181F455127C38398001F1689 /* Release */, + 181F455227C38398001F1689 /* Debug */, + 181F455327C38398001F1689 /* Debug-Opt */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; 2D7477A01578162B00412279 /* Build configuration list for PBXProject "BlackHole" */ = { isa = XCConfigurationList; buildConfigurations = ( diff --git a/BlackHole.xcodeproj/xcshareddata/xcschemes/BlackHoleAux.xcscheme b/BlackHole.xcodeproj/xcshareddata/xcschemes/BlackHoleAux.xcscheme new file mode 100644 index 0000000..4b223e3 --- /dev/null +++ b/BlackHole.xcodeproj/xcshareddata/xcschemes/BlackHoleAux.xcscheme @@ -0,0 +1,67 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/BlackHole/BlackHole.h b/BlackHole/BlackHole.h index 41c1e91..df6a879 100644 --- a/BlackHole/BlackHole.h +++ b/BlackHole/BlackHole.h @@ -126,12 +126,22 @@ static pthread_mutex_t gPlugIn_StateMutex = PTHREA static UInt32 gPlugIn_RefCount = 0; static AudioServerPlugInHostRef gPlugIn_Host = NULL; +#if IS_AUX +#define kBox_UID "BlackHoleAux%ich_UID" +#define kDevice_UID "BlackHoleAux%ich_UID" +#define kDevice_ModelUID "BlackHoleAux%ich_ModelUID" +#define kDevice_Name "BlackHole Aux %ich" +#else #define kBox_UID "BlackHole%ich_UID" +#define kDevice_UID "BlackHole%ich_UID" +#define kDevice_ModelUID "BlackHole%ich_ModelUID" +#define kDevice_Name "BlackHole %ich" +#endif + static CFStringRef gBox_Name = NULL; static Boolean gBox_Acquired = true; -#define kDevice_UID "BlackHole%ich_UID" -#define kDevice_ModelUID "BlackHole%ich_ModelUID" + static pthread_mutex_t gDevice_IOMutex = PTHREAD_MUTEX_INITIALIZER; static Float64 gDevice_SampleRate = 44100.0; static UInt64 gDevice_IOIsRunning = 0; @@ -149,7 +159,6 @@ static const Float32 kVolume_MaxDB = 0.0; static Float32 gVolume_Master_Value = 1.0; static bool gMute_Master_Value = false; -#define kDevice_Name "BlackHole %ich" #define kManufacturer_Name "Existential Audio Inc." #define kLatency_Frame_Size 0 diff --git a/BlackHole/BlackHoleAux-Info.plist b/BlackHole/BlackHoleAux-Info.plist new file mode 100644 index 0000000..beffd56 --- /dev/null +++ b/BlackHole/BlackHoleAux-Info.plist @@ -0,0 +1,38 @@ + + + + + CFBundleDevelopmentRegion + English + CFBundleExecutable + ${EXECUTABLE_NAME} + CFBundleIconFile + + CFBundleIdentifier + $(PRODUCT_BUNDLE_IDENTIFIER) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + ${PRODUCT_NAME} + CFBundlePackageType + BNDL + CFBundleShortVersionString + $(MARKETING_VERSION) + CFBundleSignature + ???? + CFBundleVersion + 1 + CFPlugInFactories + + ff5ed090-1521-11ea-8d71-362b9e155667 + BlackHole_Create + + CFPlugInTypes + + 443ABAB8-E7B3-491A-B985-BEB9187030DB + + ff5ed090-1521-11ea-8d71-362b9e155667 + + + + diff --git a/CHANGELOG.md b/CHANGELOG.md deleted file mode 100644 index a74cfa5..0000000 --- a/CHANGELOG.md +++ /dev/null @@ -1,103 +0,0 @@ -# BlackHole Changelog - -All notable changes to this project will be documented in this file. - -The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/) -and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.html). - - -### Feature Requests - -- Add support for additional virtual formats. 24bit, 16bit. -- Sync BlackHole audio clock with any audio device. -- Create multi-output / aggregate device with installer. -- Keep track of which apps are connected to the driver. - - -## [0.3.0] - 2021-12-07 - -### Added -- Sample rates: 352800, 384000, 705600, 768000, 8000, 16000 - - -### Changed -- Improved performance -- Fixed various bugs -- Renamed constants and variables for consistency -- Connect input and output volume. -- Connect input and output mute. - - - -## [0.2.10] - 2021-08-21 -### Changed -- Increased internal buffer size -- Change kDataSource_NumberItems to zero - - - -## [0.2.9] - 2021-1-27 -### Changed -- Fix clock bug. Fixes issues with BlackHole crashing on Apple Silicon. - -## [0.2.8] - 2020-12-26 - -### Added -- Support for Apple Silicon - -### Changed -- Set deployment target to 10.9. -- Fixed bug where there is a loud pop when audio starts. -- Fix bug that caused crashes in certain situations. Issue#206 -- Disable Volume and Mute controls on input. They are only needed on the output. -- Fix clock bug. -- Automatically change UIDs to include the number of channels. Makes it easier to build and install multiple versions. Ex: BlackHole2ch_UID - - -## [0.2.7] - 2020-08-08 -### Changed -- Improved Logarithmic Volume Control -- Various updates to README. - -### Added -- Added IOMutex to IO operations - -## [0.2.6] - 2020-02-09 -### Changed -- Fixed BlackHole buffer allocation error when switching audio devices from DAW. -- Fixed BlackHole buffer allocation error when sleeping. -- Audio Midi Setup speaker configuration now saves preferences. - -## [0.2.5] - 2019-11-29 -### Changed -- Set default volume to 1.0 - -## [0.2.4] - 2019-11-28 -### Added -- Ability to mute and changed volume on input and out of BlackHole. - -## [0.2.3] - 2019-11-22 -### Changed -- Display number of channels in audio source name. - -## [0.2.2] - 2019-10-02 -### Fixed -- Fixed bugs when multiple devices are reading and writing simulaniously. - - -## [0.2.1] - 2019-09-30 -### Changed -- Set deployment target to macOS 10.10 to include Yosemite and Sierra - -## [0.2.0] - 2019-09-29 -### Added -- Support for 88.2kHz, 96kHz, 176.4kHz and 192kHz -- Sums audio from mutiple sources -- Changelog -- Device Icon - -## [0.1.0] - 2019-09-27 -### Added -- Ability to pass audio between applications -- Support for 16 channels of audio -- Support for 44.1kHz and 48kHz diff --git a/Images/Aggregate/1.png b/Images/Aggregate/1.png deleted file mode 100644 index 7cc0a89..0000000 Binary files a/Images/Aggregate/1.png and /dev/null differ diff --git a/Images/Aggregate/2.png b/Images/Aggregate/2.png deleted file mode 100644 index e95368e..0000000 Binary files a/Images/Aggregate/2.png and /dev/null differ diff --git a/Images/Aggregate/3.png b/Images/Aggregate/3.png deleted file mode 100644 index 00750fd..0000000 Binary files a/Images/Aggregate/3.png and /dev/null differ diff --git a/Images/Aggregate/4.png b/Images/Aggregate/4.png deleted file mode 100644 index 2b6f0be..0000000 Binary files a/Images/Aggregate/4.png and /dev/null differ diff --git a/Images/Aggregate/5.png b/Images/Aggregate/5.png deleted file mode 100644 index 3ace894..0000000 Binary files a/Images/Aggregate/5.png and /dev/null differ diff --git a/Images/BlackHole.png b/Images/BlackHole.png deleted file mode 100644 index 3574edc..0000000 Binary files a/Images/BlackHole.png and /dev/null differ diff --git a/Images/BlackHoleWithAux.png b/Images/BlackHoleWithAux.png new file mode 100644 index 0000000..365a08d Binary files /dev/null and b/Images/BlackHoleWithAux.png differ diff --git a/Images/DAWs/audacity/AudacityInput.png b/Images/DAWs/audacity/AudacityInput.png deleted file mode 100644 index d25fc1b..0000000 Binary files a/Images/DAWs/audacity/AudacityInput.png and /dev/null differ diff --git a/Images/DAWs/audacity/AudacityMicrophoneAccess.png b/Images/DAWs/audacity/AudacityMicrophoneAccess.png deleted file mode 100644 index 789236d..0000000 Binary files a/Images/DAWs/audacity/AudacityMicrophoneAccess.png and /dev/null differ diff --git a/Images/DAWs/audacity/AudacityRecording.png b/Images/DAWs/audacity/AudacityRecording.png deleted file mode 100644 index edaa2a0..0000000 Binary files a/Images/DAWs/audacity/AudacityRecording.png and /dev/null differ diff --git a/Images/DAWs/audacity/AudacityTransport.png b/Images/DAWs/audacity/AudacityTransport.png deleted file mode 100644 index 77ff322..0000000 Binary files a/Images/DAWs/audacity/AudacityTransport.png and /dev/null differ diff --git a/Images/DAWs/logic/audiopreferences.png b/Images/DAWs/logic/audiopreferences.png deleted file mode 100644 index ca2532c..0000000 Binary files a/Images/DAWs/logic/audiopreferences.png and /dev/null differ diff --git a/Images/DAWs/logic/input.png b/Images/DAWs/logic/input.png deleted file mode 100644 index a92ac88..0000000 Binary files a/Images/DAWs/logic/input.png and /dev/null differ diff --git a/Images/DAWs/logic/inputoutput.png b/Images/DAWs/logic/inputoutput.png deleted file mode 100644 index c870aa0..0000000 Binary files a/Images/DAWs/logic/inputoutput.png and /dev/null differ diff --git a/Images/Installation/1.png b/Images/Installation/1.png deleted file mode 100644 index 16ef64f..0000000 Binary files a/Images/Installation/1.png and /dev/null differ diff --git a/Images/Installation/2.png b/Images/Installation/2.png deleted file mode 100644 index 1ebf72e..0000000 Binary files a/Images/Installation/2.png and /dev/null differ diff --git a/Images/Installation/3.png b/Images/Installation/3.png deleted file mode 100644 index 2be72cb..0000000 Binary files a/Images/Installation/3.png and /dev/null differ diff --git a/Images/Installation/4.png b/Images/Installation/4.png deleted file mode 100644 index 1052fb9..0000000 Binary files a/Images/Installation/4.png and /dev/null differ diff --git a/Images/Installation/5.png b/Images/Installation/5.png deleted file mode 100644 index 56ab8d6..0000000 Binary files a/Images/Installation/5.png and /dev/null differ diff --git a/Images/Installation/6.png b/Images/Installation/6.png deleted file mode 100644 index 219bb4a..0000000 Binary files a/Images/Installation/6.png and /dev/null differ diff --git a/Images/Multi-Output/1.png b/Images/Multi-Output/1.png deleted file mode 100644 index 7cc0a89..0000000 Binary files a/Images/Multi-Output/1.png and /dev/null differ diff --git a/Images/Multi-Output/2.png b/Images/Multi-Output/2.png deleted file mode 100644 index 4add1d8..0000000 Binary files a/Images/Multi-Output/2.png and /dev/null differ diff --git a/Images/Multi-Output/3.png b/Images/Multi-Output/3.png deleted file mode 100644 index 00750fd..0000000 Binary files a/Images/Multi-Output/3.png and /dev/null differ diff --git a/Images/Multi-Output/4.png b/Images/Multi-Output/4.png deleted file mode 100644 index ee1c631..0000000 Binary files a/Images/Multi-Output/4.png and /dev/null differ diff --git a/Images/Multi-Output/5.png b/Images/Multi-Output/5.png deleted file mode 100644 index 061100d..0000000 Binary files a/Images/Multi-Output/5.png and /dev/null differ diff --git a/Images/Multi-Output/6.png b/Images/Multi-Output/6.png deleted file mode 100644 index 77e2148..0000000 Binary files a/Images/Multi-Output/6.png and /dev/null differ diff --git a/Images/Xcode/1 download xcode.png b/Images/Xcode/1 download xcode.png deleted file mode 100644 index 19319c8..0000000 Binary files a/Images/Xcode/1 download xcode.png and /dev/null differ diff --git a/Images/Xcode/2 clone.png b/Images/Xcode/2 clone.png deleted file mode 100644 index 956c853..0000000 Binary files a/Images/Xcode/2 clone.png and /dev/null differ diff --git a/Images/Xcode/3.png b/Images/Xcode/3.png deleted file mode 100644 index 09234b8..0000000 Binary files a/Images/Xcode/3.png and /dev/null differ diff --git a/Images/Xcode/4.png b/Images/Xcode/4.png deleted file mode 100644 index 7ada370..0000000 Binary files a/Images/Xcode/4.png and /dev/null differ diff --git a/Images/Xcode/5.png b/Images/Xcode/5.png deleted file mode 100644 index 066f583..0000000 Binary files a/Images/Xcode/5.png and /dev/null differ diff --git a/README.md b/README.md index 812553f..c64cd26 100644 --- a/README.md +++ b/README.md @@ -1,138 +1,29 @@ -# BlackHole: Virtual Audio Driver +# BlackHole with "Aux": 2 Virtual Audio Drivers ![Platform:macOS](https://img.shields.io/badge/platform-macOS-lightgrey) -![GitHub](https://img.shields.io/github/v/release/ExistentialAudio/BlackHole) -[![GitHub](https://img.shields.io/github/license/ExistentialAudio/BlackHole)](LICENSE) -[![Build Status](https://travis-ci.com/ExistentialAudio/BlackHole.svg?branch=master)](https://travis-ci.com/ExistentialAudio/BlackHole) [![Twitter](https://img.shields.io/badge/Follow%20on%20Twitter-1da1f2)](https://twitter.com/ExistentialAI) -[![Facebook](https://img.shields.io/badge/Like%20on%20Facebook-4267B2)](https://www.facebook.com/Existential-Audio-103423234434751) +![GitHub](https://img.shields.io/github/v/release/yuriteixeira/BlackHole) +[![GitHub](https://img.shields.io/github/license/yuriteixeira/BlackHole)](LICENSE) -BlackHole is a modern MacOS virtual audio driver that allows applications to pass audio to other applications with zero additional latency. +This is a fork from [ExistentialAudio/BlackHole](https://github.com/ExistentialAudio/BlackHole), which is a modern MacOS virtual audio driver that allows applications to pass audio to other applications with zero additional latency. -### [Download Installer](https://existential.audio/blackhole/?pk_campaign=github&pk_kwd=readme) +The main difference of it is **to provide an extra auxiliar audio interface (BlackHole Aux 2ch)**, which is useful to do some more advanced routing, like you can see in [this use-case, where one interface is used to capture the audio, and the other will output it](https://github.com/ExistentialAudio/BlackHole/discussions/64#discussioncomment-168447) (which was not supported by the original BlackHole project). -## Funding -Sponsor: https://github.com/sponsors/ExistentialAudio +![LadioCast UseCase](https://user-images.githubusercontent.com/19588967/75671773-b2b77600-5cc2-11ea-85fb-97f82875776e.png) -## Table of Contents -- [Features](#features) -- [Installation Instructions](#installation-instructions) -- [Uninstallation Instructions](#uninstallation-instructions) -- [Guides](#guides) -- [Advanced Customization and Installation](#advanced-customization-and-installation) -- [Feature Requests](#feature-requests) -- [FAQ](#faq) -- [Wiki](https://github.com/ExistentialAudio/BlackHole/wiki) +# Installing -## Features -- Supports 2, 16 or 64 audio channels versions. -- Customizable to 256+ audio channels. -- Supports 44.1kHz, 48kHz, 88.2kHz, 96kHz, 176.4kHz, and 192kHz sample rates. -- No driver latency. -- Compatible with macOS Mavericks (10.9) to macOS Big Sur (11). -- Built for Intel and Apple Silicon. +1. Download the zip files `BlackHole.driver.zip` and `BlackHoleAux.driver.zip` from the latest release +2. Unzip them and copy the folders `BlackHole.driver` and `BlackHoleAux.driver` to `/Library/Audio/Plug-Ins/HAL/` (your password may be required) +3. Open the `Terminal` app and run `sudo launchctl kickstart -kp system/com.apple.audio.coreaudiod` -![Image of BlackHole Audio Driver](Images/BlackHole.png) +You should now see `BlackHole 2ch` & `BlackHole Aux 2ch` listed if you open `Audio MIDI Setup` app. -## Installation Instructions +![AudioMidi](Images/BlackHoleWithAux.png) -### Option 1: Download Installer -1. [Download Installer](https://existential.audio/blackhole/?pk_campaign=github&pk_kwd=readme) -2. Close all running audio applications -3. Open and install package +To uninstall, delete the folders you copied inside `/Library/Audio/Plug-Ins/HAL/`, run `sudo launchctl kickstart -kp system/com.apple.audio.coreaudiod` and you shouldn't see them listed anymore. -### Option 2: Install via Homebrew: +For details instructions on how to use it, [go check the docs in the original project](https://github.com/ExistentialAudio/BlackHole). -- 2ch: `brew install blackhole-2ch` -- 16ch: `brew install blackhole-16ch` +# Coming Soon -## Uninstallation Instructions -### Option 1: Use Uninstaller -- [Download BlackHole2ch Uninstaller](https://existential.audio/downloads/BlackHole2chUninstaller.pkg) -- [Download BlackHole16ch Uninstaller](https://existential.audio/downloads/BlackHole16chUninstaller.pkg) - -### Option 2: Manually Uninstall - -1. Delete BlackHoleXch.driver by running `rm -R /Library/Audio/Plug-Ins/HAL/BlackHoleXch.driver` NOTE: The directory is in `/Library` not `user/Library` and be sure to replace `X` with either `2` or `16` -2. Restart CoreAudio with terminal command `sudo launchctl kickstart -kp system/com.apple.audio.coreaudiod` - -For more specific details [visit the wiki.](https://github.com/ExistentialAudio/BlackHole/wiki/Uninstallation) - -### Advanced Customization and Installation -There are a number of options available to customize BlackHole including number of channels, names, running multiple drivers, and latency. -Visit the [Wiki](https://github.com/ExistentialAudio/BlackHole/wiki#advanced-customization) for details. - -## Guides - -### Logic Pro X -- [Logic Pro X to FaceTime](https://existential.audio/howto/StreamFromLogicProXtoFaceTime.php) -- [Logic Pro X to Google Meet](https://existential.audio/howto/StreamFromLogicProXtoGoogleMeet.php) -- [Logic Pro X to Skype](https://existential.audio/howto/StreamFromLogicProXtoSkype.php) -- [Logic Pro X to Zoom](https://existential.audio/howto/StreamFromLogicProXtoZoom.php) - -### GarageBand -- [GarageBand to FaceTime](https://existential.audio/howto/StreamFromGarageBandToFaceTime.php) -- [GarageBand to Google Meet](https://existential.audio/howto/StreamFromGarageBandToGoogleMeet.php) -- [GarageBand to Skype](https://existential.audio/howto/StreamFromGarageBandToSkype.php) -- [GarageBand to Zoom](https://existential.audio/howto/StreamFromGarageBandToZoom.php) - -### Reaper -- Reaper to Zoom by Noah Liebman (https://noahliebman.net/2020/12/telephone-colophon-or-how-i-overengineered-my-call-audio/) - -### Record System Audio -1. [Setup Multi-output Device](https://github.com/ExistentialAudio/BlackHole/wiki/Multi-Output-Device) -2. In `Audio Midi Setup`->`Audio Devices` Right-click on the newly created Multi-output and select "Use This Device For Sound Output" -3. Open digital audio workstation (DAW) such as GarageBand and set input device to "BlackHole" -4. Set track to input from channel 1-2 -5. Play audio from another application and monitor or record in your DAW. - -### Route Audio Between Applications -1. Set output driver to "BlackHole" in sending application -2. Output audio to any channel -3. Open receiving application and set input device to "BlackHole" -4. Input audio from the corresponding output channels - -## Feature Requests - -If you are interested in any of the following features please leave a comment in the linked issue. To request a features not listed please create a new issue. - -- [Sync Clock with other Audio Devices](https://github.com/ExistentialAudio/BlackHole/issues/27) in development see v0.3.0 -- [Output Blackhole to other Audio Device](https://github.com/ExistentialAudio/BlackHole/issues/40) -- [Add Support for AU Plug-ins](https://github.com/ExistentialAudio/BlackHole/issues/18) -- [Inter-channel routing](https://github.com/ExistentialAudio/BlackHole/issues/13) -- [Record Directly to File](https://github.com/ExistentialAudio/BlackHole/issues/8) -- [Configuration Options Menu](https://github.com/ExistentialAudio/BlackHole/issues/7) -- [Support for Additional Bit Depths](https://github.com/ExistentialAudio/BlackHole/issues/42) - -## FAQ - -### Why isn't BlackHole showing up in the Applications folder? -BlackHole is an audio interface driver. It only shows up in `Audio MIDI Setup`, `Sound Preferences`, or other audio applications. - -### How can I listen to the audio and use BlackHole at the same time? -[Setup a Multi-Output Device](https://github.com/ExistentialAudio/BlackHole/wiki/Multi-Output-Device) - -### How can I change the volume of a Multi-Output device? -Unfortunately macOS does not support changing the volume of a Multi-Output device but you can set the volume of individual devices in Audio MIDI Setup. - -### Why is nothing playing through BlackHole? -- Check `System Preferences` -> `Security & Privacy` -> `Privacy` -> `Microphone` to make sure your digital audio workstation (DAW) has microphone access. - -- Check that the volume is all the way up on BlackHole input and output in ``Audio Midi Setup``. - -- If you are using a multi-output device, due to issues with macOS the Built-in Output must be enabled and listed as the top device in the Multi-Output. https://github.com/ExistentialAudio/BlackHole/wiki/Multi-Output-Device#4-select-output-devices - -### Why is audio glitching after X minutes when using a multi-output or an aggregate? -- You need to enable drift correction for all devices except the clock source device. - -### What Apps Don't Work with Multi-Outputs? -Unfortunately multi-outputs are pretty buggy and some apps just won't work with them at all. Here is a list of known ones. If you have more to add please let me know. -- Apple Podcasts -- Apple Messages -- HDHomeRun - -### AirPods with an Aggregate/Multi-Output is not working. -The microphone from AirPods runs at a lower sample rate which means it should not be used as the primary/clock device in an Aggregate or Multi-Output device. The solution is to use your built-in speakers (and just mute them) or BlackHole 2ch as the primary/clock device. BlackHole 16ch will not work as the primary since the primary needs to have 2ch. - -Read the discussion. https://github.com/ExistentialAudio/BlackHole/issues/146 - -### Can I integrate BlackHole into my app? -BlackHole is licensed under GPL-3.0. You can use BlackHole as long as your app is also licensed as GPL-3.0. For all other applications contact me directly at devinroth@existential.audio. +- [ ] Install method using `brew` +- [ ] Automated builds