diff --git a/desmume/src/frontend/cocoa/ClientInputHandler.cpp b/desmume/src/frontend/cocoa/ClientInputHandler.cpp index a47c6b278..ebd3763fd 100644 --- a/desmume/src/frontend/cocoa/ClientInputHandler.cpp +++ b/desmume/src/frontend/cocoa/ClientInputHandler.cpp @@ -1,5 +1,5 @@ /* - Copyright (C) 2017 DeSmuME team + Copyright (C) 2017-2022 DeSmuME team This file is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -673,6 +673,17 @@ void ClientInputHandler::ApplyInputs() } } +void ClientInputHandler::SetHardwareMicAuthorized(bool isAuthorized) +{ + // Do nothing. This is implementation-dependent. +} + +bool ClientInputHandler::IsHardwareMicAuthorized() +{ + // Do nothing. This is implementation-dependent. + return true; +} + bool ClientInputHandler::IsHardwareMicAvailable() { // Do nothing. This is implementation-dependent. diff --git a/desmume/src/frontend/cocoa/ClientInputHandler.h b/desmume/src/frontend/cocoa/ClientInputHandler.h index f4078dc5f..945b60d4d 100644 --- a/desmume/src/frontend/cocoa/ClientInputHandler.h +++ b/desmume/src/frontend/cocoa/ClientInputHandler.h @@ -1,5 +1,5 @@ /* - Copyright (C) 2017 DeSmuME team + Copyright (C) 2017-2022 DeSmuME team This file is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -438,6 +438,9 @@ public: void ProcessInputs(); void ApplyInputs(); + virtual void SetHardwareMicAuthorized(bool isAuthorized); + virtual bool IsHardwareMicAuthorized(); + virtual bool IsHardwareMicAvailable(); virtual void ResetHardwareMic(); virtual uint8_t HandleMicSampleRead(); diff --git a/desmume/src/frontend/cocoa/DeSmuME (Latest).xcodeproj/project.pbxproj b/desmume/src/frontend/cocoa/DeSmuME (Latest).xcodeproj/project.pbxproj index a003e5dff..8fa038845 100755 --- a/desmume/src/frontend/cocoa/DeSmuME (Latest).xcodeproj/project.pbxproj +++ b/desmume/src/frontend/cocoa/DeSmuME (Latest).xcodeproj/project.pbxproj @@ -1332,6 +1332,16 @@ AB3BF4351E256309003E2B24 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AB3BF4321E2562F2003E2B24 /* QuartzCore.framework */; }; AB3BF4381E25D9AE003E2B24 /* DisplayViewCALayer.mm in Sources */ = {isa = PBXBuildFile; fileRef = AB3BF4371E25D9AE003E2B24 /* DisplayViewCALayer.mm */; }; AB3BF4391E25D9AE003E2B24 /* DisplayViewCALayer.mm in Sources */ = {isa = PBXBuildFile; fileRef = AB3BF4371E25D9AE003E2B24 /* DisplayViewCALayer.mm */; }; + AB3E8AEC2808FDF4007FF5C7 /* Icon_MicrophoneIdleNoHardware_256x256.png in Resources */ = {isa = PBXBuildFile; fileRef = AB3E8AEB2808FDF3007FF5C7 /* Icon_MicrophoneIdleNoHardware_256x256.png */; }; + AB3E8AED2808FDF4007FF5C7 /* Icon_MicrophoneIdleNoHardware_256x256.png in Resources */ = {isa = PBXBuildFile; fileRef = AB3E8AEB2808FDF3007FF5C7 /* Icon_MicrophoneIdleNoHardware_256x256.png */; }; + AB3E8AEE2808FDF4007FF5C7 /* Icon_MicrophoneIdleNoHardware_256x256.png in Resources */ = {isa = PBXBuildFile; fileRef = AB3E8AEB2808FDF3007FF5C7 /* Icon_MicrophoneIdleNoHardware_256x256.png */; }; + AB3E8AEF2808FDF4007FF5C7 /* Icon_MicrophoneIdleNoHardware_256x256.png in Resources */ = {isa = PBXBuildFile; fileRef = AB3E8AEB2808FDF3007FF5C7 /* Icon_MicrophoneIdleNoHardware_256x256.png */; }; + AB3E8AF02808FDF4007FF5C7 /* Icon_MicrophoneIdleNoHardware_256x256.png in Resources */ = {isa = PBXBuildFile; fileRef = AB3E8AEB2808FDF3007FF5C7 /* Icon_MicrophoneIdleNoHardware_256x256.png */; }; + AB3E8AF12808FDF4007FF5C7 /* Icon_MicrophoneIdleNoHardware_256x256.png in Resources */ = {isa = PBXBuildFile; fileRef = AB3E8AEB2808FDF3007FF5C7 /* Icon_MicrophoneIdleNoHardware_256x256.png */; }; + AB3E8AF22808FDF4007FF5C7 /* Icon_MicrophoneIdleNoHardware_256x256.png in Resources */ = {isa = PBXBuildFile; fileRef = AB3E8AEB2808FDF3007FF5C7 /* Icon_MicrophoneIdleNoHardware_256x256.png */; }; + AB3E8AF32808FDF4007FF5C7 /* Icon_MicrophoneIdleNoHardware_256x256.png in Resources */ = {isa = PBXBuildFile; fileRef = AB3E8AEB2808FDF3007FF5C7 /* Icon_MicrophoneIdleNoHardware_256x256.png */; }; + AB3E8AF42808FDF4007FF5C7 /* Icon_MicrophoneIdleNoHardware_256x256.png in Resources */ = {isa = PBXBuildFile; fileRef = AB3E8AEB2808FDF3007FF5C7 /* Icon_MicrophoneIdleNoHardware_256x256.png */; }; + AB3E8AF52808FDF4007FF5C7 /* Icon_MicrophoneIdleNoHardware_256x256.png in Resources */ = {isa = PBXBuildFile; fileRef = AB3E8AEB2808FDF3007FF5C7 /* Icon_MicrophoneIdleNoHardware_256x256.png */; }; AB3FBD802176DE95005722D0 /* WifiSettingsPanel.mm in Sources */ = {isa = PBXBuildFile; fileRef = AB3FBD7F2176DE95005722D0 /* WifiSettingsPanel.mm */; }; AB3FBD812176DE95005722D0 /* WifiSettingsPanel.mm in Sources */ = {isa = PBXBuildFile; fileRef = AB3FBD7F2176DE95005722D0 /* WifiSettingsPanel.mm */; }; AB3FBD822176DE95005722D0 /* WifiSettingsPanel.mm in Sources */ = {isa = PBXBuildFile; fileRef = AB3FBD7F2176DE95005722D0 /* WifiSettingsPanel.mm */; }; @@ -2740,16 +2750,6 @@ ABA67CDF2808B97E00B5208D /* Icon_VolumeTwoThird_DarkMode_16x16@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = ABA67CB22808B97D00B5208D /* Icon_VolumeTwoThird_DarkMode_16x16@2x.png */; }; ABA67CE02808B97E00B5208D /* Icon_VolumeTwoThird_DarkMode_16x16@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = ABA67CB22808B97D00B5208D /* Icon_VolumeTwoThird_DarkMode_16x16@2x.png */; }; ABA67CE12808B97E00B5208D /* Icon_VolumeTwoThird_DarkMode_16x16@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = ABA67CB22808B97D00B5208D /* Icon_VolumeTwoThird_DarkMode_16x16@2x.png */; }; - ABA67CE22808B97E00B5208D /* Icon_MicrophoneDenied_DarkMode_256x256.png in Resources */ = {isa = PBXBuildFile; fileRef = ABA67CB32808B97D00B5208D /* Icon_MicrophoneDenied_DarkMode_256x256.png */; }; - ABA67CE32808B97E00B5208D /* Icon_MicrophoneDenied_DarkMode_256x256.png in Resources */ = {isa = PBXBuildFile; fileRef = ABA67CB32808B97D00B5208D /* Icon_MicrophoneDenied_DarkMode_256x256.png */; }; - ABA67CE42808B97E00B5208D /* Icon_MicrophoneDenied_DarkMode_256x256.png in Resources */ = {isa = PBXBuildFile; fileRef = ABA67CB32808B97D00B5208D /* Icon_MicrophoneDenied_DarkMode_256x256.png */; }; - ABA67CE52808B97E00B5208D /* Icon_MicrophoneDenied_DarkMode_256x256.png in Resources */ = {isa = PBXBuildFile; fileRef = ABA67CB32808B97D00B5208D /* Icon_MicrophoneDenied_DarkMode_256x256.png */; }; - ABA67CE62808B97E00B5208D /* Icon_MicrophoneDenied_DarkMode_256x256.png in Resources */ = {isa = PBXBuildFile; fileRef = ABA67CB32808B97D00B5208D /* Icon_MicrophoneDenied_DarkMode_256x256.png */; }; - ABA67CE72808B97E00B5208D /* Icon_MicrophoneDenied_DarkMode_256x256.png in Resources */ = {isa = PBXBuildFile; fileRef = ABA67CB32808B97D00B5208D /* Icon_MicrophoneDenied_DarkMode_256x256.png */; }; - ABA67CE82808B97E00B5208D /* Icon_MicrophoneDenied_DarkMode_256x256.png in Resources */ = {isa = PBXBuildFile; fileRef = ABA67CB32808B97D00B5208D /* Icon_MicrophoneDenied_DarkMode_256x256.png */; }; - ABA67CE92808B97E00B5208D /* Icon_MicrophoneDenied_DarkMode_256x256.png in Resources */ = {isa = PBXBuildFile; fileRef = ABA67CB32808B97D00B5208D /* Icon_MicrophoneDenied_DarkMode_256x256.png */; }; - ABA67CEA2808B97E00B5208D /* Icon_MicrophoneDenied_DarkMode_256x256.png in Resources */ = {isa = PBXBuildFile; fileRef = ABA67CB32808B97D00B5208D /* Icon_MicrophoneDenied_DarkMode_256x256.png */; }; - ABA67CEB2808B97E00B5208D /* Icon_MicrophoneDenied_DarkMode_256x256.png in Resources */ = {isa = PBXBuildFile; fileRef = ABA67CB32808B97D00B5208D /* Icon_MicrophoneDenied_DarkMode_256x256.png */; }; ABA67CEC2808B97E00B5208D /* Icon_VolumeTwoThird_DarkMode_16x16.png in Resources */ = {isa = PBXBuildFile; fileRef = ABA67CB42808B97D00B5208D /* Icon_VolumeTwoThird_DarkMode_16x16.png */; }; ABA67CED2808B97E00B5208D /* Icon_VolumeTwoThird_DarkMode_16x16.png in Resources */ = {isa = PBXBuildFile; fileRef = ABA67CB42808B97D00B5208D /* Icon_VolumeTwoThird_DarkMode_16x16.png */; }; ABA67CEE2808B97E00B5208D /* Icon_VolumeTwoThird_DarkMode_16x16.png in Resources */ = {isa = PBXBuildFile; fileRef = ABA67CB42808B97D00B5208D /* Icon_VolumeTwoThird_DarkMode_16x16.png */; }; @@ -2760,16 +2760,6 @@ ABA67CF32808B97E00B5208D /* Icon_VolumeTwoThird_DarkMode_16x16.png in Resources */ = {isa = PBXBuildFile; fileRef = ABA67CB42808B97D00B5208D /* Icon_VolumeTwoThird_DarkMode_16x16.png */; }; ABA67CF42808B97E00B5208D /* Icon_VolumeTwoThird_DarkMode_16x16.png in Resources */ = {isa = PBXBuildFile; fileRef = ABA67CB42808B97D00B5208D /* Icon_VolumeTwoThird_DarkMode_16x16.png */; }; ABA67CF52808B97E00B5208D /* Icon_VolumeTwoThird_DarkMode_16x16.png in Resources */ = {isa = PBXBuildFile; fileRef = ABA67CB42808B97D00B5208D /* Icon_VolumeTwoThird_DarkMode_16x16.png */; }; - ABA67CF62808B97E00B5208D /* Icon_MicrophoneDenied_256x256.png in Resources */ = {isa = PBXBuildFile; fileRef = ABA67CB52808B97D00B5208D /* Icon_MicrophoneDenied_256x256.png */; }; - ABA67CF72808B97E00B5208D /* Icon_MicrophoneDenied_256x256.png in Resources */ = {isa = PBXBuildFile; fileRef = ABA67CB52808B97D00B5208D /* Icon_MicrophoneDenied_256x256.png */; }; - ABA67CF82808B97E00B5208D /* Icon_MicrophoneDenied_256x256.png in Resources */ = {isa = PBXBuildFile; fileRef = ABA67CB52808B97D00B5208D /* Icon_MicrophoneDenied_256x256.png */; }; - ABA67CF92808B97E00B5208D /* Icon_MicrophoneDenied_256x256.png in Resources */ = {isa = PBXBuildFile; fileRef = ABA67CB52808B97D00B5208D /* Icon_MicrophoneDenied_256x256.png */; }; - ABA67CFA2808B97E00B5208D /* Icon_MicrophoneDenied_256x256.png in Resources */ = {isa = PBXBuildFile; fileRef = ABA67CB52808B97D00B5208D /* Icon_MicrophoneDenied_256x256.png */; }; - ABA67CFB2808B97E00B5208D /* Icon_MicrophoneDenied_256x256.png in Resources */ = {isa = PBXBuildFile; fileRef = ABA67CB52808B97D00B5208D /* Icon_MicrophoneDenied_256x256.png */; }; - ABA67CFC2808B97E00B5208D /* Icon_MicrophoneDenied_256x256.png in Resources */ = {isa = PBXBuildFile; fileRef = ABA67CB52808B97D00B5208D /* Icon_MicrophoneDenied_256x256.png */; }; - ABA67CFD2808B97E00B5208D /* Icon_MicrophoneDenied_256x256.png in Resources */ = {isa = PBXBuildFile; fileRef = ABA67CB52808B97D00B5208D /* Icon_MicrophoneDenied_256x256.png */; }; - ABA67CFE2808B97E00B5208D /* Icon_MicrophoneDenied_256x256.png in Resources */ = {isa = PBXBuildFile; fileRef = ABA67CB52808B97D00B5208D /* Icon_MicrophoneDenied_256x256.png */; }; - ABA67CFF2808B97E00B5208D /* Icon_MicrophoneDenied_256x256.png in Resources */ = {isa = PBXBuildFile; fileRef = ABA67CB52808B97D00B5208D /* Icon_MicrophoneDenied_256x256.png */; }; ABA67D002808B97E00B5208D /* Icon_VolumeFull_DarkMode_16x16@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = ABA67CB62808B97D00B5208D /* Icon_VolumeFull_DarkMode_16x16@2x.png */; }; ABA67D012808B97E00B5208D /* Icon_VolumeFull_DarkMode_16x16@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = ABA67CB62808B97D00B5208D /* Icon_VolumeFull_DarkMode_16x16@2x.png */; }; ABA67D022808B97E00B5208D /* Icon_VolumeFull_DarkMode_16x16@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = ABA67CB62808B97D00B5208D /* Icon_VolumeFull_DarkMode_16x16@2x.png */; }; @@ -3564,6 +3554,7 @@ AB3BF4401E262943003E2B24 /* Metal.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Metal.framework; path = System/Library/Frameworks/Metal.framework; sourceTree = SDKROOT; }; AB3E34C7134AF4500056477A /* cocoa_output.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = cocoa_output.h; sourceTree = ""; }; AB3E34C8134AF4500056477A /* cocoa_output.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = cocoa_output.mm; sourceTree = ""; }; + AB3E8AEB2808FDF3007FF5C7 /* Icon_MicrophoneIdleNoHardware_256x256.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = Icon_MicrophoneIdleNoHardware_256x256.png; path = images/Icon_MicrophoneIdleNoHardware_256x256.png; sourceTree = ""; }; AB3FBD7E2176DE95005722D0 /* WifiSettingsPanel.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = WifiSettingsPanel.h; sourceTree = ""; }; AB3FBD7F2176DE95005722D0 /* WifiSettingsPanel.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; path = WifiSettingsPanel.mm; sourceTree = ""; }; AB4055ED169F59380016AC3E /* AsmJit.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AsmJit.h; sourceTree = ""; }; @@ -3764,9 +3755,7 @@ ABA67CB02808B97C00B5208D /* Icon_VolumeOneThird_DarkMode_16x16.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = Icon_VolumeOneThird_DarkMode_16x16.png; path = images/Icon_VolumeOneThird_DarkMode_16x16.png; sourceTree = ""; }; ABA67CB12808B97D00B5208D /* Icon_VolumeOneThird_DarkMode_16x16@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "Icon_VolumeOneThird_DarkMode_16x16@2x.png"; path = "images/Icon_VolumeOneThird_DarkMode_16x16@2x.png"; sourceTree = ""; }; ABA67CB22808B97D00B5208D /* Icon_VolumeTwoThird_DarkMode_16x16@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "Icon_VolumeTwoThird_DarkMode_16x16@2x.png"; path = "images/Icon_VolumeTwoThird_DarkMode_16x16@2x.png"; sourceTree = ""; }; - ABA67CB32808B97D00B5208D /* Icon_MicrophoneDenied_DarkMode_256x256.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = Icon_MicrophoneDenied_DarkMode_256x256.png; path = images/Icon_MicrophoneDenied_DarkMode_256x256.png; sourceTree = ""; }; ABA67CB42808B97D00B5208D /* Icon_VolumeTwoThird_DarkMode_16x16.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = Icon_VolumeTwoThird_DarkMode_16x16.png; path = images/Icon_VolumeTwoThird_DarkMode_16x16.png; sourceTree = ""; }; - ABA67CB52808B97D00B5208D /* Icon_MicrophoneDenied_256x256.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = Icon_MicrophoneDenied_256x256.png; path = images/Icon_MicrophoneDenied_256x256.png; sourceTree = ""; }; ABA67CB62808B97D00B5208D /* Icon_VolumeFull_DarkMode_16x16@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "Icon_VolumeFull_DarkMode_16x16@2x.png"; path = "images/Icon_VolumeFull_DarkMode_16x16@2x.png"; sourceTree = ""; }; ABA67CB72808B97E00B5208D /* Icon_VolumeFull_DarkMode_16x16.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = Icon_VolumeFull_DarkMode_16x16.png; path = images/Icon_VolumeFull_DarkMode_16x16.png; sourceTree = ""; }; ABA67CB82808B97E00B5208D /* Icon_MicrophoneOff_DarkMode_256x256.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = Icon_MicrophoneOff_DarkMode_256x256.png; path = images/Icon_MicrophoneOff_DarkMode_256x256.png; sourceTree = ""; }; @@ -5179,10 +5168,9 @@ ABB0FBC81A9EED350060C55A /* Icon_MicrophoneBlack_256x256.png */, ABB0FBC91A9EED350060C55A /* Icon_MicrophoneBlueGlow_256x256.png */, ABC503AC1AAC2B71002FCD43 /* Icon_MicrophoneDarkGreen_256x256.png */, - ABA67CB52808B97D00B5208D /* Icon_MicrophoneDenied_256x256.png */, - ABA67CB32808B97D00B5208D /* Icon_MicrophoneDenied_DarkMode_256x256.png */, ABB0FBD81A9FD0260060C55A /* Icon_MicrophoneGray_256x256.png */, ABB0FBCA1A9EED350060C55A /* Icon_MicrophoneGreen_256x256.png */, + AB3E8AEB2808FDF3007FF5C7 /* Icon_MicrophoneIdleNoHardware_256x256.png */, ABA67CB82808B97E00B5208D /* Icon_MicrophoneOff_DarkMode_256x256.png */, ABB0FBCB1A9EED350060C55A /* Icon_MicrophoneRed_256x256.png */, AB0F29A014BE7213009ABC6F /* Icon_OpenROM_420x420.png */, @@ -5959,7 +5947,6 @@ ABA67D162808B97E00B5208D /* Icon_MicrophoneOff_DarkMode_256x256.png in Resources */, 8C43E75127E3CD0100A35F65 /* InfoPlist.strings in Resources */, 8C43E75227E3CD0100A35F65 /* MainMenu.xib in Resources */, - ABA67CF82808B97E00B5208D /* Icon_MicrophoneDenied_256x256.png in Resources */, 8C43E75327E3CD0100A35F65 /* Localizable.strings in Resources */, 8C43E75427E3CD0100A35F65 /* Icon_ActionReplay_32x32.png in Resources */, 8C43E75527E3CD0100A35F65 /* Icon_CodeBreaker_32x32.png in Resources */, @@ -6026,6 +6013,7 @@ 8C43E78C27E3CD0100A35F65 /* Icon_DSButtonB_420x420.png in Resources */, 8C43E78D27E3CD0100A35F65 /* Icon_Piano_256x256.png in Resources */, 8C43E78E27E3CD0100A35F65 /* Icon_FrameAdvance_420x420.png in Resources */, + AB3E8AEE2808FDF4007FF5C7 /* Icon_MicrophoneIdleNoHardware_256x256.png in Resources */, 8C43E78F27E3CD0100A35F65 /* Icon_DSButtonL_420x420.png in Resources */, 8C43E79027E3CD0100A35F65 /* Icon_DSButtonR_420x420.png in Resources */, 8C43E79127E3CD0100A35F65 /* Icon_DSButtonSelect_420x420.png in Resources */, @@ -6051,7 +6039,6 @@ 8C43E7A427E3CD0100A35F65 /* Icon_MicrophoneRed_256x256.png in Resources */, 8C43E7A527E3CD0100A35F65 /* Icon_GuitarGrip_Button_Red_512x512.png in Resources */, 8C43E7A627E3CD0100A35F65 /* SourceSansPro-Bold.otf in Resources */, - ABA67CE42808B97E00B5208D /* Icon_MicrophoneDenied_DarkMode_256x256.png in Resources */, 8C43E7A727E3CD0100A35F65 /* Image_GuitarGrip.png in Resources */, 8C43E7A827E3CD0100A35F65 /* Icon_GuitarGrip_Button_Yellow_512x512.png in Resources */, 8C43E7A927E3CD0100A35F65 /* README.MAC in Resources */, @@ -6079,7 +6066,6 @@ ABA67D172808B97E00B5208D /* Icon_MicrophoneOff_DarkMode_256x256.png in Resources */, 8C43E8AF27E3CD4C00A35F65 /* InfoPlist.strings in Resources */, 8C43E8B027E3CD4C00A35F65 /* MainMenu.xib in Resources */, - ABA67CF92808B97E00B5208D /* Icon_MicrophoneDenied_256x256.png in Resources */, 8C43E8B127E3CD4C00A35F65 /* Localizable.strings in Resources */, 8C43E8B227E3CD4C00A35F65 /* Icon_ActionReplay_32x32.png in Resources */, 8C43E8B327E3CD4C00A35F65 /* Icon_CodeBreaker_32x32.png in Resources */, @@ -6146,6 +6132,7 @@ 8C43E8EA27E3CD4C00A35F65 /* Icon_DSButtonB_420x420.png in Resources */, 8C43E8EB27E3CD4C00A35F65 /* Icon_Piano_256x256.png in Resources */, 8C43E8EC27E3CD4C00A35F65 /* Icon_FrameAdvance_420x420.png in Resources */, + AB3E8AEF2808FDF4007FF5C7 /* Icon_MicrophoneIdleNoHardware_256x256.png in Resources */, 8C43E8ED27E3CD4C00A35F65 /* Icon_DSButtonL_420x420.png in Resources */, 8C43E8EE27E3CD4C00A35F65 /* Icon_DSButtonR_420x420.png in Resources */, 8C43E8EF27E3CD4C00A35F65 /* Icon_DSButtonSelect_420x420.png in Resources */, @@ -6171,7 +6158,6 @@ 8C43E90227E3CD4C00A35F65 /* Icon_MicrophoneRed_256x256.png in Resources */, 8C43E90327E3CD4C00A35F65 /* Icon_GuitarGrip_Button_Red_512x512.png in Resources */, 8C43E90427E3CD4C00A35F65 /* SourceSansPro-Bold.otf in Resources */, - ABA67CE52808B97E00B5208D /* Icon_MicrophoneDenied_DarkMode_256x256.png in Resources */, 8C43E90527E3CD4C00A35F65 /* Image_GuitarGrip.png in Resources */, 8C43E90627E3CD4C00A35F65 /* Icon_GuitarGrip_Button_Yellow_512x512.png in Resources */, 8C43E90727E3CD4C00A35F65 /* README.MAC in Resources */, @@ -6199,7 +6185,6 @@ ABA67D1D2808B97E00B5208D /* Icon_MicrophoneOff_DarkMode_256x256.png in Resources */, 8CCD83C227E40B730024BDD5 /* InfoPlist.strings in Resources */, 8CCD83C327E40B730024BDD5 /* MainMenu.xib in Resources */, - ABA67CFF2808B97E00B5208D /* Icon_MicrophoneDenied_256x256.png in Resources */, 8CCD83C427E40B730024BDD5 /* Localizable.strings in Resources */, 8CCD83C527E40B730024BDD5 /* Icon_ActionReplay_32x32.png in Resources */, 8CCD83C627E40B730024BDD5 /* Icon_CodeBreaker_32x32.png in Resources */, @@ -6266,6 +6251,7 @@ 8CCD83FD27E40B730024BDD5 /* Icon_DSButtonB_420x420.png in Resources */, 8CCD83FE27E40B730024BDD5 /* Icon_Piano_256x256.png in Resources */, 8CCD83FF27E40B730024BDD5 /* Icon_FrameAdvance_420x420.png in Resources */, + AB3E8AF52808FDF4007FF5C7 /* Icon_MicrophoneIdleNoHardware_256x256.png in Resources */, 8CCD840027E40B730024BDD5 /* Icon_DSButtonL_420x420.png in Resources */, 8CCD840127E40B730024BDD5 /* Icon_DSButtonR_420x420.png in Resources */, 8CCD840227E40B730024BDD5 /* Icon_DSButtonSelect_420x420.png in Resources */, @@ -6291,7 +6277,6 @@ 8CCD841527E40B730024BDD5 /* Icon_MicrophoneRed_256x256.png in Resources */, 8CCD841627E40B730024BDD5 /* Icon_GuitarGrip_Button_Red_512x512.png in Resources */, 8CCD841727E40B730024BDD5 /* SourceSansPro-Bold.otf in Resources */, - ABA67CEB2808B97E00B5208D /* Icon_MicrophoneDenied_DarkMode_256x256.png in Resources */, 8CCD841827E40B730024BDD5 /* Image_GuitarGrip.png in Resources */, 8CCD841927E40B730024BDD5 /* Icon_GuitarGrip_Button_Yellow_512x512.png in Resources */, 8CCD841A27E40B730024BDD5 /* README.MAC in Resources */, @@ -6319,7 +6304,6 @@ ABA67D1B2808B97E00B5208D /* Icon_MicrophoneOff_DarkMode_256x256.png in Resources */, AB36C74227F2C8AE00C763C8 /* InfoPlist.strings in Resources */, AB36C74327F2C8AE00C763C8 /* MainMenu.xib in Resources */, - ABA67CFD2808B97E00B5208D /* Icon_MicrophoneDenied_256x256.png in Resources */, AB36C74427F2C8AE00C763C8 /* Localizable.strings in Resources */, AB36C74527F2C8AE00C763C8 /* Icon_ActionReplay_32x32.png in Resources */, AB36C74627F2C8AE00C763C8 /* Icon_CodeBreaker_32x32.png in Resources */, @@ -6386,6 +6370,7 @@ AB36C77D27F2C8AE00C763C8 /* Icon_DSButtonB_420x420.png in Resources */, AB36C77E27F2C8AE00C763C8 /* Icon_Piano_256x256.png in Resources */, AB36C77F27F2C8AE00C763C8 /* Icon_FrameAdvance_420x420.png in Resources */, + AB3E8AF32808FDF4007FF5C7 /* Icon_MicrophoneIdleNoHardware_256x256.png in Resources */, AB36C78027F2C8AE00C763C8 /* Icon_DSButtonL_420x420.png in Resources */, AB36C78127F2C8AE00C763C8 /* Icon_DSButtonR_420x420.png in Resources */, AB36C78227F2C8AE00C763C8 /* Icon_DSButtonSelect_420x420.png in Resources */, @@ -6411,7 +6396,6 @@ AB36C79527F2C8AE00C763C8 /* Icon_MicrophoneRed_256x256.png in Resources */, AB36C79627F2C8AE00C763C8 /* Icon_GuitarGrip_Button_Red_512x512.png in Resources */, AB36C79727F2C8AE00C763C8 /* SourceSansPro-Bold.otf in Resources */, - ABA67CE92808B97E00B5208D /* Icon_MicrophoneDenied_DarkMode_256x256.png in Resources */, AB36C79827F2C8AE00C763C8 /* Image_GuitarGrip.png in Resources */, AB36C79927F2C8AE00C763C8 /* Icon_GuitarGrip_Button_Yellow_512x512.png in Resources */, AB36C79A27F2C8AE00C763C8 /* README.MAC in Resources */, @@ -6439,7 +6423,6 @@ ABA67D1A2808B97E00B5208D /* Icon_MicrophoneOff_DarkMode_256x256.png in Resources */, AB4979C827F2E97A00E8A244 /* InfoPlist.strings in Resources */, AB4979C927F2E97A00E8A244 /* MainMenu.xib in Resources */, - ABA67CFC2808B97E00B5208D /* Icon_MicrophoneDenied_256x256.png in Resources */, AB4979CA27F2E97A00E8A244 /* Localizable.strings in Resources */, AB4979CB27F2E97A00E8A244 /* Icon_ActionReplay_32x32.png in Resources */, AB4979CC27F2E97A00E8A244 /* Icon_CodeBreaker_32x32.png in Resources */, @@ -6506,6 +6489,7 @@ AB497A0327F2E97A00E8A244 /* Icon_DSButtonB_420x420.png in Resources */, AB497A0427F2E97A00E8A244 /* Icon_Piano_256x256.png in Resources */, AB497A0527F2E97A00E8A244 /* Icon_FrameAdvance_420x420.png in Resources */, + AB3E8AF22808FDF4007FF5C7 /* Icon_MicrophoneIdleNoHardware_256x256.png in Resources */, AB497A0627F2E97A00E8A244 /* Icon_DSButtonL_420x420.png in Resources */, AB497A0727F2E97A00E8A244 /* Icon_DSButtonR_420x420.png in Resources */, AB497A0827F2E97A00E8A244 /* Icon_DSButtonSelect_420x420.png in Resources */, @@ -6531,7 +6515,6 @@ AB497A1B27F2E97A00E8A244 /* Icon_MicrophoneRed_256x256.png in Resources */, AB497A1C27F2E97A00E8A244 /* Icon_GuitarGrip_Button_Red_512x512.png in Resources */, AB497A1D27F2E97A00E8A244 /* SourceSansPro-Bold.otf in Resources */, - ABA67CE82808B97E00B5208D /* Icon_MicrophoneDenied_DarkMode_256x256.png in Resources */, AB497A1E27F2E97A00E8A244 /* Image_GuitarGrip.png in Resources */, AB497A1F27F2E97A00E8A244 /* Icon_GuitarGrip_Button_Yellow_512x512.png in Resources */, AB497A2027F2E97A00E8A244 /* README.MAC in Resources */, @@ -6559,7 +6542,6 @@ ABA67D192808B97E00B5208D /* Icon_MicrophoneOff_DarkMode_256x256.png in Resources */, AB79014D215B84F20082AE82 /* InfoPlist.strings in Resources */, AB79014E215B84F20082AE82 /* MainMenu.xib in Resources */, - ABA67CFB2808B97E00B5208D /* Icon_MicrophoneDenied_256x256.png in Resources */, AB79014F215B84F20082AE82 /* Localizable.strings in Resources */, AB790150215B84F20082AE82 /* Icon_ActionReplay_32x32.png in Resources */, AB790151215B84F20082AE82 /* Icon_CodeBreaker_32x32.png in Resources */, @@ -6626,6 +6608,7 @@ AB790188215B84F20082AE82 /* Icon_DSButtonB_420x420.png in Resources */, AB790189215B84F20082AE82 /* Icon_Piano_256x256.png in Resources */, AB79018A215B84F20082AE82 /* Icon_FrameAdvance_420x420.png in Resources */, + AB3E8AF12808FDF4007FF5C7 /* Icon_MicrophoneIdleNoHardware_256x256.png in Resources */, AB79018B215B84F20082AE82 /* Icon_DSButtonL_420x420.png in Resources */, AB79018C215B84F20082AE82 /* Icon_DSButtonR_420x420.png in Resources */, AB79018D215B84F20082AE82 /* Icon_DSButtonSelect_420x420.png in Resources */, @@ -6651,7 +6634,6 @@ AB7901A0215B84F20082AE82 /* Icon_MicrophoneRed_256x256.png in Resources */, AB7901A1215B84F20082AE82 /* Icon_GuitarGrip_Button_Red_512x512.png in Resources */, AB7901A2215B84F20082AE82 /* SourceSansPro-Bold.otf in Resources */, - ABA67CE72808B97E00B5208D /* Icon_MicrophoneDenied_DarkMode_256x256.png in Resources */, AB7901A3215B84F20082AE82 /* Image_GuitarGrip.png in Resources */, AB7901A4215B84F20082AE82 /* Icon_GuitarGrip_Button_Yellow_512x512.png in Resources */, AB7901A5215B84F20082AE82 /* README.MAC in Resources */, @@ -6679,7 +6661,6 @@ ABA67D142808B97E00B5208D /* Icon_MicrophoneOff_DarkMode_256x256.png in Resources */, AB796CAF15CDCBA200C59155 /* InfoPlist.strings in Resources */, AB796CB015CDCBA200C59155 /* MainMenu.xib in Resources */, - ABA67CF62808B97E00B5208D /* Icon_MicrophoneDenied_256x256.png in Resources */, AB796CB115CDCBA200C59155 /* Localizable.strings in Resources */, AB796CB215CDCBA200C59155 /* Icon_ActionReplay_32x32.png in Resources */, AB796CB315CDCBA200C59155 /* Icon_CodeBreaker_32x32.png in Resources */, @@ -6746,6 +6727,7 @@ AB796CD815CDCBA200C59155 /* Icon_DSButtonB_420x420.png in Resources */, AB681027187D4AEF0049F2C2 /* Icon_Piano_256x256.png in Resources */, ABDDF7C91898F032007583C1 /* Icon_FrameAdvance_420x420.png in Resources */, + AB3E8AEC2808FDF4007FF5C7 /* Icon_MicrophoneIdleNoHardware_256x256.png in Resources */, AB796CD915CDCBA200C59155 /* Icon_DSButtonL_420x420.png in Resources */, AB796CDA15CDCBA200C59155 /* Icon_DSButtonR_420x420.png in Resources */, AB796CDB15CDCBA200C59155 /* Icon_DSButtonSelect_420x420.png in Resources */, @@ -6771,7 +6753,6 @@ ABB0FBD51A9EED350060C55A /* Icon_MicrophoneRed_256x256.png in Resources */, AB68101F187D4AEF0049F2C2 /* Icon_GuitarGrip_Button_Red_512x512.png in Resources */, ABA7313B1BB5104200B26147 /* SourceSansPro-Bold.otf in Resources */, - ABA67CE22808B97E00B5208D /* Icon_MicrophoneDenied_DarkMode_256x256.png in Resources */, ABAB454F187CDB70007BE20C /* Image_GuitarGrip.png in Resources */, AB681021187D4AEF0049F2C2 /* Icon_GuitarGrip_Button_Yellow_512x512.png in Resources */, AB796CEC15CDCBA200C59155 /* README.MAC in Resources */, @@ -6799,7 +6780,6 @@ ABA67D182808B97E00B5208D /* Icon_MicrophoneOff_DarkMode_256x256.png in Resources */, AB79FFF0215B84E50082AE82 /* InfoPlist.strings in Resources */, AB79FFF1215B84E50082AE82 /* MainMenu.xib in Resources */, - ABA67CFA2808B97E00B5208D /* Icon_MicrophoneDenied_256x256.png in Resources */, AB79FFF2215B84E50082AE82 /* Localizable.strings in Resources */, AB79FFF3215B84E50082AE82 /* Icon_ActionReplay_32x32.png in Resources */, AB79FFF4215B84E50082AE82 /* Icon_CodeBreaker_32x32.png in Resources */, @@ -6866,6 +6846,7 @@ AB79002B215B84E50082AE82 /* Icon_DSButtonB_420x420.png in Resources */, AB79002C215B84E50082AE82 /* Icon_Piano_256x256.png in Resources */, AB79002D215B84E50082AE82 /* Icon_FrameAdvance_420x420.png in Resources */, + AB3E8AF02808FDF4007FF5C7 /* Icon_MicrophoneIdleNoHardware_256x256.png in Resources */, AB79002E215B84E50082AE82 /* Icon_DSButtonL_420x420.png in Resources */, AB79002F215B84E50082AE82 /* Icon_DSButtonR_420x420.png in Resources */, AB790030215B84E50082AE82 /* Icon_DSButtonSelect_420x420.png in Resources */, @@ -6891,7 +6872,6 @@ AB790043215B84E50082AE82 /* Icon_MicrophoneRed_256x256.png in Resources */, AB790044215B84E50082AE82 /* Icon_GuitarGrip_Button_Red_512x512.png in Resources */, AB790045215B84E50082AE82 /* SourceSansPro-Bold.otf in Resources */, - ABA67CE62808B97E00B5208D /* Icon_MicrophoneDenied_DarkMode_256x256.png in Resources */, AB790046215B84E50082AE82 /* Image_GuitarGrip.png in Resources */, AB790047215B84E50082AE82 /* Icon_GuitarGrip_Button_Yellow_512x512.png in Resources */, AB790048215B84E50082AE82 /* README.MAC in Resources */, @@ -6919,7 +6899,6 @@ ABA67D152808B97E00B5208D /* Icon_MicrophoneOff_DarkMode_256x256.png in Resources */, AB8F3C221A53AC2600A80BF6 /* InfoPlist.strings in Resources */, AB8F3C231A53AC2600A80BF6 /* MainMenu.xib in Resources */, - ABA67CF72808B97E00B5208D /* Icon_MicrophoneDenied_256x256.png in Resources */, AB8F3C241A53AC2600A80BF6 /* Localizable.strings in Resources */, AB8F3C251A53AC2600A80BF6 /* Icon_ActionReplay_32x32.png in Resources */, AB8F3C261A53AC2600A80BF6 /* Icon_CodeBreaker_32x32.png in Resources */, @@ -6986,6 +6965,7 @@ AB8F3C541A53AC2600A80BF6 /* Icon_DSButtonB_420x420.png in Resources */, AB8F3C551A53AC2600A80BF6 /* Icon_Piano_256x256.png in Resources */, AB8F3C561A53AC2600A80BF6 /* Icon_FrameAdvance_420x420.png in Resources */, + AB3E8AED2808FDF4007FF5C7 /* Icon_MicrophoneIdleNoHardware_256x256.png in Resources */, AB8F3C571A53AC2600A80BF6 /* Icon_DSButtonL_420x420.png in Resources */, AB8F3C581A53AC2600A80BF6 /* Icon_DSButtonR_420x420.png in Resources */, AB8F3C591A53AC2600A80BF6 /* Icon_DSButtonSelect_420x420.png in Resources */, @@ -7011,7 +6991,6 @@ ABB0FBD71A9EED350060C55A /* Icon_MicrophoneRed_256x256.png in Resources */, AB8F3C6C1A53AC2600A80BF6 /* Icon_GuitarGrip_Button_Red_512x512.png in Resources */, ABA7313D1BB5104200B26147 /* SourceSansPro-Bold.otf in Resources */, - ABA67CE32808B97E00B5208D /* Icon_MicrophoneDenied_DarkMode_256x256.png in Resources */, AB8F3C6D1A53AC2600A80BF6 /* Image_GuitarGrip.png in Resources */, AB8F3C6E1A53AC2600A80BF6 /* Icon_GuitarGrip_Button_Yellow_512x512.png in Resources */, AB8F3C6F1A53AC2600A80BF6 /* README.MAC in Resources */, @@ -7048,7 +7027,6 @@ ABA67D1C2808B97E00B5208D /* Icon_MicrophoneOff_DarkMode_256x256.png in Resources */, ABD2CCF626E05CB000FB15F7 /* InfoPlist.strings in Resources */, ABD2CCF726E05CB000FB15F7 /* MainMenu.xib in Resources */, - ABA67CFE2808B97E00B5208D /* Icon_MicrophoneDenied_256x256.png in Resources */, ABD2CCF826E05CB000FB15F7 /* Localizable.strings in Resources */, ABD2CCF926E05CB000FB15F7 /* Icon_ActionReplay_32x32.png in Resources */, ABD2CCFA26E05CB000FB15F7 /* Icon_CodeBreaker_32x32.png in Resources */, @@ -7115,6 +7093,7 @@ ABD2CD3126E05CB000FB15F7 /* Icon_DSButtonB_420x420.png in Resources */, ABD2CD3226E05CB000FB15F7 /* Icon_Piano_256x256.png in Resources */, ABD2CD3326E05CB000FB15F7 /* Icon_FrameAdvance_420x420.png in Resources */, + AB3E8AF42808FDF4007FF5C7 /* Icon_MicrophoneIdleNoHardware_256x256.png in Resources */, ABD2CD3426E05CB000FB15F7 /* Icon_DSButtonL_420x420.png in Resources */, ABD2CD3526E05CB000FB15F7 /* Icon_DSButtonR_420x420.png in Resources */, ABD2CD3626E05CB000FB15F7 /* Icon_DSButtonSelect_420x420.png in Resources */, @@ -7140,7 +7119,6 @@ ABD2CD4926E05CB000FB15F7 /* Icon_MicrophoneRed_256x256.png in Resources */, ABD2CD4A26E05CB000FB15F7 /* Icon_GuitarGrip_Button_Red_512x512.png in Resources */, ABD2CD4B26E05CB000FB15F7 /* SourceSansPro-Bold.otf in Resources */, - ABA67CEA2808B97E00B5208D /* Icon_MicrophoneDenied_DarkMode_256x256.png in Resources */, ABD2CD4C26E05CB000FB15F7 /* Image_GuitarGrip.png in Resources */, ABD2CD4D26E05CB000FB15F7 /* Icon_GuitarGrip_Button_Yellow_512x512.png in Resources */, ABD2CD4E26E05CB000FB15F7 /* README.MAC in Resources */, diff --git a/desmume/src/frontend/cocoa/DeSmuME (XCode 3).xcodeproj/project.pbxproj b/desmume/src/frontend/cocoa/DeSmuME (XCode 3).xcodeproj/project.pbxproj index 34eb5b9b5..baa1bd541 100755 --- a/desmume/src/frontend/cocoa/DeSmuME (XCode 3).xcodeproj/project.pbxproj +++ b/desmume/src/frontend/cocoa/DeSmuME (XCode 3).xcodeproj/project.pbxproj @@ -838,6 +838,11 @@ AB6A198416CAD66900384EED /* cocoa_GPU.mm in Sources */ = {isa = PBXBuildFile; fileRef = AB6A198216CAD66900384EED /* cocoa_GPU.mm */; }; AB6A198516CAD66900384EED /* cocoa_GPU.mm in Sources */ = {isa = PBXBuildFile; fileRef = AB6A198216CAD66900384EED /* cocoa_GPU.mm */; }; AB6A198616CAD66900384EED /* cocoa_GPU.mm in Sources */ = {isa = PBXBuildFile; fileRef = AB6A198216CAD66900384EED /* cocoa_GPU.mm */; }; + AB6D78942809FA43007C6B0A /* Icon_MicrophoneIdleNoHardware_256x256.png in Resources */ = {isa = PBXBuildFile; fileRef = AB6D78932809FA43007C6B0A /* Icon_MicrophoneIdleNoHardware_256x256.png */; }; + AB6D78952809FA43007C6B0A /* Icon_MicrophoneIdleNoHardware_256x256.png in Resources */ = {isa = PBXBuildFile; fileRef = AB6D78932809FA43007C6B0A /* Icon_MicrophoneIdleNoHardware_256x256.png */; }; + AB6D78962809FA43007C6B0A /* Icon_MicrophoneIdleNoHardware_256x256.png in Resources */ = {isa = PBXBuildFile; fileRef = AB6D78932809FA43007C6B0A /* Icon_MicrophoneIdleNoHardware_256x256.png */; }; + AB6D78972809FA43007C6B0A /* Icon_MicrophoneIdleNoHardware_256x256.png in Resources */ = {isa = PBXBuildFile; fileRef = AB6D78932809FA43007C6B0A /* Icon_MicrophoneIdleNoHardware_256x256.png */; }; + AB6D78982809FA43007C6B0A /* Icon_MicrophoneIdleNoHardware_256x256.png in Resources */ = {isa = PBXBuildFile; fileRef = AB6D78932809FA43007C6B0A /* Icon_MicrophoneIdleNoHardware_256x256.png */; }; AB700DBA16CDDBC400FBD336 /* DisplayWindow.xib in Resources */ = {isa = PBXBuildFile; fileRef = AB700DB816CDDBC400FBD336 /* DisplayWindow.xib */; }; AB700DBB16CDDBC400FBD336 /* DisplayWindow.xib in Resources */ = {isa = PBXBuildFile; fileRef = AB700DB816CDDBC400FBD336 /* DisplayWindow.xib */; }; AB700DBC16CDDBC400FBD336 /* DisplayWindow.xib in Resources */ = {isa = PBXBuildFile; fileRef = AB700DB816CDDBC400FBD336 /* DisplayWindow.xib */; }; @@ -1159,8 +1164,6 @@ ABA1658F2808BD6A00C8CFF5 /* Icon_ActionReplay_32x32.png in Resources */ = {isa = PBXBuildFile; fileRef = ABA165812808BD6A00C8CFF5 /* Icon_ActionReplay_32x32.png */; }; ABA165902808BD6A00C8CFF5 /* Icon_CodeBreaker_32x32.png in Resources */ = {isa = PBXBuildFile; fileRef = ABA165822808BD6A00C8CFF5 /* Icon_CodeBreaker_32x32.png */; }; ABA165912808BD6A00C8CFF5 /* Icon_DeSmuME_32x32.png in Resources */ = {isa = PBXBuildFile; fileRef = ABA165832808BD6A00C8CFF5 /* Icon_DeSmuME_32x32.png */; }; - ABA165922808BD6A00C8CFF5 /* Icon_MicrophoneDenied_256x256.png in Resources */ = {isa = PBXBuildFile; fileRef = ABA165842808BD6A00C8CFF5 /* Icon_MicrophoneDenied_256x256.png */; }; - ABA165932808BD6A00C8CFF5 /* Icon_MicrophoneDenied_DarkMode_256x256.png in Resources */ = {isa = PBXBuildFile; fileRef = ABA165852808BD6A00C8CFF5 /* Icon_MicrophoneDenied_DarkMode_256x256.png */; }; ABA165942808BD6A00C8CFF5 /* Icon_MicrophoneOff_DarkMode_256x256.png in Resources */ = {isa = PBXBuildFile; fileRef = ABA165862808BD6A00C8CFF5 /* Icon_MicrophoneOff_DarkMode_256x256.png */; }; ABA165952808BD6A00C8CFF5 /* Icon_VolumeFull_DarkMode_16x16.png in Resources */ = {isa = PBXBuildFile; fileRef = ABA165872808BD6A00C8CFF5 /* Icon_VolumeFull_DarkMode_16x16.png */; }; ABA165962808BD6A00C8CFF5 /* Icon_VolumeFull_DarkMode_16x16@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = ABA165882808BD6A00C8CFF5 /* Icon_VolumeFull_DarkMode_16x16@2x.png */; }; @@ -1173,8 +1176,6 @@ ABA1659D2808BD6A00C8CFF5 /* Icon_ActionReplay_32x32.png in Resources */ = {isa = PBXBuildFile; fileRef = ABA165812808BD6A00C8CFF5 /* Icon_ActionReplay_32x32.png */; }; ABA1659E2808BD6A00C8CFF5 /* Icon_CodeBreaker_32x32.png in Resources */ = {isa = PBXBuildFile; fileRef = ABA165822808BD6A00C8CFF5 /* Icon_CodeBreaker_32x32.png */; }; ABA1659F2808BD6A00C8CFF5 /* Icon_DeSmuME_32x32.png in Resources */ = {isa = PBXBuildFile; fileRef = ABA165832808BD6A00C8CFF5 /* Icon_DeSmuME_32x32.png */; }; - ABA165A02808BD6A00C8CFF5 /* Icon_MicrophoneDenied_256x256.png in Resources */ = {isa = PBXBuildFile; fileRef = ABA165842808BD6A00C8CFF5 /* Icon_MicrophoneDenied_256x256.png */; }; - ABA165A12808BD6A00C8CFF5 /* Icon_MicrophoneDenied_DarkMode_256x256.png in Resources */ = {isa = PBXBuildFile; fileRef = ABA165852808BD6A00C8CFF5 /* Icon_MicrophoneDenied_DarkMode_256x256.png */; }; ABA165A22808BD6A00C8CFF5 /* Icon_MicrophoneOff_DarkMode_256x256.png in Resources */ = {isa = PBXBuildFile; fileRef = ABA165862808BD6A00C8CFF5 /* Icon_MicrophoneOff_DarkMode_256x256.png */; }; ABA165A32808BD6A00C8CFF5 /* Icon_VolumeFull_DarkMode_16x16.png in Resources */ = {isa = PBXBuildFile; fileRef = ABA165872808BD6A00C8CFF5 /* Icon_VolumeFull_DarkMode_16x16.png */; }; ABA165A42808BD6A00C8CFF5 /* Icon_VolumeFull_DarkMode_16x16@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = ABA165882808BD6A00C8CFF5 /* Icon_VolumeFull_DarkMode_16x16@2x.png */; }; @@ -1187,8 +1188,6 @@ ABA165AB2808BD6A00C8CFF5 /* Icon_ActionReplay_32x32.png in Resources */ = {isa = PBXBuildFile; fileRef = ABA165812808BD6A00C8CFF5 /* Icon_ActionReplay_32x32.png */; }; ABA165AC2808BD6A00C8CFF5 /* Icon_CodeBreaker_32x32.png in Resources */ = {isa = PBXBuildFile; fileRef = ABA165822808BD6A00C8CFF5 /* Icon_CodeBreaker_32x32.png */; }; ABA165AD2808BD6A00C8CFF5 /* Icon_DeSmuME_32x32.png in Resources */ = {isa = PBXBuildFile; fileRef = ABA165832808BD6A00C8CFF5 /* Icon_DeSmuME_32x32.png */; }; - ABA165AE2808BD6A00C8CFF5 /* Icon_MicrophoneDenied_256x256.png in Resources */ = {isa = PBXBuildFile; fileRef = ABA165842808BD6A00C8CFF5 /* Icon_MicrophoneDenied_256x256.png */; }; - ABA165AF2808BD6A00C8CFF5 /* Icon_MicrophoneDenied_DarkMode_256x256.png in Resources */ = {isa = PBXBuildFile; fileRef = ABA165852808BD6A00C8CFF5 /* Icon_MicrophoneDenied_DarkMode_256x256.png */; }; ABA165B02808BD6A00C8CFF5 /* Icon_MicrophoneOff_DarkMode_256x256.png in Resources */ = {isa = PBXBuildFile; fileRef = ABA165862808BD6A00C8CFF5 /* Icon_MicrophoneOff_DarkMode_256x256.png */; }; ABA165B12808BD6A00C8CFF5 /* Icon_VolumeFull_DarkMode_16x16.png in Resources */ = {isa = PBXBuildFile; fileRef = ABA165872808BD6A00C8CFF5 /* Icon_VolumeFull_DarkMode_16x16.png */; }; ABA165B22808BD6A00C8CFF5 /* Icon_VolumeFull_DarkMode_16x16@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = ABA165882808BD6A00C8CFF5 /* Icon_VolumeFull_DarkMode_16x16@2x.png */; }; @@ -1201,8 +1200,6 @@ ABA165B92808BD6A00C8CFF5 /* Icon_ActionReplay_32x32.png in Resources */ = {isa = PBXBuildFile; fileRef = ABA165812808BD6A00C8CFF5 /* Icon_ActionReplay_32x32.png */; }; ABA165BA2808BD6A00C8CFF5 /* Icon_CodeBreaker_32x32.png in Resources */ = {isa = PBXBuildFile; fileRef = ABA165822808BD6A00C8CFF5 /* Icon_CodeBreaker_32x32.png */; }; ABA165BB2808BD6A00C8CFF5 /* Icon_DeSmuME_32x32.png in Resources */ = {isa = PBXBuildFile; fileRef = ABA165832808BD6A00C8CFF5 /* Icon_DeSmuME_32x32.png */; }; - ABA165BC2808BD6A00C8CFF5 /* Icon_MicrophoneDenied_256x256.png in Resources */ = {isa = PBXBuildFile; fileRef = ABA165842808BD6A00C8CFF5 /* Icon_MicrophoneDenied_256x256.png */; }; - ABA165BD2808BD6A00C8CFF5 /* Icon_MicrophoneDenied_DarkMode_256x256.png in Resources */ = {isa = PBXBuildFile; fileRef = ABA165852808BD6A00C8CFF5 /* Icon_MicrophoneDenied_DarkMode_256x256.png */; }; ABA165BE2808BD6A00C8CFF5 /* Icon_MicrophoneOff_DarkMode_256x256.png in Resources */ = {isa = PBXBuildFile; fileRef = ABA165862808BD6A00C8CFF5 /* Icon_MicrophoneOff_DarkMode_256x256.png */; }; ABA165BF2808BD6A00C8CFF5 /* Icon_VolumeFull_DarkMode_16x16.png in Resources */ = {isa = PBXBuildFile; fileRef = ABA165872808BD6A00C8CFF5 /* Icon_VolumeFull_DarkMode_16x16.png */; }; ABA165C02808BD6A00C8CFF5 /* Icon_VolumeFull_DarkMode_16x16@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = ABA165882808BD6A00C8CFF5 /* Icon_VolumeFull_DarkMode_16x16@2x.png */; }; @@ -1215,8 +1212,6 @@ ABA165C72808BD6A00C8CFF5 /* Icon_ActionReplay_32x32.png in Resources */ = {isa = PBXBuildFile; fileRef = ABA165812808BD6A00C8CFF5 /* Icon_ActionReplay_32x32.png */; }; ABA165C82808BD6A00C8CFF5 /* Icon_CodeBreaker_32x32.png in Resources */ = {isa = PBXBuildFile; fileRef = ABA165822808BD6A00C8CFF5 /* Icon_CodeBreaker_32x32.png */; }; ABA165C92808BD6A00C8CFF5 /* Icon_DeSmuME_32x32.png in Resources */ = {isa = PBXBuildFile; fileRef = ABA165832808BD6A00C8CFF5 /* Icon_DeSmuME_32x32.png */; }; - ABA165CA2808BD6A00C8CFF5 /* Icon_MicrophoneDenied_256x256.png in Resources */ = {isa = PBXBuildFile; fileRef = ABA165842808BD6A00C8CFF5 /* Icon_MicrophoneDenied_256x256.png */; }; - ABA165CB2808BD6A00C8CFF5 /* Icon_MicrophoneDenied_DarkMode_256x256.png in Resources */ = {isa = PBXBuildFile; fileRef = ABA165852808BD6A00C8CFF5 /* Icon_MicrophoneDenied_DarkMode_256x256.png */; }; ABA165CC2808BD6A00C8CFF5 /* Icon_MicrophoneOff_DarkMode_256x256.png in Resources */ = {isa = PBXBuildFile; fileRef = ABA165862808BD6A00C8CFF5 /* Icon_MicrophoneOff_DarkMode_256x256.png */; }; ABA165CD2808BD6A00C8CFF5 /* Icon_VolumeFull_DarkMode_16x16.png in Resources */ = {isa = PBXBuildFile; fileRef = ABA165872808BD6A00C8CFF5 /* Icon_VolumeFull_DarkMode_16x16.png */; }; ABA165CE2808BD6A00C8CFF5 /* Icon_VolumeFull_DarkMode_16x16@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = ABA165882808BD6A00C8CFF5 /* Icon_VolumeFull_DarkMode_16x16@2x.png */; }; @@ -2057,6 +2052,7 @@ AB6A187B16C9951C00384EED /* EmuControllerDelegate.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = EmuControllerDelegate.mm; sourceTree = ""; }; AB6A198116CAD66900384EED /* cocoa_GPU.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = cocoa_GPU.h; sourceTree = ""; }; AB6A198216CAD66900384EED /* cocoa_GPU.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = cocoa_GPU.mm; sourceTree = ""; }; + AB6D78932809FA43007C6B0A /* Icon_MicrophoneIdleNoHardware_256x256.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = Icon_MicrophoneIdleNoHardware_256x256.png; path = images/Icon_MicrophoneIdleNoHardware_256x256.png; sourceTree = ""; }; AB6FBEF5139B6258007BB045 /* slot1_retail_nand.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = slot1_retail_nand.cpp; sourceTree = ""; }; AB6FE66A26E6F7C2002B2106 /* GPU_Operations_AVX2.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = GPU_Operations_AVX2.cpp; sourceTree = ""; }; AB6FE66B26E6F7C2002B2106 /* GPU_Operations_AVX2.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GPU_Operations_AVX2.h; sourceTree = ""; }; @@ -2092,8 +2088,6 @@ ABA165812808BD6A00C8CFF5 /* Icon_ActionReplay_32x32.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = Icon_ActionReplay_32x32.png; path = images/Icon_ActionReplay_32x32.png; sourceTree = ""; }; ABA165822808BD6A00C8CFF5 /* Icon_CodeBreaker_32x32.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = Icon_CodeBreaker_32x32.png; path = images/Icon_CodeBreaker_32x32.png; sourceTree = ""; }; ABA165832808BD6A00C8CFF5 /* Icon_DeSmuME_32x32.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = Icon_DeSmuME_32x32.png; path = images/Icon_DeSmuME_32x32.png; sourceTree = ""; }; - ABA165842808BD6A00C8CFF5 /* Icon_MicrophoneDenied_256x256.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = Icon_MicrophoneDenied_256x256.png; path = images/Icon_MicrophoneDenied_256x256.png; sourceTree = ""; }; - ABA165852808BD6A00C8CFF5 /* Icon_MicrophoneDenied_DarkMode_256x256.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = Icon_MicrophoneDenied_DarkMode_256x256.png; path = images/Icon_MicrophoneDenied_DarkMode_256x256.png; sourceTree = ""; }; ABA165862808BD6A00C8CFF5 /* Icon_MicrophoneOff_DarkMode_256x256.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = Icon_MicrophoneOff_DarkMode_256x256.png; path = images/Icon_MicrophoneOff_DarkMode_256x256.png; sourceTree = ""; }; ABA165872808BD6A00C8CFF5 /* Icon_VolumeFull_DarkMode_16x16.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = Icon_VolumeFull_DarkMode_16x16.png; path = images/Icon_VolumeFull_DarkMode_16x16.png; sourceTree = ""; }; ABA165882808BD6A00C8CFF5 /* Icon_VolumeFull_DarkMode_16x16@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = "Icon_VolumeFull_DarkMode_16x16@2x.png"; path = "images/Icon_VolumeFull_DarkMode_16x16@2x.png"; sourceTree = ""; }; @@ -3336,10 +3330,9 @@ AB1CC8161AA50C8D008B0A16 /* Icon_MicrophoneBlack_256x256.png */, AB1CC8171AA50C8D008B0A16 /* Icon_MicrophoneBlueGlow_256x256.png */, ABACB7391AAC46B20066F429 /* Icon_MicrophoneDarkGreen_256x256.png */, - ABA165842808BD6A00C8CFF5 /* Icon_MicrophoneDenied_256x256.png */, - ABA165852808BD6A00C8CFF5 /* Icon_MicrophoneDenied_DarkMode_256x256.png */, AB1CC8181AA50C8D008B0A16 /* Icon_MicrophoneGray_256x256.png */, AB1CC8191AA50C8D008B0A16 /* Icon_MicrophoneGreen_256x256.png */, + AB6D78932809FA43007C6B0A /* Icon_MicrophoneIdleNoHardware_256x256.png */, ABA165862808BD6A00C8CFF5 /* Icon_MicrophoneOff_DarkMode_256x256.png */, AB1CC81A1AA50C8D008B0A16 /* Icon_MicrophoneRed_256x256.png */, AB0F29A014BE7213009ABC6F /* Icon_OpenROM_420x420.png */, @@ -4011,8 +4004,6 @@ ABA1658F2808BD6A00C8CFF5 /* Icon_ActionReplay_32x32.png in Resources */, ABA165902808BD6A00C8CFF5 /* Icon_CodeBreaker_32x32.png in Resources */, ABA165912808BD6A00C8CFF5 /* Icon_DeSmuME_32x32.png in Resources */, - ABA165922808BD6A00C8CFF5 /* Icon_MicrophoneDenied_256x256.png in Resources */, - ABA165932808BD6A00C8CFF5 /* Icon_MicrophoneDenied_DarkMode_256x256.png in Resources */, ABA165942808BD6A00C8CFF5 /* Icon_MicrophoneOff_DarkMode_256x256.png in Resources */, ABA165952808BD6A00C8CFF5 /* Icon_VolumeFull_DarkMode_16x16.png in Resources */, ABA165962808BD6A00C8CFF5 /* Icon_VolumeFull_DarkMode_16x16@2x.png in Resources */, @@ -4022,6 +4013,7 @@ ABA1659A2808BD6A00C8CFF5 /* Icon_VolumeOneThird_DarkMode_16x16@2x.png in Resources */, ABA1659B2808BD6A00C8CFF5 /* Icon_VolumeTwoThird_DarkMode_16x16.png in Resources */, ABA1659C2808BD6A00C8CFF5 /* Icon_VolumeTwoThird_DarkMode_16x16@2x.png in Resources */, + AB6D78942809FA43007C6B0A /* Icon_MicrophoneIdleNoHardware_256x256.png in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -4131,8 +4123,6 @@ ABA1659D2808BD6A00C8CFF5 /* Icon_ActionReplay_32x32.png in Resources */, ABA1659E2808BD6A00C8CFF5 /* Icon_CodeBreaker_32x32.png in Resources */, ABA1659F2808BD6A00C8CFF5 /* Icon_DeSmuME_32x32.png in Resources */, - ABA165A02808BD6A00C8CFF5 /* Icon_MicrophoneDenied_256x256.png in Resources */, - ABA165A12808BD6A00C8CFF5 /* Icon_MicrophoneDenied_DarkMode_256x256.png in Resources */, ABA165A22808BD6A00C8CFF5 /* Icon_MicrophoneOff_DarkMode_256x256.png in Resources */, ABA165A32808BD6A00C8CFF5 /* Icon_VolumeFull_DarkMode_16x16.png in Resources */, ABA165A42808BD6A00C8CFF5 /* Icon_VolumeFull_DarkMode_16x16@2x.png in Resources */, @@ -4142,6 +4132,7 @@ ABA165A82808BD6A00C8CFF5 /* Icon_VolumeOneThird_DarkMode_16x16@2x.png in Resources */, ABA165A92808BD6A00C8CFF5 /* Icon_VolumeTwoThird_DarkMode_16x16.png in Resources */, ABA165AA2808BD6A00C8CFF5 /* Icon_VolumeTwoThird_DarkMode_16x16@2x.png in Resources */, + AB6D78952809FA43007C6B0A /* Icon_MicrophoneIdleNoHardware_256x256.png in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -4251,8 +4242,6 @@ ABA165C72808BD6A00C8CFF5 /* Icon_ActionReplay_32x32.png in Resources */, ABA165C82808BD6A00C8CFF5 /* Icon_CodeBreaker_32x32.png in Resources */, ABA165C92808BD6A00C8CFF5 /* Icon_DeSmuME_32x32.png in Resources */, - ABA165CA2808BD6A00C8CFF5 /* Icon_MicrophoneDenied_256x256.png in Resources */, - ABA165CB2808BD6A00C8CFF5 /* Icon_MicrophoneDenied_DarkMode_256x256.png in Resources */, ABA165CC2808BD6A00C8CFF5 /* Icon_MicrophoneOff_DarkMode_256x256.png in Resources */, ABA165CD2808BD6A00C8CFF5 /* Icon_VolumeFull_DarkMode_16x16.png in Resources */, ABA165CE2808BD6A00C8CFF5 /* Icon_VolumeFull_DarkMode_16x16@2x.png in Resources */, @@ -4262,6 +4251,7 @@ ABA165D22808BD6A00C8CFF5 /* Icon_VolumeOneThird_DarkMode_16x16@2x.png in Resources */, ABA165D32808BD6A00C8CFF5 /* Icon_VolumeTwoThird_DarkMode_16x16.png in Resources */, ABA165D42808BD6A00C8CFF5 /* Icon_VolumeTwoThird_DarkMode_16x16@2x.png in Resources */, + AB6D78982809FA43007C6B0A /* Icon_MicrophoneIdleNoHardware_256x256.png in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -4371,8 +4361,6 @@ ABA165B92808BD6A00C8CFF5 /* Icon_ActionReplay_32x32.png in Resources */, ABA165BA2808BD6A00C8CFF5 /* Icon_CodeBreaker_32x32.png in Resources */, ABA165BB2808BD6A00C8CFF5 /* Icon_DeSmuME_32x32.png in Resources */, - ABA165BC2808BD6A00C8CFF5 /* Icon_MicrophoneDenied_256x256.png in Resources */, - ABA165BD2808BD6A00C8CFF5 /* Icon_MicrophoneDenied_DarkMode_256x256.png in Resources */, ABA165BE2808BD6A00C8CFF5 /* Icon_MicrophoneOff_DarkMode_256x256.png in Resources */, ABA165BF2808BD6A00C8CFF5 /* Icon_VolumeFull_DarkMode_16x16.png in Resources */, ABA165C02808BD6A00C8CFF5 /* Icon_VolumeFull_DarkMode_16x16@2x.png in Resources */, @@ -4382,6 +4370,7 @@ ABA165C42808BD6A00C8CFF5 /* Icon_VolumeOneThird_DarkMode_16x16@2x.png in Resources */, ABA165C52808BD6A00C8CFF5 /* Icon_VolumeTwoThird_DarkMode_16x16.png in Resources */, ABA165C62808BD6A00C8CFF5 /* Icon_VolumeTwoThird_DarkMode_16x16@2x.png in Resources */, + AB6D78972809FA43007C6B0A /* Icon_MicrophoneIdleNoHardware_256x256.png in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -4491,8 +4480,6 @@ ABA165AB2808BD6A00C8CFF5 /* Icon_ActionReplay_32x32.png in Resources */, ABA165AC2808BD6A00C8CFF5 /* Icon_CodeBreaker_32x32.png in Resources */, ABA165AD2808BD6A00C8CFF5 /* Icon_DeSmuME_32x32.png in Resources */, - ABA165AE2808BD6A00C8CFF5 /* Icon_MicrophoneDenied_256x256.png in Resources */, - ABA165AF2808BD6A00C8CFF5 /* Icon_MicrophoneDenied_DarkMode_256x256.png in Resources */, ABA165B02808BD6A00C8CFF5 /* Icon_MicrophoneOff_DarkMode_256x256.png in Resources */, ABA165B12808BD6A00C8CFF5 /* Icon_VolumeFull_DarkMode_16x16.png in Resources */, ABA165B22808BD6A00C8CFF5 /* Icon_VolumeFull_DarkMode_16x16@2x.png in Resources */, @@ -4502,6 +4489,7 @@ ABA165B62808BD6A00C8CFF5 /* Icon_VolumeOneThird_DarkMode_16x16@2x.png in Resources */, ABA165B72808BD6A00C8CFF5 /* Icon_VolumeTwoThird_DarkMode_16x16.png in Resources */, ABA165B82808BD6A00C8CFF5 /* Icon_VolumeTwoThird_DarkMode_16x16@2x.png in Resources */, + AB6D78962809FA43007C6B0A /* Icon_MicrophoneIdleNoHardware_256x256.png in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; diff --git a/desmume/src/frontend/cocoa/cocoa_input.h b/desmume/src/frontend/cocoa/cocoa_input.h index 104873265..473627bc2 100644 --- a/desmume/src/frontend/cocoa/cocoa_input.h +++ b/desmume/src/frontend/cocoa/cocoa_input.h @@ -32,7 +32,8 @@ class AudioSampleBlockGenerator; - (void) doMicLevelUpdateFromController:(CocoaDSController *)cdsController; - (void) doMicHardwareStateChangedFromController:(CocoaDSController *)cdsController isEnabled:(BOOL)isHardwareEnabled - isLocked:(BOOL)isHardwareLocked; + isLocked:(BOOL)isHardwareLocked + isAuthorized:(BOOL)isAuthorized; - (void) doMicHardwareGainChangedFromController:(CocoaDSController *)cdsController gain:(float)gainValue; @@ -56,6 +57,7 @@ class AudioSampleBlockGenerator; @property (assign) BOOL autohold; @property (assign) NSInteger paddleAdjust; @property (assign) NSInteger stylusPressure; +@property (assign) BOOL hardwareMicAuthorization; @property (readonly) BOOL isHardwareMicAvailable; @property (readonly) BOOL isHardwareMicIdle; @property (readonly) BOOL isHardwareMicInClip; @@ -81,7 +83,8 @@ class AudioSampleBlockGenerator; - (void) handleMicHardwareStateChanged:(CoreAudioInputDeviceInfo *)deviceInfo isEnabled:(BOOL)isHardwareEnabled - isLocked:(BOOL)isHardwareLocked; + isLocked:(BOOL)isHardwareLocked + isAuthorized:(BOOL)isAuthorized; - (void) handleMicHardwareGainChanged:(float)gainValue; @end @@ -101,6 +104,9 @@ public: void StartHardwareMicDevice(); + virtual void SetHardwareMicAuthorized(bool isAuthorized); + virtual bool IsHardwareMicAuthorized(); + virtual bool IsHardwareMicAvailable(); virtual void ReportAverageMicLevel(); @@ -123,6 +129,7 @@ uint8_t CASampleReadCallback(void *inParam1, void *inParam2); void CAHardwareStateChangedCallback(CoreAudioInputDeviceInfo *deviceInfo, const bool isHardwareEnabled, const bool isHardwareLocked, + const bool isHardwareAuthorized, void *inParam1, void *inParam2); void CAHardwareGainChangedCallback(float normalizedGain, void *inParam1, void *inParam2); diff --git a/desmume/src/frontend/cocoa/cocoa_input.mm b/desmume/src/frontend/cocoa/cocoa_input.mm index 0f79456ea..1449904b9 100644 --- a/desmume/src/frontend/cocoa/cocoa_input.mm +++ b/desmume/src/frontend/cocoa/cocoa_input.mm @@ -34,6 +34,7 @@ @dynamic autohold; @dynamic paddleAdjust; @synthesize stylusPressure; +@dynamic hardwareMicAuthorization; @dynamic isHardwareMicAvailable; @dynamic isHardwareMicIdle; @dynamic isHardwareMicInClip; @@ -84,6 +85,16 @@ return inputHandler; } +- (void) setHardwareMicAuthorization:(BOOL)isAuthorized +{ + inputHandler->SetHardwareMicAuthorized((isAuthorized) ? true : false); +} + +- (BOOL) hardwareMicAuthorization +{ + return (inputHandler->IsHardwareMicAuthorized()) ? YES : NO; +} + - (BOOL) isHardwareMicAvailable { return (inputHandler->IsHardwareMicAvailable()) ? YES : NO; @@ -237,6 +248,7 @@ - (void) handleMicHardwareStateChanged:(CoreAudioInputDeviceInfo *)deviceInfo isEnabled:(BOOL)isHardwareEnabled isLocked:(BOOL)isHardwareLocked + isAuthorized:(BOOL)isAuthorized { NSAutoreleasePool *tempPool = [[NSAutoreleasePool alloc] init]; @@ -261,11 +273,12 @@ inputHandler->ClearAverageMicLevel(); inputHandler->ReportAverageMicLevel(); - if ( (delegate != nil) && [delegate respondsToSelector:@selector(doMicHardwareStateChangedFromController:isEnabled:isLocked:)] ) + if ( (delegate != nil) && [delegate respondsToSelector:@selector(doMicHardwareStateChangedFromController:isEnabled:isLocked:isAuthorized:)] ) { [[self delegate] doMicHardwareStateChangedFromController:self isEnabled:isHardwareEnabled - isLocked:isHardwareLocked]; + isLocked:isHardwareLocked + isAuthorized:isAuthorized]; } [tempPool release]; @@ -319,9 +332,19 @@ void MacInputHandler::StartHardwareMicDevice() this->_CAInputDevice->Start(); } +void MacInputHandler::SetHardwareMicAuthorized(bool isAuthorized) +{ + this->_CAInputDevice->SetHardwareAuthorized(isAuthorized); +} + +bool MacInputHandler::IsHardwareMicAuthorized() +{ + return this->_CAInputDevice->IsHardwareAuthorized(); +} + bool MacInputHandler::IsHardwareMicAvailable() { - return ( this->_CAInputDevice->IsHardwareEnabled() && !this->_CAInputDevice->IsHardwareLocked() ); + return ( this->_CAInputDevice->IsHardwareEnabled() && !this->_CAInputDevice->IsHardwareLocked() && this->_CAInputDevice->IsHardwareAuthorized() ); } void MacInputHandler::ReportAverageMicLevel() @@ -388,13 +411,15 @@ uint8_t CASampleReadCallback(void *inParam1, void *inParam2) void CAHardwareStateChangedCallback(CoreAudioInputDeviceInfo *deviceInfo, const bool isHardwareEnabled, const bool isHardwareLocked, + const bool isHardwareAuthorized, void *inParam1, void *inParam2) { CocoaDSController *cdsController = (CocoaDSController *)inParam1; [cdsController handleMicHardwareStateChanged:(CoreAudioInputDeviceInfo *)deviceInfo isEnabled:((isHardwareEnabled) ? YES : NO) - isLocked:((isHardwareLocked) ? YES : NO)]; + isLocked:((isHardwareLocked) ? YES : NO) + isAuthorized:((isHardwareAuthorized) ? YES : NO)]; } void CAHardwareGainChangedCallback(float normalizedGain, void *inParam1, void *inParam2) diff --git a/desmume/src/frontend/cocoa/coreaudiosound.cpp b/desmume/src/frontend/cocoa/coreaudiosound.cpp index 212d4e680..8bd184adb 100644 --- a/desmume/src/frontend/cocoa/coreaudiosound.cpp +++ b/desmume/src/frontend/cocoa/coreaudiosound.cpp @@ -49,6 +49,7 @@ CoreAudioInput::CoreAudioInput() _isPaused = true; _isHardwareEnabled = false; _isHardwareLocked = true; + _isHardwareAuthorized = true; _captureFrames = 0; _auHALInputDevice = NULL; @@ -514,7 +515,7 @@ void CoreAudioInput::Start() this->_isHardwareEnabled = false; } - if (this->IsHardwareEnabled() && !this->IsHardwareLocked() && !this->GetPauseState()) + if (this->IsHardwareEnabled() && this->IsHardwareAuthorized() && !this->IsHardwareLocked() && !this->GetPauseState()) { AudioOutputUnitStart(this->_auHALInputDevice); } @@ -532,6 +533,7 @@ void CoreAudioInput::Start() this->_hwStateChangedCallbackFunc(&this->_hwDeviceInfo, this->IsHardwareEnabled(), this->IsHardwareLocked(), + this->IsHardwareAuthorized(), this->_hwStateChangedCallbackParam1, this->_hwStateChangedCallbackParam2); } @@ -575,6 +577,22 @@ bool CoreAudioInput::IsHardwareLocked() const return this->_isHardwareLocked; } +bool CoreAudioInput::IsHardwareAuthorized() const +{ + return this->_isHardwareAuthorized; +} + +void CoreAudioInput::SetHardwareAuthorized(bool isAuthorized) +{ + const bool didStateChange = (this->_isHardwareAuthorized != isAuthorized); + + this->_isHardwareAuthorized = isAuthorized; + if (didStateChange) + { + this->SetPauseState( this->GetPauseState() ); + } +} + bool CoreAudioInput::GetPauseState() const { return this->_isPaused; @@ -582,22 +600,24 @@ bool CoreAudioInput::GetPauseState() const void CoreAudioInput::SetPauseState(bool pauseState) { - if (pauseState && !this->GetPauseState()) + if (!this->_isPaused && pauseState) { + this->_isPaused = true; + apple_unfairlock_lock(this->_unfairlockAUHAL); AudioOutputUnitStop(this->_auHALInputDevice); apple_unfairlock_unlock(this->_unfairlockAUHAL); AUGraphStop(this->_auGraph); } - else if (!pauseState && this->GetPauseState() && !this->IsHardwareLocked()) + else if (this->_isPaused && !pauseState) { + this->_isPaused = false; + apple_unfairlock_lock(this->_unfairlockAUHAL); AudioOutputUnitStart(this->_auHALInputDevice); apple_unfairlock_unlock(this->_unfairlockAUHAL); AUGraphStart(this->_auGraph); } - - this->_isPaused = (this->IsHardwareLocked()) ? true : pauseState; } float CoreAudioInput::GetNormalizedGain() const @@ -683,15 +703,18 @@ void CoreAudioInput::UpdateHardwareLock() hardwareLocked = true; } + const bool didStateChange = (this->_isHardwareLocked != hardwareLocked); this->_isHardwareLocked = hardwareLocked; - if (this->_isHardwareLocked && !this->GetPauseState()) + + if (didStateChange) { - this->SetPauseState(true); + this->SetPauseState( this->GetPauseState() ); } this->_hwStateChangedCallbackFunc(&this->_hwDeviceInfo, this->IsHardwareEnabled(), this->IsHardwareLocked(), + this->IsHardwareAuthorized(), this->_hwStateChangedCallbackParam1, this->_hwStateChangedCallbackParam2); } @@ -708,7 +731,7 @@ uint8_t CoreAudioInput::generateSample() { uint8_t theSample = MIC_NULL_SAMPLE_VALUE; - if (this->_isPaused) + if ( this->GetPauseState() || !this->IsHardwareEnabled() || this->IsHardwareLocked() || !this->IsHardwareAuthorized() ) { return theSample; } @@ -866,6 +889,7 @@ void CoreAudioInputAUHALChanged(void *inRefCon, void CoreAudioInputDefaultHardwareStateChangedCallback(CoreAudioInputDeviceInfo *deviceInfo, const bool isHardwareEnabled, const bool isHardwareLocked, + const bool isHardwareAuthorized, void *inParam1, void *inParam2) { diff --git a/desmume/src/frontend/cocoa/coreaudiosound.h b/desmume/src/frontend/cocoa/coreaudiosound.h index e849be7ec..f01ee1b0b 100644 --- a/desmume/src/frontend/cocoa/coreaudiosound.h +++ b/desmume/src/frontend/cocoa/coreaudiosound.h @@ -40,6 +40,7 @@ typedef CoreAudioInputDeviceInfo CoreAudioInputDeviceInfo; typedef void (*CoreAudioInputHardwareStateChangedCallback)(CoreAudioInputDeviceInfo *deviceInfo, const bool isHardwareEnabled, const bool isHardwareLocked, + const bool isHardwareAuthorized, void *inParam1, void *inParam2); @@ -75,6 +76,7 @@ private: CoreAudioInputDeviceInfo _hwDeviceInfo; bool _isHardwareEnabled; bool _isHardwareLocked; + bool _isHardwareAuthorized; OSStatus InitInputAUHAL(UInt32 deviceID); @@ -93,6 +95,8 @@ public: bool IsHardwareEnabled() const; bool IsHardwareLocked() const; + bool IsHardwareAuthorized() const; + void SetHardwareAuthorized(bool isAuthorized); bool GetPauseState() const; void SetPauseState(bool pauseState); float GetNormalizedGain() const; @@ -174,6 +178,7 @@ OSStatus CoreAudioOutputRenderCallback(void *inRefCon, void CoreAudioInputDefaultHardwareStateChangedCallback(CoreAudioInputDeviceInfo *deviceInfo, const bool isHardwareEnabled, const bool isHardwareLocked, + const bool isHardwareAuthorized, void *inParam1, void *inParam2); diff --git a/desmume/src/frontend/cocoa/images/Icon_MicrophoneDenied_256x256.png b/desmume/src/frontend/cocoa/images/Icon_MicrophoneDenied_256x256.png deleted file mode 100644 index c3f8ec694..000000000 Binary files a/desmume/src/frontend/cocoa/images/Icon_MicrophoneDenied_256x256.png and /dev/null differ diff --git a/desmume/src/frontend/cocoa/images/Icon_MicrophoneDenied_DarkMode_256x256.png b/desmume/src/frontend/cocoa/images/Icon_MicrophoneDenied_DarkMode_256x256.png deleted file mode 100644 index 3e50e1454..000000000 Binary files a/desmume/src/frontend/cocoa/images/Icon_MicrophoneDenied_DarkMode_256x256.png and /dev/null differ diff --git a/desmume/src/frontend/cocoa/images/Icon_MicrophoneGray_256x256.png b/desmume/src/frontend/cocoa/images/Icon_MicrophoneGray_256x256.png index 8bd05615a..b38d6290f 100644 Binary files a/desmume/src/frontend/cocoa/images/Icon_MicrophoneGray_256x256.png and b/desmume/src/frontend/cocoa/images/Icon_MicrophoneGray_256x256.png differ diff --git a/desmume/src/frontend/cocoa/images/Icon_MicrophoneIdleNoHardware_256x256.png b/desmume/src/frontend/cocoa/images/Icon_MicrophoneIdleNoHardware_256x256.png new file mode 100644 index 000000000..5512048b9 Binary files /dev/null and b/desmume/src/frontend/cocoa/images/Icon_MicrophoneIdleNoHardware_256x256.png differ diff --git a/desmume/src/frontend/cocoa/translations/English.lproj/DisplayWindow.xib b/desmume/src/frontend/cocoa/translations/English.lproj/DisplayWindow.xib index e266e34bf..fd04207d2 100644 --- a/desmume/src/frontend/cocoa/translations/English.lproj/DisplayWindow.xib +++ b/desmume/src/frontend/cocoa/translations/English.lproj/DisplayWindow.xib @@ -1,1783 +1,1679 @@ - - 1060 - 17G3025 - 851 - 1561.60.100 - 911.10 - - com.apple.InterfaceBuilder.CocoaPlugin - 851 - - - - com.apple.InterfaceBuilder.CocoaPlugin - - - PluginDependencyRecalculationVersion - - - - - DisplayWindowController - - - FirstResponder - - - NSApplication - - - 271 - 2 - {{830, 370}, {256, 408}} - 74973184 - DeSmuME - NSWindow - - - D5552DCE-722B-4ECB-8E0A-8B7CF76EAC70 - - - YES - YES - YES - YES - 1 - 2 - - - - 0135754F-463F-4625-9D27-DEF701AEF50E - - Open ROM - Open ROM - - - - NSImage - Icon_OpenROM_420x420 - - - - {0, 0} - {0, 0} - YES - YES - -1 - YES - 0 - - - - 039A3D54-15EA-4743-88B7-60517113C193 - - Toggle Displays - Toggle Displays - - - - NSImage - Icon_DisplayToggle_420x420 - - - - {0, 0} - {0, 0} - YES - YES - -1 - YES - 0 - - - - 2E728430-6055-404B-944F-25594ACBEC39 - - Execute - Execute/Pause - - - - NSImage - Icon_Execute_420x420 - - - - {0, 0} - {0, 0} - YES - YES - -1 - YES - 0 - - - - 321036F9-6034-47B1-9CC5-2461D98700F0 - - Reset - Reset - - - - NSImage - Icon_Reset_420x420 - - - - {0, 0} - {0, 0} - YES - YES - -1 - YES - 0 - - - - 41A299FB-4A95-4FA3-9982-8523FF04ACDE - - Rotate Right - Rotate Right - - - - NSImage - Icon_RotateCW_420x420 - - - - {0, 0} - {0, 0} - YES - YES - 90 - YES - 0 - - - - 8A505B61-7B2E-49ED-B6A0-DBE0A72DB48D - - Enable HUD - Enable/Disable HUD - - - - NSImage - Icon_ShowHUD_420x420 - - - - {0, 0} - {0, 0} - YES - YES - -1 - YES - 0 - - - - C626F2C1-4353-4288-AD59-40FB7F4C1A58 - - Rotate Left - Rotate Left - - - - NSImage - Icon_RotateCCW_420x420 - - - - {0, 0} - {0, 0} - YES - YES - -90 - YES - 0 - - - - D3628D4D-C39F-4CC3-B82F-7CC0F699B953 - - Frame Advance - Frame Advance - - - - NSImage - Icon_FrameAdvance_420x420 - - - - {0, 0} - {0, 0} - YES - YES - -1 - YES - 0 - - - - EDBFD998-E031-4AC5-A86A-7114D66FF847 - - Speed 2x - Speed 1x/2x - - - - NSImage - Icon_Speed2x_420x420 - - - - {0, 0} - {0, 0} - YES - YES - 200 - YES - 0 - - - NSToolbarFlexibleSpaceItem - - Flexible Space - - - - - - {1, 5} - {20000, 32} - YES - YES - -1 - YES - 0 - - YES - YES - - - 1048576 - 2147483647 - - NSImage - NSMenuCheckmark - - - NSImage - NSMenuMixedState - - - - - NSToolbarSpaceItem - - Space - - - - - - {32, 5} - {32, 10000} - YES - YES - -1 - YES - 0 - - YES - YES - - - 1048576 - 2147483647 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - {1.7976931348623157e+308, 1.7976931348623157e+308} - {256, 408} - - - - 256 - - - - - 5156 - {{2, 3}, {16, 16}} - - 28938 - 100 - - - - - 294 - {{17, 5}, {137, 14}} - - YES - - 68157504 - 272634880 - - - .SFNSText - 11 - 3088 - - Status Text - - - 6 - System - controlColor - - 3 - MC42NjY2NjY2NjY3AA - - - - 6 - System - controlTextColor - - 3 - MAA - - - - NO - 2 - - - - - 289 - {{192, -1}, {40, 26}} - - YES - - -2076180416 - 134219776 - - .SFNSText - 13 - 1040 - - - -2043002880 - 34 - - LucidaGrande - 13 - 16 - - - - 400 - 75 - - - YES - - - 2147483647 - 1 - - NSImage - Icon_VolumeFull_16x16 - - - - _popUpItemAction: - - - YES - - OtherViews - - - - - Volume - - 2147483647 - - - _popUpItemAction: - - - - - - YES - 1 - YES - YES - 2 - - NO - - - - - 289 - {{151, -1}, {42, 26}} - - YES - - -2076180416 - 134219776 - - - -2043002880 - 162 - - - - 400 - 75 - - - YES - - - 2147483647 - 1 - - NSImage - Icon_MicrophoneBlack_256x256 - - - - _popUpItemAction: - - - YES - - OtherViews - - - - - Gain - - 2147483647 - - - _popUpItemAction: - - - - - - YES - 1 - YES - YES - 2 - - NO - - - {256, 408} - - {{0, 0}, {1920, 1177}} - {256, 477} - {1.7976931348623157e+308, 1.7976931348623157e+308} - YES - - - - - 268 - - - - - 268 - {{2, 0}, {49, 18}} - - YES - - 67108864 - 131072 - Mute - - - 1211912448 - 2 - - NSImage - NSSwitch - - - NSSwitch - - - - 200 - 25 - - NO - - - - - 268 - {{-3, 20}, {66, 11}} - - - YES - - 68157504 - 138679296 - - .SFNSText - 9 - 3600 - - - - - - - - - - - - - - -∞ - - - +∞ - - - #0.0% - #0.0% - - - - - - - - NaN - - - - 0 - 0 - YES - NO - 1 - AAAAAAAAAAAAAAAAAAAAAA - - - - 3 - YES - YES - YES - - . - , - NO - NO - YES - - %1.1f%% - - - - - NO - 2 - - - - - 268 - {{17, 31}, {21, 105}} - - - YES - - 604242176 - 0 - - - 100 - 0.0 - 0.0 - 0.0 - 0 - 0 - NO - YES - - NO - - - {55, 139} - - NSView - - - - - 268 - - - - - 268 - {{-1, 6}, {51, 11}} - - YES - - 68157504 - 138679296 - - - - - - - - - - - - - - - - - - #0.0% - #0.0% - - - - - - - - NaN - - - - - - 3 - YES - YES - YES - - . - , - NO - NO - YES - - %1.1f%% - - - - - NO - 2 - - - - - 268 - {{12, 17}, {21, 105}} - - - YES - - 67371264 - 0 - - - 100 - 0.0 - 100 - 0.0 - 0 - 0 - NO - YES - - NO - - - {45, 125} - - NSView - - - - - - - hidden: isShowingStatusBar - - - - - - hidden: isShowingStatusBar - hidden - isShowingStatusBar - - NSValueTransformerName - NSNegateBoolean - - 2 - - - 54 - - - - changeCoreSpeed: - - - - 56 - - - - changeRotationRelative: - - - - 57 - - - - changeRotationRelative: - - - - 58 - - - - openRom: - - - - 60 - - - - delegate - - - - 62 - - - - value: emuControl.statusText - - - - - - value: emuControl.statusText - value - emuControl.statusText - - - - - - 2 - - - 67 - - - - animate: emuControl.isWorking - - - - - - animate: emuControl.isWorking - animate - emuControl.isWorking - 2 - - - 68 - - - - reset: - - - - 107 - - - - toggleExecutePause: - - - - 108 - - - - window - - - - 109 - - - - hidden: isShowingStatusBar - - - - - - hidden: isShowingStatusBar - hidden - isShowingStatusBar - - NSValueTransformerName - NSNegateBoolean - - 2 - - - 131 - - - - hidden: isShowingStatusBar - - - - - - hidden: isShowingStatusBar - hidden - isShowingStatusBar - - NSValueTransformerName - NSNegateBoolean - - 2 - - - 133 - - - - image: emuControl.currentVolumeIcon - - - - - - image: emuControl.currentVolumeIcon - image - emuControl.currentVolumeIcon - 2 - - - 135 - - - - value: emuControl.currentVolumeValue - - - - - - value: emuControl.currentVolumeValue - value - emuControl.currentVolumeValue - 2 - - - 138 - - - - changeVolume: - - - - 141 - - - - outputVolumeMenuItem - - - - 142 - - - - microphoneGainMenuItem - - - - 144 - - - - value: emuControl.currentVolumeValue - - - - - - value: emuControl.currentVolumeValue - value - emuControl.currentVolumeValue - - - - - 2 - - - 157 - - - - hidden: isShowingStatusBar - - - - - - hidden: isShowingStatusBar - hidden - isShowingStatusBar - - NSValueTransformerName - NSNegateBoolean - - 2 - - - 159 - - - - outputVolumeControlView - - - - 160 - - - - hidden: isShowingStatusBar - - - - - - hidden: isShowingStatusBar - hidden - isShowingStatusBar - - NSValueTransformerName - NSNegateBoolean - - 2 - - - 167 - - - - microphoneGainControlView - - - - 183 - - - - image: emuControl.currentMicStatusIcon - - - - - - image: emuControl.currentMicStatusIcon - image - emuControl.currentMicStatusIcon - 2 - - - 184 - - - - microphoneGainSlider - - - - 203 - - - - microphoneMuteButton - - - - 204 - - - - changeHardwareMicGain: - - - - 207 - - - - enabled: emuControl.isHardwareMicAvailable - - - - - - enabled: emuControl.isHardwareMicAvailable - enabled - emuControl.isHardwareMicAvailable - 2 - - - 218 - - - - enabled: emuControl.isHardwareMicAvailable - - - - - - enabled: emuControl.isHardwareMicAvailable - enabled - emuControl.isHardwareMicAvailable - 2 - - - 220 - - - - value: emuControl.cdsCoreController.content.cdsController.hardwareMicMute - - - - - - value: emuControl.cdsCoreController.content.cdsController.hardwareMicMute - value - emuControl.cdsCoreController.content.cdsController.hardwareMicMute - 2 - - - 224 - - - - toolTip: emuControl.cdsCoreController.content.cdsController.hardwareMicInfoString - - - - - - toolTip: emuControl.cdsCoreController.content.cdsController.hardwareMicInfoString - toolTip - emuControl.cdsCoreController.content.cdsController.hardwareMicInfoString - 2 - - - 226 - - - - value: emuControl.currentMicGainValue - - - - - - value: emuControl.currentMicGainValue - value - emuControl.currentMicGainValue - 2 - - - 230 - - - - value: emuControl.currentMicGainValue - - - - - - value: emuControl.currentMicGainValue - value - emuControl.currentMicGainValue - - - - - 2 - - - 232 - - - - changeHardwareMicMute: - - - - 233 - - - - frameAdvance: - - - - 243 - - - - toggleNDSDisplays: - - - - 244 - - - - toggleHUDVisibility: - - - - 245 - - - - hidden: isShowingStatusBar - - - - - - hidden: isShowingStatusBar - hidden - isShowingStatusBar - - NSValueTransformerName - NSNegateBoolean - - 2 - - - 248 - - - - - - 0 - - - - - - -2 - - - File's Owner - - - -1 - - - First Responder - - - -3 - - - Application - - - 3 - - - - - - - - - 4 - - - - - - - - - - - - - - - - - - 5 - - - - - - - - - - - 6 - - - - - - - - 10 - - - - - 13 - - - - - 14 - - - - - 15 - - - - - 16 - - - - - 17 - - - - - 18 - - - - - 19 - - - - - 20 - - - - - 21 - - - - - 116 - - - - - - - - 117 - - - - - - - - 118 - - - - - - - - - 120 - - - - - 119 - - - - - 122 - - - - - - - - 123 - - - - - - - - 124 - - - - - - - - - 125 - - - - - 126 - - - - - 151 - - - - - - - Sound Output Volume Menu Item - - - 136 - - - - - - - - 137 - - - - - 152 - - - - - - - - 153 - - - - - - - - 154 - - - - - 161 - - - - - - - - Microphone Input Gain Menu Item - - - 162 - - - - - - - - 165 - - - - - - - - 166 - - - - - 145 - - - - - - - - 146 - - - - - 185 - - - - - - - - 186 - - - - - 234 - - - - - 237 - - - - - 238 - - - - - - - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - {183.5, 317.5} - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - - - - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - - {84.5, 324.5} - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - - - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - {{666, 269}, {256, 408}} - com.apple.InterfaceBuilder.CocoaPlugin - {{666, 269}, {256, 408}} - - - {256, 408} - {{334, 998}, {616, 0}} - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - - - - - - 248 - - - 0 - IBCocoaFramework - - com.apple.InterfaceBuilder.CocoaPlugin.macosx - - - - com.apple.InterfaceBuilder.CocoaPlugin.macosx - - - - com.apple.InterfaceBuilder.CocoaPlugin.InterfaceBuilder3 - - - YES - ../../DeSmuME (XCode 3).xcodeproj - 3 - - {420, 420} - {420, 420} - {420, 420} - {256, 256} - {420, 420} - {420, 420} - {420, 420} - {420, 420} - {420, 420} - {420, 420} - {16, 16} - {12, 12} - {10, 2} - {15, 15} - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + 1060 + 13F1911 + 851 + 1265.21 + 698.00 + + com.apple.InterfaceBuilder.CocoaPlugin + 851 + + + + com.apple.InterfaceBuilder.CocoaPlugin + + + PluginDependencyRecalculationVersion + + + + + DisplayWindowController + + + FirstResponder + + + NSApplication + + + 271 + 2 + {{830, 370}, {256, 408}} + 74973184 + DeSmuME + NSWindow + + + D5552DCE-722B-4ECB-8E0A-8B7CF76EAC70 + + + YES + YES + YES + YES + 1 + 2 + + + + 0135754F-463F-4625-9D27-DEF701AEF50E + + Open ROM + Open ROM + + + + NSImage + Icon_OpenROM_420x420 + + + + {0, 0} + {0, 0} + YES + YES + -1 + YES + 0 + + + + 039A3D54-15EA-4743-88B7-60517113C193 + + Toggle Displays + Toggle Displays + + + + NSImage + Icon_DisplayToggle_420x420 + + + + {0, 0} + {0, 0} + YES + YES + -1 + YES + 0 + + + + 2E728430-6055-404B-944F-25594ACBEC39 + + Execute + Execute/Pause + + + + NSImage + Icon_Execute_420x420 + + + + {0, 0} + {0, 0} + YES + YES + -1 + YES + 0 + + + + 321036F9-6034-47B1-9CC5-2461D98700F0 + + Reset + Reset + + + + NSImage + Icon_Reset_420x420 + + + + {0, 0} + {0, 0} + YES + YES + -1 + YES + 0 + + + + 41A299FB-4A95-4FA3-9982-8523FF04ACDE + + Rotate Right + Rotate Right + + + + NSImage + Icon_RotateCW_420x420 + + + + {0, 0} + {0, 0} + YES + YES + 90 + YES + 0 + + + + 8A505B61-7B2E-49ED-B6A0-DBE0A72DB48D + + Enable HUD + Enable/Disable HUD + + + + NSImage + Icon_ShowHUD_420x420 + + + + {0, 0} + {0, 0} + YES + YES + -1 + YES + 0 + + + + C626F2C1-4353-4288-AD59-40FB7F4C1A58 + + Rotate Left + Rotate Left + + + + NSImage + Icon_RotateCCW_420x420 + + + + {0, 0} + {0, 0} + YES + YES + -90 + YES + 0 + + + + D3628D4D-C39F-4CC3-B82F-7CC0F699B953 + + Frame Advance + Frame Advance + + + + NSImage + Icon_FrameAdvance_420x420 + + + + {0, 0} + {0, 0} + YES + YES + -1 + YES + 0 + + + + EDBFD998-E031-4AC5-A86A-7114D66FF847 + + Speed 2x + Speed 1x/2x + + + + NSImage + Icon_Speed2x_420x420 + + + + {0, 0} + {0, 0} + YES + YES + 200 + YES + 0 + + + NSToolbarFlexibleSpaceItem + + Flexible Space + + + + + + {1, 5} + {20000, 32} + YES + YES + -1 + YES + 0 + + YES + YES + + + 1048576 + 2147483647 + + NSImage + NSMenuCheckmark + + + NSImage + NSMenuMixedState + + + + + NSToolbarSpaceItem + + Space + + + + + + {32, 5} + {32, 32} + YES + YES + -1 + YES + 0 + + YES + YES + + + 1048576 + 2147483647 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + {1.7976931348623157e+308, 1.7976931348623157e+308} + {256, 408} + + + 256 + + + + 5156 + {{2, 3}, {16, 16}} + + 28938 + 100 + + + + 294 + {{17, 5}, {137, 14}} + + YES + + 68157504 + 272634880 + + + LucidaGrande + 11 + 3088 + + Status Text + + + 6 + System + controlColor + + 3 + MC42NjY2NjY2NjY3AA + + + + 6 + System + controlTextColor + + 3 + MAA + + + + NO + 1 + + + + 289 + {{192, -1}, {40, 26}} + + YES + + -2076180416 + 134219776 + + LucidaGrande + 13 + 1040 + + + -2043002880 + 34 + + LucidaGrande + 13 + 16 + + + + 400 + 75 + + + YES + + + 2147483647 + 1 + + NSImage + Icon_VolumeFull_16x16 + + + + _popUpItemAction: + + + YES + + OtherViews + + + + + Volume + + 2147483647 + + + _popUpItemAction: + + + + + + YES + 1 + YES + YES + 2 + + NO + + + + 289 + {{151, -1}, {42, 26}} + + YES + + -2076180416 + 134219776 + + + -2043002880 + 162 + + + + 400 + 75 + + + YES + + + 2147483647 + 1 + + NSImage + Icon_MicrophoneBlack_256x256 + + + + _popUpItemAction: + + + YES + + OtherViews + + + + + Gain + + 2147483647 + + + _popUpItemAction: + + + + + + YES + 1 + YES + YES + 2 + + NO + + + {256, 408} + + {{0, 0}, {1920, 1177}} + {256, 477} + {1.7976931348623157e+308, 1.7976931348623157e+308} + YES + + + + 268 + + + + 268 + {{2, 0}, {49, 18}} + + YES + + 67108864 + 131072 + Mute + + + 1211912448 + 2 + + NSImage + NSSwitch + + + NSSwitch + + + + 200 + 25 + + NO + + + + 268 + {{-3, 20}, {66, 11}} + + YES + + 68157504 + 138679296 + + LucidaGrande + 9 + 3600 + + + + + + + + + + + + + + -∞ + + + +∞ + + + #0.0% + #0.0% + + + + + + + + NaN + + + + 0 + 0 + YES + NO + 1 + AAAAAAAAAAAAAAAAAAAAAA + + + + 3 + YES + YES + YES + + . + , + NO + NO + YES + + %1.1f%% + + + + + NO + 1 + + + + 268 + {{17, 31}, {21, 105}} + + YES + + 604242176 + 0 + + + 100 + 0.0 + 0.0 + 0.0 + 0 + 0 + NO + YES + + NO + + + {55, 139} + NSView + + + + 268 + + + + 268 + {{-1, 6}, {51, 11}} + + YES + + 68157504 + 138679296 + + + + + + + + + + + + + + + + + + #0.0% + #0.0% + + + + + + + + NaN + + + + + + 3 + YES + YES + YES + + . + , + NO + NO + YES + + %1.1f%% + + + + + NO + 1 + + + + 268 + {{12, 17}, {21, 105}} + + + YES + + 67371264 + 0 + + + 100 + 0.0 + 100 + 0.0 + 0 + 0 + NO + YES + + NO + + + {45, 125} + + NSView + + + + + + + hidden: isShowingStatusBar + + + + + + hidden: isShowingStatusBar + hidden + isShowingStatusBar + + NSValueTransformerName + NSNegateBoolean + + 2 + + + 54 + + + + changeCoreSpeed: + + + + 56 + + + + changeRotationRelative: + + + + 57 + + + + changeRotationRelative: + + + + 58 + + + + openRom: + + + + 60 + + + + delegate + + + + 62 + + + + value: emuControl.statusText + + + + + + value: emuControl.statusText + value + emuControl.statusText + + + + + + 2 + + + 67 + + + + animate: emuControl.isWorking + + + + + + animate: emuControl.isWorking + animate + emuControl.isWorking + 2 + + + 68 + + + + reset: + + + + 107 + + + + toggleExecutePause: + + + + 108 + + + + window + + + + 109 + + + + hidden: isShowingStatusBar + + + + + + hidden: isShowingStatusBar + hidden + isShowingStatusBar + + NSValueTransformerName + NSNegateBoolean + + 2 + + + 131 + + + + hidden: isShowingStatusBar + + + + + + hidden: isShowingStatusBar + hidden + isShowingStatusBar + + NSValueTransformerName + NSNegateBoolean + + 2 + + + 133 + + + + image: emuControl.currentVolumeIcon + + + + + + image: emuControl.currentVolumeIcon + image + emuControl.currentVolumeIcon + 2 + + + 135 + + + + value: emuControl.currentVolumeValue + + + + + + value: emuControl.currentVolumeValue + value + emuControl.currentVolumeValue + 2 + + + 138 + + + + changeVolume: + + + + 141 + + + + outputVolumeMenuItem + + + + 142 + + + + microphoneGainMenuItem + + + + 144 + + + + value: emuControl.currentVolumeValue + + + + + + value: emuControl.currentVolumeValue + value + emuControl.currentVolumeValue + + + + + 2 + + + 157 + + + + hidden: isShowingStatusBar + + + + + + hidden: isShowingStatusBar + hidden + isShowingStatusBar + + NSValueTransformerName + NSNegateBoolean + + 2 + + + 159 + + + + outputVolumeControlView + + + + 160 + + + + hidden: isShowingStatusBar + + + + + + hidden: isShowingStatusBar + hidden + isShowingStatusBar + + NSValueTransformerName + NSNegateBoolean + + 2 + + + 167 + + + + microphoneGainControlView + + + + 183 + + + + image: emuControl.currentMicStatusIcon + + + + + + image: emuControl.currentMicStatusIcon + image + emuControl.currentMicStatusIcon + 2 + + + 184 + + + + microphoneGainSlider + + + + 203 + + + + microphoneMuteButton + + + + 204 + + + + changeHardwareMicGain: + + + + 207 + + + + enabled: emuControl.isHardwareMicAvailable + + + + + + enabled: emuControl.isHardwareMicAvailable + enabled + emuControl.isHardwareMicAvailable + 2 + + + 218 + + + + enabled: emuControl.isHardwareMicAvailable + + + + + + enabled: emuControl.isHardwareMicAvailable + enabled + emuControl.isHardwareMicAvailable + 2 + + + 220 + + + + value: emuControl.cdsCoreController.content.cdsController.hardwareMicMute + + + + + + value: emuControl.cdsCoreController.content.cdsController.hardwareMicMute + value + emuControl.cdsCoreController.content.cdsController.hardwareMicMute + 2 + + + 224 + + + + toolTip: emuControl.cdsCoreController.content.cdsController.hardwareMicInfoString + + + + + + toolTip: emuControl.cdsCoreController.content.cdsController.hardwareMicInfoString + toolTip + emuControl.cdsCoreController.content.cdsController.hardwareMicInfoString + 2 + + + 226 + + + + value: emuControl.currentMicGainValue + + + + + + value: emuControl.currentMicGainValue + value + emuControl.currentMicGainValue + 2 + + + 230 + + + + value: emuControl.currentMicGainValue + + + + + + value: emuControl.currentMicGainValue + value + emuControl.currentMicGainValue + + + + + 2 + + + 232 + + + + changeHardwareMicMute: + + + + 233 + + + + frameAdvance: + + + + 243 + + + + toggleNDSDisplays: + + + + 244 + + + + toggleHUDVisibility: + + + + 245 + + + + hidden: isShowingStatusBar + + + + + + hidden: isShowingStatusBar + hidden + isShowingStatusBar + + NSValueTransformerName + NSNegateBoolean + + 2 + + + 248 + + + + toolTip: emuControl.micStatusTooltip + + + + + + toolTip: emuControl.micStatusTooltip + toolTip + emuControl.micStatusTooltip + 2 + + + 249 + + + + toolTip: emuControl.micStatusTooltip + + + + + + toolTip: emuControl.micStatusTooltip + toolTip + emuControl.micStatusTooltip + 2 + + + 250 + + + + + + 0 + + + + + + -2 + + + File's Owner + + + -1 + + + First Responder + + + -3 + + + Application + + + 3 + + + + + + + + + 4 + + + + + + + + + + + + + + + + + + 5 + + + + + + + + + + + 6 + + + + + + + + 10 + + + + + 13 + + + + + 14 + + + + + 15 + + + + + 16 + + + + + 17 + + + + + 18 + + + + + 19 + + + + + 20 + + + + + 21 + + + + + 116 + + + + + + + + 117 + + + + + + + + 118 + + + + + + + + + 120 + + + + + 119 + + + + + 122 + + + + + + + + 123 + + + + + + + + 124 + + + + + + + + + 125 + + + + + 126 + + + + + 151 + + + + + + + Sound Output Volume Menu Item + + + 136 + + + + + + + + 137 + + + + + 152 + + + + + + + + 153 + + + + + + + + 154 + + + + + 161 + + + + + + + + Microphone Input Gain Menu Item + + + 162 + + + + + + + + 165 + + + + + + + + 166 + + + + + 145 + + + + + + + + 146 + + + + + 185 + + + + + + + + 186 + + + + + 234 + + + + + 237 + + + + + 238 + + + + + + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + {183.5, 317.5} + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + {{0, 695}, {55, 139}} + + {84.5, 324.5} + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + {{666, 269}, {256, 408}} + com.apple.InterfaceBuilder.CocoaPlugin + {{666, 269}, {256, 408}} + + + {256, 408} + {{334, 998}, {616, 0}} + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + + + + + 250 + + + 0 + IBCocoaFramework + + com.apple.InterfaceBuilder.CocoaPlugin.macosx + + + + com.apple.InterfaceBuilder.CocoaPlugin.macosx + + + + com.apple.InterfaceBuilder.CocoaPlugin.InterfaceBuilder3 + + + YES + ../../DeSmuME (XCode 3).xcodeproj + 3 + + {420, 420} + {420, 420} + {420, 420} + {256, 256} + {420, 420} + {420, 420} + {420, 420} + {420, 420} + {420, 420} + {420, 420} + {16, 16} + {11, 11} + {10, 3} + {15, 15} + + diff --git a/desmume/src/frontend/cocoa/translations/English.lproj/MainMenu.xib b/desmume/src/frontend/cocoa/translations/English.lproj/MainMenu.xib index 0ebe706ff..ac7fc594e 100644 --- a/desmume/src/frontend/cocoa/translations/English.lproj/MainMenu.xib +++ b/desmume/src/frontend/cocoa/translations/English.lproj/MainMenu.xib @@ -10311,7 +10311,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 {1.7976931348623157e+308, 1.7976931348623157e+308} - + 256 @@ -10327,7 +10327,6 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 268 {{18, 14}, {190, 126}} - YES NO 4 @@ -10596,7 +10595,6 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 268 {{130, 18}, {224, 21}} - YES 612368448 @@ -10617,7 +10615,6 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 268 {{476, 11}, {96, 32}} - YES 67108864 @@ -10639,7 +10636,6 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 268 {{128, 47}, {348, 26}} - YES -2080112384 @@ -10662,7 +10658,6 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 268 {{479, 56}, {90, 17}} - YES 68157504 @@ -10722,7 +10717,6 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 268 {{356, 11}, {124, 32}} - YES 67108864 @@ -10742,12 +10736,10 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 {{1, 1}, {584, 150}} - {{17, 56}, {586, 166}} - {0, 0} 67108864 @@ -10768,7 +10760,6 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 268 {{510, 12}, {96, 32}} - 1 YES @@ -10791,7 +10782,6 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 268 {{414, 12}, {96, 32}} - YES 67108864 @@ -10813,7 +10803,6 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 268 {{17, 230}, {586, 17}} - YES 70254657 @@ -10830,8 +10819,6 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 {620, 267} - - {{0, 0}, {1920, 1177}} {1.7976931348623157e+308, 1.7976931348623157e+308} @@ -42466,6 +42453,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 mainWindow.view.hudColorInputPendingOnly mainWindow.view.isHUDExecutionSpeedVisible mainWindow.view.hudColorExecutionSpeed + micStatusTooltip EmuControllerDelegate @@ -59112,6 +59100,70 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 12231 + + + toolTip: selection.micStatusTooltip + + + + + + toolTip: selection.micStatusTooltip + toolTip + selection.micStatusTooltip + 2 + + + 12232 + + + + toolTip: selection.micStatusTooltip + + + + + + toolTip: selection.micStatusTooltip + toolTip + selection.micStatusTooltip + 2 + + + 12233 + + + + toolTip: selection.micStatusTooltip + + + + + + toolTip: selection.micStatusTooltip + toolTip + selection.micStatusTooltip + 2 + + + 12234 + + + + toolTip: selection.micStatusTooltip + + + + + + toolTip: selection.micStatusTooltip + toolTip + selection.micStatusTooltip + 2 + + + 12235 + @@ -86775,7 +86827,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 - 12231 + 12235 diff --git a/desmume/src/frontend/cocoa/userinterface/EmuControllerDelegate.h b/desmume/src/frontend/cocoa/userinterface/EmuControllerDelegate.h index 5de50b642..8f0183d0f 100644 --- a/desmume/src/frontend/cocoa/userinterface/EmuControllerDelegate.h +++ b/desmume/src/frontend/cocoa/userinterface/EmuControllerDelegate.h @@ -88,6 +88,7 @@ class AudioSampleBlockGenerator; BOOL isRomLoading; NSString *statusText; float currentVolumeValue; + NSString *micStatusTooltip; NSImage *currentMicStatusIcon; NSImage *currentVolumeIcon; BOOL isShowingSaveStateDialog; @@ -105,7 +106,9 @@ class AudioSampleBlockGenerator; float lastSetVolumeValue; NSImage *iconMicDisabled; + NSImage *iconMicDisabledDM; NSImage *iconMicIdle; + NSImage *iconMicIdleNoHardware; NSImage *iconMicActive; NSImage *iconMicInClip; NSImage *iconMicManualOverride; @@ -113,6 +116,10 @@ class AudioSampleBlockGenerator; NSImage *iconVolumeTwoThird; NSImage *iconVolumeOneThird; NSImage *iconVolumeMute; + NSImage *iconVolumeFullDM; + NSImage *iconVolumeTwoThirdDM; + NSImage *iconVolumeOneThirdDM; + NSImage *iconVolumeMuteDM; NSImage *iconExecute; NSImage *iconPause; NSImage *iconSpeedNormal; @@ -177,6 +184,7 @@ class AudioSampleBlockGenerator; @property (assign) BOOL isHardwareMicAvailable; @property (assign) float currentMicGainValue; @property (assign) float currentVolumeValue; +@property (assign) NSString *micStatusTooltip; @property (retain) NSImage *currentMicStatusIcon; @property (retain) NSImage *currentVolumeIcon; @property (assign) BOOL isShowingSaveStateDialog; @@ -220,6 +228,7 @@ class AudioSampleBlockGenerator; - (IBAction) frameJump:(id)sender; - (IBAction) reset:(id)sender; - (IBAction) changeRomSaveType:(id)sender; +- (IBAction) changeHostMicrophonePermission:(id)sender; // View Menu - (IBAction) toggleAllDisplays:(id)sender; @@ -313,6 +322,7 @@ class AudioSampleBlockGenerator; - (void) updateDisplayPanelTitles; - (void) appInit; - (void) fillOpenGLMSAAMenu; +- (NSInteger) updateHostMicrophonePermissionStatus; - (void) readUserDefaults; - (void) writeUserDefaults; - (void) restoreDisplayWindowStates; diff --git a/desmume/src/frontend/cocoa/userinterface/EmuControllerDelegate.mm b/desmume/src/frontend/cocoa/userinterface/EmuControllerDelegate.mm index 6b6361ad5..9837ef0d9 100644 --- a/desmume/src/frontend/cocoa/userinterface/EmuControllerDelegate.mm +++ b/desmume/src/frontend/cocoa/userinterface/EmuControllerDelegate.mm @@ -35,6 +35,10 @@ #import "cocoa_rom.h" #import "cocoa_slot2.h" +#if HAVE_OSAVAILABLE && defined(MAC_OS_X_VERSION_10_14) && (MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_14) + #import +#endif + @implementation EmuControllerDelegate @synthesize inputManager; @@ -88,6 +92,7 @@ @synthesize isHardwareMicAvailable; @synthesize currentMicGainValue; @dynamic currentVolumeValue; +@synthesize micStatusTooltip; @synthesize currentMicStatusIcon; @synthesize ndsMicLevelIndicator; @synthesize currentVolumeIcon; @@ -144,27 +149,36 @@ isSoundMuted = NO; lastSetVolumeValue = MAX_VOLUME; - iconExecute = [[NSImage imageNamed:@"Icon_Execute_420x420"] retain]; - iconPause = [[NSImage imageNamed:@"Icon_Pause_420x420"] retain]; - iconSpeedNormal = [[NSImage imageNamed:@"Icon_Speed1x_420x420"] retain]; - iconSpeedDouble = [[NSImage imageNamed:@"Icon_Speed2x_420x420"] retain]; + iconExecute = [[NSImage imageNamed:@"Icon_Execute_420x420"] retain]; + iconPause = [[NSImage imageNamed:@"Icon_Pause_420x420"] retain]; + iconSpeedNormal = [[NSImage imageNamed:@"Icon_Speed1x_420x420"] retain]; + iconSpeedDouble = [[NSImage imageNamed:@"Icon_Speed2x_420x420"] retain]; - iconMicDisabled = [[NSImage imageNamed:@"Icon_MicrophoneBlack_256x256"] retain]; - iconMicIdle = [[NSImage imageNamed:@"Icon_MicrophoneDarkGreen_256x256"] retain]; - iconMicActive = [[NSImage imageNamed:@"Icon_MicrophoneGreen_256x256"] retain]; - iconMicInClip = [[NSImage imageNamed:@"Icon_MicrophoneRed_256x256"] retain]; - iconMicManualOverride = [[NSImage imageNamed:@"Icon_MicrophoneGray_256x256"] retain]; + iconMicDisabled = [[NSImage imageNamed:@"Icon_MicrophoneBlack_256x256"] retain]; + iconMicDisabledDM = [[NSImage imageNamed:@"Icon_MicrophoneOff_DarkMode_256x256"] retain]; + iconMicIdle = [[NSImage imageNamed:@"Icon_MicrophoneDarkGreen_256x256"] retain]; + iconMicIdleNoHardware = [[NSImage imageNamed:@"Icon_MicrophoneIdleNoHardware_256x256"] retain]; + iconMicActive = [[NSImage imageNamed:@"Icon_MicrophoneGreen_256x256"] retain]; + iconMicInClip = [[NSImage imageNamed:@"Icon_MicrophoneRed_256x256"] retain]; + iconMicManualOverride = [[NSImage imageNamed:@"Icon_MicrophoneGray_256x256"] retain]; - iconVolumeFull = [[NSImage imageNamed:@"Icon_VolumeFull_16x16"] retain]; - iconVolumeTwoThird = [[NSImage imageNamed:@"Icon_VolumeTwoThird_16x16"] retain]; - iconVolumeOneThird = [[NSImage imageNamed:@"Icon_VolumeOneThird_16x16"] retain]; - iconVolumeMute = [[NSImage imageNamed:@"Icon_VolumeMute_16x16"] retain]; + iconVolumeFull = [[NSImage imageNamed:@"Icon_VolumeFull_16x16"] retain]; + iconVolumeTwoThird = [[NSImage imageNamed:@"Icon_VolumeTwoThird_16x16"] retain]; + iconVolumeOneThird = [[NSImage imageNamed:@"Icon_VolumeOneThird_16x16"] retain]; + iconVolumeMute = [[NSImage imageNamed:@"Icon_VolumeMute_16x16"] retain]; + + iconVolumeFullDM = [[NSImage imageNamed:@"Icon_VolumeFull_DarkMode_16x16"] retain]; + iconVolumeTwoThirdDM = [[NSImage imageNamed:@"Icon_VolumeTwoThird_DarkMode_16x16"] retain]; + iconVolumeOneThirdDM = [[NSImage imageNamed:@"Icon_VolumeOneThird_DarkMode_16x16"] retain]; + iconVolumeMuteDM = [[NSImage imageNamed:@"Icon_VolumeMute_DarkMode_16x16"] retain]; isWorking = NO; isRomLoading = NO; statusText = NSSTRING_STATUS_READY; currentVolumeValue = MAX_VOLUME; - currentMicStatusIcon = [iconMicDisabled retain]; + micStatusTooltip = @""; + BOOL isRunningDarkMode = NO; + currentMicStatusIcon = (isRunningDarkMode) ? [iconMicDisabledDM retain] : [iconMicDisabled retain]; currentVolumeIcon = [iconVolumeFull retain]; [[NSNotificationCenter defaultCenter] addObserver:self @@ -195,7 +209,9 @@ [iconSpeedDouble release]; [iconMicDisabled release]; + [iconMicDisabledDM release]; [iconMicIdle release]; + [iconMicIdleNoHardware release]; [iconMicActive release]; [iconMicInClip release]; [iconMicManualOverride release]; @@ -205,6 +221,11 @@ [iconVolumeOneThird release]; [iconVolumeMute release]; + [iconVolumeFullDM release]; + [iconVolumeTwoThirdDM release]; + [iconVolumeOneThirdDM release]; + [iconVolumeMuteDM release]; + [[self currentRom] release]; [self setCurrentRom:nil]; @@ -300,6 +321,8 @@ - (void) setCurrentVolumeValue:(float)vol { + BOOL isRunningDarkMode = NO; + currentVolumeValue = vol; // Update the icon. @@ -307,23 +330,23 @@ NSImage *newImage = nil; if (vol <= 0.0f) { - newImage = iconVolumeMute; + newImage = (isRunningDarkMode) ? iconVolumeMuteDM : iconVolumeMute; } else if (vol > 0.0f && vol <= VOLUME_THRESHOLD_LOW) { - newImage = iconVolumeOneThird; + newImage = (isRunningDarkMode) ? iconVolumeOneThirdDM : iconVolumeOneThird; isSoundMuted = NO; lastSetVolumeValue = vol; } else if (vol > VOLUME_THRESHOLD_LOW && vol <= VOLUME_THRESHOLD_HIGH) { - newImage = iconVolumeTwoThird; + newImage = (isRunningDarkMode) ? iconVolumeTwoThirdDM : iconVolumeTwoThird; isSoundMuted = NO; lastSetVolumeValue = vol; } else { - newImage = iconVolumeFull; + newImage = (isRunningDarkMode) ? iconVolumeFullDM : iconVolumeFull; isSoundMuted = NO; lastSetVolumeValue = vol; } @@ -854,6 +877,31 @@ [cdsCore changeRomSaveType:saveTypeID]; } +- (IBAction) changeHostMicrophonePermission:(id)sender +{ +#if HAVE_OSAVAILABLE && defined(MAC_OS_X_VERSION_10_14) && (MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_14) + if (IsOSXVersionSupported(10, 14, 0)) + { + if (@available(macOS 10.14, *)) + { + [AVCaptureDevice requestAccessForMediaType:AVMediaTypeAudio completionHandler:^(BOOL isAuthorized) { + if (isAuthorized) + { + puts("DeSmuME: User has just granted access to the microphone."); + } + + [self updateHostMicrophonePermissionStatus]; + }]; + } + } + else +#endif + { + puts("DeSmuME: User is not running macOS v10.14 Mojave or later -- microphone usage is automatically authorized."); + [self updateHostMicrophonePermissionStatus]; + } +} + - (IBAction) toggleCheats:(id)sender { [inputManager dispatchCommandUsingIBAction:_cmd sender:sender]; @@ -2190,9 +2238,11 @@ - (void) updateMicStatusIcon { + BOOL isRunningDarkMode = NO; + CocoaDSCore *cdsCore = (CocoaDSCore *)[cdsCoreController content]; CocoaDSController *cdsController = [cdsCore cdsController]; - NSImage *micIcon = iconMicDisabled; + NSImage *micIcon = (isRunningDarkMode) ? iconMicDisabledDM : iconMicDisabled; if ([cdsController softwareMicState]) { @@ -2200,23 +2250,30 @@ } else { - if ([cdsController isHardwareMicAvailable]) + if ([cdsController hardwareMicPause]) { - if ([cdsController hardwareMicPause]) + micIcon = (isRunningDarkMode) ? iconMicDisabledDM : iconMicDisabled; + } + else + { + if ([cdsController isHardwareMicAvailable]) { - micIcon = iconMicDisabled; - } - else if ([cdsController isHardwareMicInClip]) - { - micIcon = iconMicInClip; - } - else if ([cdsController isHardwareMicIdle]) - { - micIcon = iconMicIdle; + if ([cdsController isHardwareMicInClip]) + { + micIcon = iconMicInClip; + } + else if ([cdsController isHardwareMicIdle]) + { + micIcon = iconMicIdle; + } + else + { + micIcon = iconMicActive; + } } else { - micIcon = iconMicActive; + micIcon = iconMicIdleNoHardware; } } } @@ -2487,6 +2544,60 @@ [openglMSAAPopUpButton selectItemAtIndex:0]; } +- (NSInteger) updateHostMicrophonePermissionStatus +{ + CocoaDSCore *cdsCore = (CocoaDSCore *)[cdsCoreController content]; + CocoaDSController *cdsController = [cdsCore cdsController]; + + NSInteger authStatus = 0; + BOOL authFlag = NO; + +#if HAVE_OSAVAILABLE && defined(MAC_OS_X_VERSION_10_14) && (MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_14) + if (IsOSXVersionSupported(10, 14, 0)) + { + if (@available(macOS 10.14, *)) + { + authStatus = [AVCaptureDevice authorizationStatusForMediaType:AVMediaTypeAudio]; + + switch (authStatus) + { + case AVAuthorizationStatusNotDetermined: + [self setMicStatusTooltip:@"Hardware microphone usage has yet to be authorized. If you need access, click \"OK\" when DeSmuME requests permission from the system."]; + break; + + case AVAuthorizationStatusRestricted: + [self setMicStatusTooltip:@"Hardware microphone usage has been restricted. Please see your system administrator."]; + break; + + case AVAuthorizationStatusDenied: + [self setMicStatusTooltip:@"Hardware microphone usage has been denied. If you need access, change your microphone privacy settings for DeSmuME in System Preferences."]; + break; + + case AVAuthorizationStatusAuthorized: + [self setMicStatusTooltip:@""]; + authFlag = YES; + break; + + default: + [self setMicStatusTooltip:@"Hardware microphone usage is currently unknown. If you need access, change your microphone privacy settings for DeSmuME in System Preferences."]; + break; + } + + [cdsController setHardwareMicAuthorization:authFlag]; + } + } + else +#endif + { + authStatus = 3; // AVAuthorizationStatusAuthorized + [self setMicStatusTooltip:@""]; + [cdsController setHardwareMicAuthorization:YES]; + } + + [self updateMicStatusIcon]; + return authStatus; +} + - (void) readUserDefaults { CocoaDSCore *cdsCore = (CocoaDSCore *)[cdsCoreController content]; @@ -3080,8 +3191,9 @@ - (void) doMicHardwareStateChangedFromController:(CocoaDSController *)cdsController isEnabled:(BOOL)isHardwareEnabled isLocked:(BOOL)isHardwareLocked + isAuthorized:(BOOL)isAuthorized { - const BOOL hwMicAvailable = (isHardwareEnabled && !isHardwareLocked); + const BOOL hwMicAvailable = (isHardwareEnabled && !isHardwareLocked && isAuthorized); [self setIsHardwareMicAvailable:hwMicAvailable]; [self updateMicStatusIcon]; } diff --git a/desmume/src/frontend/cocoa/userinterface/appDelegate.mm b/desmume/src/frontend/cocoa/userinterface/appDelegate.mm index 7a413f6d8..6a3fc6309 100644 --- a/desmume/src/frontend/cocoa/userinterface/appDelegate.mm +++ b/desmume/src/frontend/cocoa/userinterface/appDelegate.mm @@ -67,7 +67,7 @@ return nil; } - // Determine if we're running on Intel or PPC. + // Determine if we're running on Intel or non-Intel (PowerPC or ARM64). #if defined(__i386__) || defined(__x86_64__) isAppRunningOnIntel = YES; #else @@ -372,6 +372,14 @@ [self application:NSApp openFile:[self delayedROMFileName]]; [self setDelayedROMFileName:nil]; } + + // Request hardware microphone permissions now. Hopefully, the user will address the + // permissions dialog before the ROM program actually needs the microphone input. + const NSInteger micPermStatus = [emuControl updateHostMicrophonePermissionStatus]; + if (micPermStatus == 0) // (micPermStatus == AVAuthorizationStatusNotDetermined) + { + [emuControl changeHostMicrophonePermission:self]; + } } - (NSApplicationTerminateReply)applicationShouldTerminate:(NSApplication *)sender