Cocoa Port:

- Add full support for using hardware microphones on the host machine for emulating the NDS microphone. Finally, mic driven games, such as Nintendogs, are fully playable on the Mac!
- Display windows no longer include an output volume slider directly in the status bar. Instead, the slider has been moved inside a popup button, which now behaves just like OS X's volume menu. This was done for better space efficiency.
- Display windows now include a microphone icon alongside the output volume icon. Like the output volume, there is a slider control to adjust microphone gain and also a mute control.
- The microphone icon changes color depending the microphone's state (as seen by the NDS, not the host).
- Replace the existing microphone icon with one that looks better and is more modern.
- Adjust the size of the output volume icon from 20x20 pixels to 16x16 pixels.
- Fix yet another font rendering bug in the Input Profile viewer on OS X Yosemite.
This commit is contained in:
rogerman 2015-03-08 09:41:19 +00:00
parent 64ea7591ab
commit 381324ca09
38 changed files with 65028 additions and 62359 deletions

View File

@ -55,7 +55,6 @@
AB0F29AE14BE7213009ABC6F /* Icon_DSButtonY_420x420.png in Resources */ = {isa = PBXBuildFile; fileRef = AB0F299C14BE7213009ABC6F /* Icon_DSButtonY_420x420.png */; }; AB0F29AE14BE7213009ABC6F /* Icon_DSButtonY_420x420.png in Resources */ = {isa = PBXBuildFile; fileRef = AB0F299C14BE7213009ABC6F /* Icon_DSButtonY_420x420.png */; };
AB0F29AF14BE7213009ABC6F /* Icon_Emulation_420x420.png in Resources */ = {isa = PBXBuildFile; fileRef = AB0F299D14BE7213009ABC6F /* Icon_Emulation_420x420.png */; }; AB0F29AF14BE7213009ABC6F /* Icon_Emulation_420x420.png in Resources */ = {isa = PBXBuildFile; fileRef = AB0F299D14BE7213009ABC6F /* Icon_Emulation_420x420.png */; };
AB0F29B014BE7213009ABC6F /* Icon_Input_420x420.png in Resources */ = {isa = PBXBuildFile; fileRef = AB0F299E14BE7213009ABC6F /* Icon_Input_420x420.png */; }; AB0F29B014BE7213009ABC6F /* Icon_Input_420x420.png in Resources */ = {isa = PBXBuildFile; fileRef = AB0F299E14BE7213009ABC6F /* Icon_Input_420x420.png */; };
AB0F29B114BE7213009ABC6F /* Icon_Microphone_420x420.png in Resources */ = {isa = PBXBuildFile; fileRef = AB0F299F14BE7213009ABC6F /* Icon_Microphone_420x420.png */; };
AB0F29B214BE7213009ABC6F /* Icon_OpenROM_420x420.png in Resources */ = {isa = PBXBuildFile; fileRef = AB0F29A014BE7213009ABC6F /* Icon_OpenROM_420x420.png */; }; AB0F29B214BE7213009ABC6F /* Icon_OpenROM_420x420.png in Resources */ = {isa = PBXBuildFile; fileRef = AB0F29A014BE7213009ABC6F /* Icon_OpenROM_420x420.png */; };
AB0F29B314BE7213009ABC6F /* Icon_Reset_420x420.png in Resources */ = {isa = PBXBuildFile; fileRef = AB0F29A114BE7213009ABC6F /* Icon_Reset_420x420.png */; }; AB0F29B314BE7213009ABC6F /* Icon_Reset_420x420.png in Resources */ = {isa = PBXBuildFile; fileRef = AB0F29A114BE7213009ABC6F /* Icon_Reset_420x420.png */; };
AB0F29B414BE7213009ABC6F /* Icon_RotateCCW_420x420.png in Resources */ = {isa = PBXBuildFile; fileRef = AB0F29A214BE7213009ABC6F /* Icon_RotateCCW_420x420.png */; }; AB0F29B414BE7213009ABC6F /* Icon_RotateCCW_420x420.png in Resources */ = {isa = PBXBuildFile; fileRef = AB0F29A214BE7213009ABC6F /* Icon_RotateCCW_420x420.png */; };
@ -293,7 +292,6 @@
AB796CDE15CDCBA200C59155 /* Icon_DSButtonY_420x420.png in Resources */ = {isa = PBXBuildFile; fileRef = AB0F299C14BE7213009ABC6F /* Icon_DSButtonY_420x420.png */; }; AB796CDE15CDCBA200C59155 /* Icon_DSButtonY_420x420.png in Resources */ = {isa = PBXBuildFile; fileRef = AB0F299C14BE7213009ABC6F /* Icon_DSButtonY_420x420.png */; };
AB796CDF15CDCBA200C59155 /* Icon_Emulation_420x420.png in Resources */ = {isa = PBXBuildFile; fileRef = AB0F299D14BE7213009ABC6F /* Icon_Emulation_420x420.png */; }; AB796CDF15CDCBA200C59155 /* Icon_Emulation_420x420.png in Resources */ = {isa = PBXBuildFile; fileRef = AB0F299D14BE7213009ABC6F /* Icon_Emulation_420x420.png */; };
AB796CE015CDCBA200C59155 /* Icon_Input_420x420.png in Resources */ = {isa = PBXBuildFile; fileRef = AB0F299E14BE7213009ABC6F /* Icon_Input_420x420.png */; }; AB796CE015CDCBA200C59155 /* Icon_Input_420x420.png in Resources */ = {isa = PBXBuildFile; fileRef = AB0F299E14BE7213009ABC6F /* Icon_Input_420x420.png */; };
AB796CE115CDCBA200C59155 /* Icon_Microphone_420x420.png in Resources */ = {isa = PBXBuildFile; fileRef = AB0F299F14BE7213009ABC6F /* Icon_Microphone_420x420.png */; };
AB796CE215CDCBA200C59155 /* Icon_OpenROM_420x420.png in Resources */ = {isa = PBXBuildFile; fileRef = AB0F29A014BE7213009ABC6F /* Icon_OpenROM_420x420.png */; }; AB796CE215CDCBA200C59155 /* Icon_OpenROM_420x420.png in Resources */ = {isa = PBXBuildFile; fileRef = AB0F29A014BE7213009ABC6F /* Icon_OpenROM_420x420.png */; };
AB796CE315CDCBA200C59155 /* Icon_Reset_420x420.png in Resources */ = {isa = PBXBuildFile; fileRef = AB0F29A114BE7213009ABC6F /* Icon_Reset_420x420.png */; }; AB796CE315CDCBA200C59155 /* Icon_Reset_420x420.png in Resources */ = {isa = PBXBuildFile; fileRef = AB0F29A114BE7213009ABC6F /* Icon_Reset_420x420.png */; };
AB796CE415CDCBA200C59155 /* Icon_RotateCCW_420x420.png in Resources */ = {isa = PBXBuildFile; fileRef = AB0F29A214BE7213009ABC6F /* Icon_RotateCCW_420x420.png */; }; AB796CE415CDCBA200C59155 /* Icon_RotateCCW_420x420.png in Resources */ = {isa = PBXBuildFile; fileRef = AB0F29A214BE7213009ABC6F /* Icon_RotateCCW_420x420.png */; };
@ -511,7 +509,6 @@
AB8F3C5E1A53AC2600A80BF6 /* Icon_Emulation_420x420.png in Resources */ = {isa = PBXBuildFile; fileRef = AB0F299D14BE7213009ABC6F /* Icon_Emulation_420x420.png */; }; AB8F3C5E1A53AC2600A80BF6 /* Icon_Emulation_420x420.png in Resources */ = {isa = PBXBuildFile; fileRef = AB0F299D14BE7213009ABC6F /* Icon_Emulation_420x420.png */; };
AB8F3C5F1A53AC2600A80BF6 /* Icon_Input_420x420.png in Resources */ = {isa = PBXBuildFile; fileRef = AB0F299E14BE7213009ABC6F /* Icon_Input_420x420.png */; }; AB8F3C5F1A53AC2600A80BF6 /* Icon_Input_420x420.png in Resources */ = {isa = PBXBuildFile; fileRef = AB0F299E14BE7213009ABC6F /* Icon_Input_420x420.png */; };
AB8F3C601A53AC2600A80BF6 /* Icon_AutoholdSet_420x420.png in Resources */ = {isa = PBXBuildFile; fileRef = AB7EC7F3189B2B92009D198A /* Icon_AutoholdSet_420x420.png */; }; AB8F3C601A53AC2600A80BF6 /* Icon_AutoholdSet_420x420.png in Resources */ = {isa = PBXBuildFile; fileRef = AB7EC7F3189B2B92009D198A /* Icon_AutoholdSet_420x420.png */; };
AB8F3C611A53AC2600A80BF6 /* Icon_Microphone_420x420.png in Resources */ = {isa = PBXBuildFile; fileRef = AB0F299F14BE7213009ABC6F /* Icon_Microphone_420x420.png */; };
AB8F3C621A53AC2600A80BF6 /* Icon_OpenROM_420x420.png in Resources */ = {isa = PBXBuildFile; fileRef = AB0F29A014BE7213009ABC6F /* Icon_OpenROM_420x420.png */; }; AB8F3C621A53AC2600A80BF6 /* Icon_OpenROM_420x420.png in Resources */ = {isa = PBXBuildFile; fileRef = AB0F29A014BE7213009ABC6F /* Icon_OpenROM_420x420.png */; };
AB8F3C631A53AC2600A80BF6 /* Icon_Reset_420x420.png in Resources */ = {isa = PBXBuildFile; fileRef = AB0F29A114BE7213009ABC6F /* Icon_Reset_420x420.png */; }; AB8F3C631A53AC2600A80BF6 /* Icon_Reset_420x420.png in Resources */ = {isa = PBXBuildFile; fileRef = AB0F29A114BE7213009ABC6F /* Icon_Reset_420x420.png */; };
AB8F3C641A53AC2600A80BF6 /* Icon_RotateCCW_420x420.png in Resources */ = {isa = PBXBuildFile; fileRef = AB0F29A214BE7213009ABC6F /* Icon_RotateCCW_420x420.png */; }; AB8F3C641A53AC2600A80BF6 /* Icon_RotateCCW_420x420.png in Resources */ = {isa = PBXBuildFile; fileRef = AB0F29A214BE7213009ABC6F /* Icon_RotateCCW_420x420.png */; };
@ -744,6 +741,24 @@
ABAF0A411A96E67200B95B75 /* RomInfoPanel.mm in Sources */ = {isa = PBXBuildFile; fileRef = ABAF0A401A96E67200B95B75 /* RomInfoPanel.mm */; }; ABAF0A411A96E67200B95B75 /* RomInfoPanel.mm in Sources */ = {isa = PBXBuildFile; fileRef = ABAF0A401A96E67200B95B75 /* RomInfoPanel.mm */; };
ABAF0A421A96E67200B95B75 /* RomInfoPanel.mm in Sources */ = {isa = PBXBuildFile; fileRef = ABAF0A401A96E67200B95B75 /* RomInfoPanel.mm */; }; ABAF0A421A96E67200B95B75 /* RomInfoPanel.mm in Sources */ = {isa = PBXBuildFile; fileRef = ABAF0A401A96E67200B95B75 /* RomInfoPanel.mm */; };
ABAF0A431A96E67200B95B75 /* RomInfoPanel.mm in Sources */ = {isa = PBXBuildFile; fileRef = ABAF0A401A96E67200B95B75 /* RomInfoPanel.mm */; }; ABAF0A431A96E67200B95B75 /* RomInfoPanel.mm in Sources */ = {isa = PBXBuildFile; fileRef = ABAF0A401A96E67200B95B75 /* RomInfoPanel.mm */; };
ABB0FBC51A9E5CEA0060C55A /* CoreAudio.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = ABB0FBC41A9E5CEA0060C55A /* CoreAudio.framework */; };
ABB0FBC61A9E5D070060C55A /* CoreAudio.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = ABB0FBC41A9E5CEA0060C55A /* CoreAudio.framework */; };
ABB0FBC71A9E5D080060C55A /* CoreAudio.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = ABB0FBC41A9E5CEA0060C55A /* CoreAudio.framework */; };
ABB0FBCC1A9EED350060C55A /* Icon_MicrophoneBlack_256x256.png in Resources */ = {isa = PBXBuildFile; fileRef = ABB0FBC81A9EED350060C55A /* Icon_MicrophoneBlack_256x256.png */; };
ABB0FBCD1A9EED350060C55A /* Icon_MicrophoneBlack_256x256.png in Resources */ = {isa = PBXBuildFile; fileRef = ABB0FBC81A9EED350060C55A /* Icon_MicrophoneBlack_256x256.png */; };
ABB0FBCE1A9EED350060C55A /* Icon_MicrophoneBlack_256x256.png in Resources */ = {isa = PBXBuildFile; fileRef = ABB0FBC81A9EED350060C55A /* Icon_MicrophoneBlack_256x256.png */; };
ABB0FBCF1A9EED350060C55A /* Icon_MicrophoneBlueGlow_256x256.png in Resources */ = {isa = PBXBuildFile; fileRef = ABB0FBC91A9EED350060C55A /* Icon_MicrophoneBlueGlow_256x256.png */; };
ABB0FBD01A9EED350060C55A /* Icon_MicrophoneBlueGlow_256x256.png in Resources */ = {isa = PBXBuildFile; fileRef = ABB0FBC91A9EED350060C55A /* Icon_MicrophoneBlueGlow_256x256.png */; };
ABB0FBD11A9EED350060C55A /* Icon_MicrophoneBlueGlow_256x256.png in Resources */ = {isa = PBXBuildFile; fileRef = ABB0FBC91A9EED350060C55A /* Icon_MicrophoneBlueGlow_256x256.png */; };
ABB0FBD21A9EED350060C55A /* Icon_MicrophoneGreen_256x256.png in Resources */ = {isa = PBXBuildFile; fileRef = ABB0FBCA1A9EED350060C55A /* Icon_MicrophoneGreen_256x256.png */; };
ABB0FBD31A9EED350060C55A /* Icon_MicrophoneGreen_256x256.png in Resources */ = {isa = PBXBuildFile; fileRef = ABB0FBCA1A9EED350060C55A /* Icon_MicrophoneGreen_256x256.png */; };
ABB0FBD41A9EED350060C55A /* Icon_MicrophoneGreen_256x256.png in Resources */ = {isa = PBXBuildFile; fileRef = ABB0FBCA1A9EED350060C55A /* Icon_MicrophoneGreen_256x256.png */; };
ABB0FBD51A9EED350060C55A /* Icon_MicrophoneRed_256x256.png in Resources */ = {isa = PBXBuildFile; fileRef = ABB0FBCB1A9EED350060C55A /* Icon_MicrophoneRed_256x256.png */; };
ABB0FBD61A9EED350060C55A /* Icon_MicrophoneRed_256x256.png in Resources */ = {isa = PBXBuildFile; fileRef = ABB0FBCB1A9EED350060C55A /* Icon_MicrophoneRed_256x256.png */; };
ABB0FBD71A9EED350060C55A /* Icon_MicrophoneRed_256x256.png in Resources */ = {isa = PBXBuildFile; fileRef = ABB0FBCB1A9EED350060C55A /* Icon_MicrophoneRed_256x256.png */; };
ABB0FBD91A9FD0260060C55A /* Icon_MicrophoneGray_256x256.png in Resources */ = {isa = PBXBuildFile; fileRef = ABB0FBD81A9FD0260060C55A /* Icon_MicrophoneGray_256x256.png */; };
ABB0FBDA1A9FD0260060C55A /* Icon_MicrophoneGray_256x256.png in Resources */ = {isa = PBXBuildFile; fileRef = ABB0FBD81A9FD0260060C55A /* Icon_MicrophoneGray_256x256.png */; };
ABB0FBDB1A9FD0260060C55A /* Icon_MicrophoneGray_256x256.png in Resources */ = {isa = PBXBuildFile; fileRef = ABB0FBD81A9FD0260060C55A /* Icon_MicrophoneGray_256x256.png */; };
ABB24F6D1A81EE92006C1108 /* OGLDisplayOutput_3_2.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ABB24F6B1A81EE92006C1108 /* OGLDisplayOutput_3_2.cpp */; }; ABB24F6D1A81EE92006C1108 /* OGLDisplayOutput_3_2.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ABB24F6B1A81EE92006C1108 /* OGLDisplayOutput_3_2.cpp */; };
ABB24F6E1A81EE92006C1108 /* OGLDisplayOutput_3_2.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ABB24F6B1A81EE92006C1108 /* OGLDisplayOutput_3_2.cpp */; }; ABB24F6E1A81EE92006C1108 /* OGLDisplayOutput_3_2.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ABB24F6B1A81EE92006C1108 /* OGLDisplayOutput_3_2.cpp */; };
ABB24F6F1A81EE92006C1108 /* OGLDisplayOutput_3_2.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ABB24F6B1A81EE92006C1108 /* OGLDisplayOutput_3_2.cpp */; }; ABB24F6F1A81EE92006C1108 /* OGLDisplayOutput_3_2.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ABB24F6B1A81EE92006C1108 /* OGLDisplayOutput_3_2.cpp */; };
@ -860,6 +875,11 @@
ABC3AF3014B7F06900D5B13D /* Icon_VolumeMute_16x16.png in Resources */ = {isa = PBXBuildFile; fileRef = ABC3AF2C14B7F06900D5B13D /* Icon_VolumeMute_16x16.png */; }; ABC3AF3014B7F06900D5B13D /* Icon_VolumeMute_16x16.png in Resources */ = {isa = PBXBuildFile; fileRef = ABC3AF2C14B7F06900D5B13D /* Icon_VolumeMute_16x16.png */; };
ABC3AF3114B7F06900D5B13D /* Icon_VolumeOneThird_16x16.png in Resources */ = {isa = PBXBuildFile; fileRef = ABC3AF2D14B7F06900D5B13D /* Icon_VolumeOneThird_16x16.png */; }; ABC3AF3114B7F06900D5B13D /* Icon_VolumeOneThird_16x16.png in Resources */ = {isa = PBXBuildFile; fileRef = ABC3AF2D14B7F06900D5B13D /* Icon_VolumeOneThird_16x16.png */; };
ABC3AF3214B7F06900D5B13D /* Icon_VolumeTwoThird_16x16.png in Resources */ = {isa = PBXBuildFile; fileRef = ABC3AF2E14B7F06900D5B13D /* Icon_VolumeTwoThird_16x16.png */; }; ABC3AF3214B7F06900D5B13D /* Icon_VolumeTwoThird_16x16.png in Resources */ = {isa = PBXBuildFile; fileRef = ABC3AF2E14B7F06900D5B13D /* Icon_VolumeTwoThird_16x16.png */; };
ABC503AD1AAC2B71002FCD43 /* Icon_MicrophoneDarkGreen_256x256.png in Resources */ = {isa = PBXBuildFile; fileRef = ABC503AC1AAC2B71002FCD43 /* Icon_MicrophoneDarkGreen_256x256.png */; };
ABC503AE1AAC2B90002FCD43 /* Icon_MicrophoneDarkGreen_256x256.png in Resources */ = {isa = PBXBuildFile; fileRef = ABC503AC1AAC2B71002FCD43 /* Icon_MicrophoneDarkGreen_256x256.png */; };
ABC503AF1AAC2B91002FCD43 /* Icon_MicrophoneDarkGreen_256x256.png in Resources */ = {isa = PBXBuildFile; fileRef = ABC503AC1AAC2B71002FCD43 /* Icon_MicrophoneDarkGreen_256x256.png */; };
ABC503B01AAC42C2002FCD43 /* coreaudiosound.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AB1B9E5F1501A78000464647 /* coreaudiosound.cpp */; };
ABC503B11AAC4355002FCD43 /* CoreAudio.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = ABB0FBC41A9E5CEA0060C55A /* CoreAudio.framework */; };
ABC570D1134431CE00E7B0B1 /* AudioUnit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = ABC570D0134431CE00E7B0B1 /* AudioUnit.framework */; }; ABC570D1134431CE00E7B0B1 /* AudioUnit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = ABC570D0134431CE00E7B0B1 /* AudioUnit.framework */; };
ABC570D5134431DA00E7B0B1 /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = ABC570D4134431DA00E7B0B1 /* OpenGL.framework */; }; ABC570D5134431DA00E7B0B1 /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = ABC570D4134431DA00E7B0B1 /* OpenGL.framework */; };
ABC5720D1344346600E7B0B1 /* AppKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 29B97324FDCFA39411CA2CEA /* AppKit.framework */; }; ABC5720D1344346600E7B0B1 /* AppKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 29B97324FDCFA39411CA2CEA /* AppKit.framework */; };
@ -1034,7 +1054,6 @@
AB0F299C14BE7213009ABC6F /* Icon_DSButtonY_420x420.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = Icon_DSButtonY_420x420.png; path = images/Icon_DSButtonY_420x420.png; sourceTree = "<group>"; }; AB0F299C14BE7213009ABC6F /* Icon_DSButtonY_420x420.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = Icon_DSButtonY_420x420.png; path = images/Icon_DSButtonY_420x420.png; sourceTree = "<group>"; };
AB0F299D14BE7213009ABC6F /* Icon_Emulation_420x420.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = Icon_Emulation_420x420.png; path = images/Icon_Emulation_420x420.png; sourceTree = "<group>"; }; AB0F299D14BE7213009ABC6F /* Icon_Emulation_420x420.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = Icon_Emulation_420x420.png; path = images/Icon_Emulation_420x420.png; sourceTree = "<group>"; };
AB0F299E14BE7213009ABC6F /* Icon_Input_420x420.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = Icon_Input_420x420.png; path = images/Icon_Input_420x420.png; sourceTree = "<group>"; }; AB0F299E14BE7213009ABC6F /* Icon_Input_420x420.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = Icon_Input_420x420.png; path = images/Icon_Input_420x420.png; sourceTree = "<group>"; };
AB0F299F14BE7213009ABC6F /* Icon_Microphone_420x420.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = Icon_Microphone_420x420.png; path = images/Icon_Microphone_420x420.png; sourceTree = "<group>"; };
AB0F29A014BE7213009ABC6F /* Icon_OpenROM_420x420.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = Icon_OpenROM_420x420.png; path = images/Icon_OpenROM_420x420.png; sourceTree = "<group>"; }; AB0F29A014BE7213009ABC6F /* Icon_OpenROM_420x420.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = Icon_OpenROM_420x420.png; path = images/Icon_OpenROM_420x420.png; sourceTree = "<group>"; };
AB0F29A114BE7213009ABC6F /* Icon_Reset_420x420.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = Icon_Reset_420x420.png; path = images/Icon_Reset_420x420.png; sourceTree = "<group>"; }; AB0F29A114BE7213009ABC6F /* Icon_Reset_420x420.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = Icon_Reset_420x420.png; path = images/Icon_Reset_420x420.png; sourceTree = "<group>"; };
AB0F29A214BE7213009ABC6F /* Icon_RotateCCW_420x420.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = Icon_RotateCCW_420x420.png; path = images/Icon_RotateCCW_420x420.png; sourceTree = "<group>"; }; AB0F29A214BE7213009ABC6F /* Icon_RotateCCW_420x420.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = Icon_RotateCCW_420x420.png; path = images/Icon_RotateCCW_420x420.png; sourceTree = "<group>"; };
@ -1225,6 +1244,12 @@
ABAD3E6F13AF1D6D00502E1E /* WavFile.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = WavFile.cpp; sourceTree = "<group>"; }; ABAD3E6F13AF1D6D00502E1E /* WavFile.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = WavFile.cpp; sourceTree = "<group>"; };
ABAF0A3F1A96E67200B95B75 /* RomInfoPanel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RomInfoPanel.h; sourceTree = "<group>"; }; ABAF0A3F1A96E67200B95B75 /* RomInfoPanel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RomInfoPanel.h; sourceTree = "<group>"; };
ABAF0A401A96E67200B95B75 /* RomInfoPanel.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = RomInfoPanel.mm; sourceTree = "<group>"; }; ABAF0A401A96E67200B95B75 /* RomInfoPanel.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = RomInfoPanel.mm; sourceTree = "<group>"; };
ABB0FBC41A9E5CEA0060C55A /* CoreAudio.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreAudio.framework; path = System/Library/Frameworks/CoreAudio.framework; sourceTree = SDKROOT; };
ABB0FBC81A9EED350060C55A /* Icon_MicrophoneBlack_256x256.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = Icon_MicrophoneBlack_256x256.png; path = images/Icon_MicrophoneBlack_256x256.png; sourceTree = "<group>"; };
ABB0FBC91A9EED350060C55A /* Icon_MicrophoneBlueGlow_256x256.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = Icon_MicrophoneBlueGlow_256x256.png; path = images/Icon_MicrophoneBlueGlow_256x256.png; sourceTree = "<group>"; };
ABB0FBCA1A9EED350060C55A /* Icon_MicrophoneGreen_256x256.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = Icon_MicrophoneGreen_256x256.png; path = images/Icon_MicrophoneGreen_256x256.png; sourceTree = "<group>"; };
ABB0FBCB1A9EED350060C55A /* Icon_MicrophoneRed_256x256.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = Icon_MicrophoneRed_256x256.png; path = images/Icon_MicrophoneRed_256x256.png; sourceTree = "<group>"; };
ABB0FBD81A9FD0260060C55A /* Icon_MicrophoneGray_256x256.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = Icon_MicrophoneGray_256x256.png; path = images/Icon_MicrophoneGray_256x256.png; sourceTree = "<group>"; };
ABB24F6B1A81EE92006C1108 /* OGLDisplayOutput_3_2.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = OGLDisplayOutput_3_2.cpp; sourceTree = "<group>"; }; ABB24F6B1A81EE92006C1108 /* OGLDisplayOutput_3_2.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = OGLDisplayOutput_3_2.cpp; sourceTree = "<group>"; };
ABB24F6C1A81EE92006C1108 /* OGLDisplayOutput_3_2.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OGLDisplayOutput_3_2.h; sourceTree = "<group>"; }; ABB24F6C1A81EE92006C1108 /* OGLDisplayOutput_3_2.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OGLDisplayOutput_3_2.h; sourceTree = "<group>"; };
ABB3C63B1501BB8300E0C22E /* DeSmuME_Prefix_OpenEmu.pch */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = DeSmuME_Prefix_OpenEmu.pch; sourceTree = "<group>"; }; ABB3C63B1501BB8300E0C22E /* DeSmuME_Prefix_OpenEmu.pch */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = DeSmuME_Prefix_OpenEmu.pch; sourceTree = "<group>"; };
@ -1245,6 +1270,7 @@
ABC3AF2C14B7F06900D5B13D /* Icon_VolumeMute_16x16.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = Icon_VolumeMute_16x16.png; path = images/Icon_VolumeMute_16x16.png; sourceTree = "<group>"; }; ABC3AF2C14B7F06900D5B13D /* Icon_VolumeMute_16x16.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = Icon_VolumeMute_16x16.png; path = images/Icon_VolumeMute_16x16.png; sourceTree = "<group>"; };
ABC3AF2D14B7F06900D5B13D /* Icon_VolumeOneThird_16x16.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = Icon_VolumeOneThird_16x16.png; path = images/Icon_VolumeOneThird_16x16.png; sourceTree = "<group>"; }; ABC3AF2D14B7F06900D5B13D /* Icon_VolumeOneThird_16x16.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = Icon_VolumeOneThird_16x16.png; path = images/Icon_VolumeOneThird_16x16.png; sourceTree = "<group>"; };
ABC3AF2E14B7F06900D5B13D /* Icon_VolumeTwoThird_16x16.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = Icon_VolumeTwoThird_16x16.png; path = images/Icon_VolumeTwoThird_16x16.png; sourceTree = "<group>"; }; ABC3AF2E14B7F06900D5B13D /* Icon_VolumeTwoThird_16x16.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = Icon_VolumeTwoThird_16x16.png; path = images/Icon_VolumeTwoThird_16x16.png; sourceTree = "<group>"; };
ABC503AC1AAC2B71002FCD43 /* Icon_MicrophoneDarkGreen_256x256.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = Icon_MicrophoneDarkGreen_256x256.png; path = images/Icon_MicrophoneDarkGreen_256x256.png; sourceTree = "<group>"; };
ABC570D0134431CE00E7B0B1 /* AudioUnit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AudioUnit.framework; path = System/Library/Frameworks/AudioUnit.framework; sourceTree = SDKROOT; }; ABC570D0134431CE00E7B0B1 /* AudioUnit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AudioUnit.framework; path = System/Library/Frameworks/AudioUnit.framework; sourceTree = SDKROOT; };
ABC570D4134431DA00E7B0B1 /* OpenGL.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = OpenGL.framework; path = System/Library/Frameworks/OpenGL.framework; sourceTree = SDKROOT; }; ABC570D4134431DA00E7B0B1 /* OpenGL.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = OpenGL.framework; path = System/Library/Frameworks/OpenGL.framework; sourceTree = SDKROOT; };
ABC719E1138CB25E002827A9 /* DefaultKeyMappings.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = DefaultKeyMappings.plist; sourceTree = "<group>"; }; ABC719E1138CB25E002827A9 /* DefaultKeyMappings.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = DefaultKeyMappings.plist; sourceTree = "<group>"; };
@ -1476,6 +1502,7 @@
ABC570D1134431CE00E7B0B1 /* AudioUnit.framework in Frameworks */, ABC570D1134431CE00E7B0B1 /* AudioUnit.framework in Frameworks */,
AB3701E5173A3FBF006E573E /* Carbon.framework in Frameworks */, AB3701E5173A3FBF006E573E /* Carbon.framework in Frameworks */,
8D11072F0486CEB800E47090 /* Cocoa.framework in Frameworks */, 8D11072F0486CEB800E47090 /* Cocoa.framework in Frameworks */,
ABB0FBC61A9E5D070060C55A /* CoreAudio.framework in Frameworks */,
AB564908186E6F1F002740F4 /* ForceFeedback.framework in Frameworks */, AB564908186E6F1F002740F4 /* ForceFeedback.framework in Frameworks */,
ABC572101344347000E7B0B1 /* Foundation.framework in Frameworks */, ABC572101344347000E7B0B1 /* Foundation.framework in Frameworks */,
AB350BA51478AC96007165AC /* IOKit.framework in Frameworks */, AB350BA51478AC96007165AC /* IOKit.framework in Frameworks */,
@ -1494,6 +1521,7 @@
AB796D6715CDCBA200C59155 /* AudioUnit.framework in Frameworks */, AB796D6715CDCBA200C59155 /* AudioUnit.framework in Frameworks */,
AB74EC8A1738499C0026C41E /* Carbon.framework in Frameworks */, AB74EC8A1738499C0026C41E /* Carbon.framework in Frameworks */,
AB796D6815CDCBA200C59155 /* Cocoa.framework in Frameworks */, AB796D6815CDCBA200C59155 /* Cocoa.framework in Frameworks */,
ABB0FBC71A9E5D080060C55A /* CoreAudio.framework in Frameworks */,
AB564907186E6F0C002740F4 /* ForceFeedback.framework in Frameworks */, AB564907186E6F0C002740F4 /* ForceFeedback.framework in Frameworks */,
AB796D6915CDCBA200C59155 /* Foundation.framework in Frameworks */, AB796D6915CDCBA200C59155 /* Foundation.framework in Frameworks */,
AB796D6A15CDCBA200C59155 /* IOKit.framework in Frameworks */, AB796D6A15CDCBA200C59155 /* IOKit.framework in Frameworks */,
@ -1512,6 +1540,7 @@
AB8F3D221A53AC2600A80BF6 /* AudioUnit.framework in Frameworks */, AB8F3D221A53AC2600A80BF6 /* AudioUnit.framework in Frameworks */,
AB8F3D231A53AC2600A80BF6 /* Carbon.framework in Frameworks */, AB8F3D231A53AC2600A80BF6 /* Carbon.framework in Frameworks */,
AB8F3D241A53AC2600A80BF6 /* Cocoa.framework in Frameworks */, AB8F3D241A53AC2600A80BF6 /* Cocoa.framework in Frameworks */,
ABB0FBC51A9E5CEA0060C55A /* CoreAudio.framework in Frameworks */,
AB8F3D251A53AC2600A80BF6 /* ForceFeedback.framework in Frameworks */, AB8F3D251A53AC2600A80BF6 /* ForceFeedback.framework in Frameworks */,
AB8F3D261A53AC2600A80BF6 /* Foundation.framework in Frameworks */, AB8F3D261A53AC2600A80BF6 /* Foundation.framework in Frameworks */,
AB8F3D271A53AC2600A80BF6 /* IOKit.framework in Frameworks */, AB8F3D271A53AC2600A80BF6 /* IOKit.framework in Frameworks */,
@ -1532,6 +1561,7 @@
ABB3C6671501BF8A00E0C22E /* Foundation.framework in Frameworks */, ABB3C6671501BF8A00E0C22E /* Foundation.framework in Frameworks */,
ABB3C6691501BF8A00E0C22E /* OpenGL.framework in Frameworks */, ABB3C6691501BF8A00E0C22E /* OpenGL.framework in Frameworks */,
ABB3C66A1501BF8A00E0C22E /* libz.dylib in Frameworks */, ABB3C66A1501BF8A00E0C22E /* libz.dylib in Frameworks */,
ABC503B11AAC4355002FCD43 /* CoreAudio.framework in Frameworks */,
AB5785FD17176AFC002C5FC7 /* OpenEmuBase.framework in Frameworks */, AB5785FD17176AFC002C5FC7 /* OpenEmuBase.framework in Frameworks */,
); );
runOnlyForDeploymentPostprocessing = 0; runOnlyForDeploymentPostprocessing = 0;
@ -1597,6 +1627,7 @@
ABC570D0134431CE00E7B0B1 /* AudioUnit.framework */, ABC570D0134431CE00E7B0B1 /* AudioUnit.framework */,
AB74EC891738499C0026C41E /* Carbon.framework */, AB74EC891738499C0026C41E /* Carbon.framework */,
1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */, 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */,
ABB0FBC41A9E5CEA0060C55A /* CoreAudio.framework */,
AB564906186E6F0C002740F4 /* ForceFeedback.framework */, AB564906186E6F0C002740F4 /* ForceFeedback.framework */,
29B97325FDCFA39411CA2CEA /* Foundation.framework */, 29B97325FDCFA39411CA2CEA /* Foundation.framework */,
AB350BA41478AC96007165AC /* IOKit.framework */, AB350BA41478AC96007165AC /* IOKit.framework */,
@ -1888,7 +1919,12 @@
AB681015187D4AEF0049F2C2 /* Icon_GuitarGrip_Button_Red_512x512.png */, AB681015187D4AEF0049F2C2 /* Icon_GuitarGrip_Button_Red_512x512.png */,
AB681016187D4AEF0049F2C2 /* Icon_GuitarGrip_Button_Yellow_512x512.png */, AB681016187D4AEF0049F2C2 /* Icon_GuitarGrip_Button_Yellow_512x512.png */,
AB0F299E14BE7213009ABC6F /* Icon_Input_420x420.png */, AB0F299E14BE7213009ABC6F /* Icon_Input_420x420.png */,
AB0F299F14BE7213009ABC6F /* Icon_Microphone_420x420.png */, ABB0FBC81A9EED350060C55A /* Icon_MicrophoneBlack_256x256.png */,
ABB0FBC91A9EED350060C55A /* Icon_MicrophoneBlueGlow_256x256.png */,
ABC503AC1AAC2B71002FCD43 /* Icon_MicrophoneDarkGreen_256x256.png */,
ABB0FBD81A9FD0260060C55A /* Icon_MicrophoneGray_256x256.png */,
ABB0FBCA1A9EED350060C55A /* Icon_MicrophoneGreen_256x256.png */,
ABB0FBCB1A9EED350060C55A /* Icon_MicrophoneRed_256x256.png */,
AB0F29A014BE7213009ABC6F /* Icon_OpenROM_420x420.png */, AB0F29A014BE7213009ABC6F /* Icon_OpenROM_420x420.png */,
AB681018187D4AEF0049F2C2 /* Icon_PaddleKnob_256x256.png */, AB681018187D4AEF0049F2C2 /* Icon_PaddleKnob_256x256.png */,
AB0F28FF14BE6E68009ABC6F /* Icon_Pause_420x420.png */, AB0F28FF14BE6E68009ABC6F /* Icon_Pause_420x420.png */,
@ -2356,11 +2392,13 @@
buildActionMask = 2147483647; buildActionMask = 2147483647;
files = ( files = (
AB02475C13886BF300E9F9AB /* KeyNames.plist in Resources */, AB02475C13886BF300E9F9AB /* KeyNames.plist in Resources */,
ABB0FBDA1A9FD0260060C55A /* Icon_MicrophoneGray_256x256.png in Resources */,
ABC719E2138CB25E002827A9 /* DefaultKeyMappings.plist in Resources */, ABC719E2138CB25E002827A9 /* DefaultKeyMappings.plist in Resources */,
ABBC0F8D1394B1AA0028B6BD /* DefaultUserPrefs.plist in Resources */, ABBC0F8D1394B1AA0028B6BD /* DefaultUserPrefs.plist in Resources */,
AB64987C13ECC73800EE7DD2 /* FileTypeInfo.plist in Resources */, AB64987C13ECC73800EE7DD2 /* FileTypeInfo.plist in Resources */,
ABEFCF61141AB82A000CC0CD /* AppIcon_ROMSave.icns in Resources */, ABEFCF61141AB82A000CC0CD /* AppIcon_ROMSave.icns in Resources */,
ABEFCF62141AB82A000CC0CD /* AppIcon_DeSmuME.icns in Resources */, ABEFCF62141AB82A000CC0CD /* AppIcon_DeSmuME.icns in Resources */,
ABB0FBD01A9EED350060C55A /* Icon_MicrophoneBlueGlow_256x256.png in Resources */,
ABEFCF63141AB82A000CC0CD /* AppIcon_NintendoDS_ROM.icns in Resources */, ABEFCF63141AB82A000CC0CD /* AppIcon_NintendoDS_ROM.icns in Resources */,
ABEFCF64141AB82A000CC0CD /* AppIcon_SaveState.icns in Resources */, ABEFCF64141AB82A000CC0CD /* AppIcon_SaveState.icns in Resources */,
AB00E87B14205EAE00DE561F /* InfoPlist.strings in Resources */, AB00E87B14205EAE00DE561F /* InfoPlist.strings in Resources */,
@ -2376,6 +2414,7 @@
ABC3AF3014B7F06900D5B13D /* Icon_VolumeMute_16x16.png in Resources */, ABC3AF3014B7F06900D5B13D /* Icon_VolumeMute_16x16.png in Resources */,
ABC3AF3114B7F06900D5B13D /* Icon_VolumeOneThird_16x16.png in Resources */, ABC3AF3114B7F06900D5B13D /* Icon_VolumeOneThird_16x16.png in Resources */,
ABC3AF3214B7F06900D5B13D /* Icon_VolumeTwoThird_16x16.png in Resources */, ABC3AF3214B7F06900D5B13D /* Icon_VolumeTwoThird_16x16.png in Resources */,
ABB0FBD31A9EED350060C55A /* Icon_MicrophoneGreen_256x256.png in Resources */,
ABDDF7CC1898F032007583C1 /* Icon_FrameJump_420x420.png in Resources */, ABDDF7CC1898F032007583C1 /* Icon_FrameJump_420x420.png in Resources */,
AB0F290214BE6E68009ABC6F /* Icon_Execute_420x420.png in Resources */, AB0F290214BE6E68009ABC6F /* Icon_Execute_420x420.png in Resources */,
AB0F290314BE6E68009ABC6F /* Icon_Pause_420x420.png in Resources */, AB0F290314BE6E68009ABC6F /* Icon_Pause_420x420.png in Resources */,
@ -2387,6 +2426,7 @@
AB0F293B14BE6FA7009ABC6F /* ColorSwatch_DarkGreen_16x16.png in Resources */, AB0F293B14BE6FA7009ABC6F /* ColorSwatch_DarkGreen_16x16.png in Resources */,
AB0F293C14BE6FA7009ABC6F /* ColorSwatch_DarkPurple_16x16.png in Resources */, AB0F293C14BE6FA7009ABC6F /* ColorSwatch_DarkPurple_16x16.png in Resources */,
AB0F293D14BE6FA7009ABC6F /* ColorSwatch_Gray_16x16.png in Resources */, AB0F293D14BE6FA7009ABC6F /* ColorSwatch_Gray_16x16.png in Resources */,
ABC503AF1AAC2B91002FCD43 /* Icon_MicrophoneDarkGreen_256x256.png in Resources */,
AB0F293E14BE6FA7009ABC6F /* ColorSwatch_Green_16x16.png in Resources */, AB0F293E14BE6FA7009ABC6F /* ColorSwatch_Green_16x16.png in Resources */,
AB0F293F14BE6FA7009ABC6F /* ColorSwatch_LimeGreen_16x16.png in Resources */, AB0F293F14BE6FA7009ABC6F /* ColorSwatch_LimeGreen_16x16.png in Resources */,
AB0F294014BE6FA7009ABC6F /* ColorSwatch_Magenta_16x16.png in Resources */, AB0F294014BE6FA7009ABC6F /* ColorSwatch_Magenta_16x16.png in Resources */,
@ -2426,7 +2466,7 @@
AB0F29AF14BE7213009ABC6F /* Icon_Emulation_420x420.png in Resources */, AB0F29AF14BE7213009ABC6F /* Icon_Emulation_420x420.png in Resources */,
AB0F29B014BE7213009ABC6F /* Icon_Input_420x420.png in Resources */, AB0F29B014BE7213009ABC6F /* Icon_Input_420x420.png in Resources */,
AB7EC7F7189B2B92009D198A /* Icon_AutoholdSet_420x420.png in Resources */, AB7EC7F7189B2B92009D198A /* Icon_AutoholdSet_420x420.png in Resources */,
AB0F29B114BE7213009ABC6F /* Icon_Microphone_420x420.png in Resources */, ABB0FBCD1A9EED350060C55A /* Icon_MicrophoneBlack_256x256.png in Resources */,
AB0F29B214BE7213009ABC6F /* Icon_OpenROM_420x420.png in Resources */, AB0F29B214BE7213009ABC6F /* Icon_OpenROM_420x420.png in Resources */,
AB0F29B314BE7213009ABC6F /* Icon_Reset_420x420.png in Resources */, AB0F29B314BE7213009ABC6F /* Icon_Reset_420x420.png in Resources */,
AB0F29B414BE7213009ABC6F /* Icon_RotateCCW_420x420.png in Resources */, AB0F29B414BE7213009ABC6F /* Icon_RotateCCW_420x420.png in Resources */,
@ -2437,6 +2477,7 @@
AB3ACC3F14C24D5400D7D192 /* ChangeLog in Resources */, AB3ACC3F14C24D5400D7D192 /* ChangeLog in Resources */,
AB3ACC4014C24D5400D7D192 /* COPYING in Resources */, AB3ACC4014C24D5400D7D192 /* COPYING in Resources */,
AB3ACC4114C24D5400D7D192 /* README in Resources */, AB3ACC4114C24D5400D7D192 /* README in Resources */,
ABB0FBD61A9EED350060C55A /* Icon_MicrophoneRed_256x256.png in Resources */,
AB681020187D4AEF0049F2C2 /* Icon_GuitarGrip_Button_Red_512x512.png in Resources */, AB681020187D4AEF0049F2C2 /* Icon_GuitarGrip_Button_Red_512x512.png in Resources */,
ABAB4550187CDB70007BE20C /* Image_GuitarGrip.png in Resources */, ABAB4550187CDB70007BE20C /* Image_GuitarGrip.png in Resources */,
AB681022187D4AEF0049F2C2 /* Icon_GuitarGrip_Button_Yellow_512x512.png in Resources */, AB681022187D4AEF0049F2C2 /* Icon_GuitarGrip_Button_Yellow_512x512.png in Resources */,
@ -2451,11 +2492,13 @@
buildActionMask = 2147483647; buildActionMask = 2147483647;
files = ( files = (
AB796CA715CDCBA200C59155 /* KeyNames.plist in Resources */, AB796CA715CDCBA200C59155 /* KeyNames.plist in Resources */,
ABB0FBD91A9FD0260060C55A /* Icon_MicrophoneGray_256x256.png in Resources */,
AB796CA815CDCBA200C59155 /* DefaultKeyMappings.plist in Resources */, AB796CA815CDCBA200C59155 /* DefaultKeyMappings.plist in Resources */,
AB796CA915CDCBA200C59155 /* DefaultUserPrefs.plist in Resources */, AB796CA915CDCBA200C59155 /* DefaultUserPrefs.plist in Resources */,
AB796CAA15CDCBA200C59155 /* FileTypeInfo.plist in Resources */, AB796CAA15CDCBA200C59155 /* FileTypeInfo.plist in Resources */,
AB796CAB15CDCBA200C59155 /* AppIcon_ROMSave.icns in Resources */, AB796CAB15CDCBA200C59155 /* AppIcon_ROMSave.icns in Resources */,
AB796CAC15CDCBA200C59155 /* AppIcon_DeSmuME.icns in Resources */, AB796CAC15CDCBA200C59155 /* AppIcon_DeSmuME.icns in Resources */,
ABB0FBCF1A9EED350060C55A /* Icon_MicrophoneBlueGlow_256x256.png in Resources */,
AB796CAD15CDCBA200C59155 /* AppIcon_NintendoDS_ROM.icns in Resources */, AB796CAD15CDCBA200C59155 /* AppIcon_NintendoDS_ROM.icns in Resources */,
AB796CAE15CDCBA200C59155 /* AppIcon_SaveState.icns in Resources */, AB796CAE15CDCBA200C59155 /* AppIcon_SaveState.icns in Resources */,
AB796CAF15CDCBA200C59155 /* InfoPlist.strings in Resources */, AB796CAF15CDCBA200C59155 /* InfoPlist.strings in Resources */,
@ -2471,6 +2514,7 @@
AB796CB815CDCBA200C59155 /* Icon_VolumeMute_16x16.png in Resources */, AB796CB815CDCBA200C59155 /* Icon_VolumeMute_16x16.png in Resources */,
AB796CB915CDCBA200C59155 /* Icon_VolumeOneThird_16x16.png in Resources */, AB796CB915CDCBA200C59155 /* Icon_VolumeOneThird_16x16.png in Resources */,
AB796CBA15CDCBA200C59155 /* Icon_VolumeTwoThird_16x16.png in Resources */, AB796CBA15CDCBA200C59155 /* Icon_VolumeTwoThird_16x16.png in Resources */,
ABB0FBD21A9EED350060C55A /* Icon_MicrophoneGreen_256x256.png in Resources */,
ABDDF7CB1898F032007583C1 /* Icon_FrameJump_420x420.png in Resources */, ABDDF7CB1898F032007583C1 /* Icon_FrameJump_420x420.png in Resources */,
AB796CBB15CDCBA200C59155 /* Icon_Execute_420x420.png in Resources */, AB796CBB15CDCBA200C59155 /* Icon_Execute_420x420.png in Resources */,
AB796CBC15CDCBA200C59155 /* Icon_Pause_420x420.png in Resources */, AB796CBC15CDCBA200C59155 /* Icon_Pause_420x420.png in Resources */,
@ -2482,6 +2526,7 @@
AB796CC215CDCBA200C59155 /* ColorSwatch_DarkGreen_16x16.png in Resources */, AB796CC215CDCBA200C59155 /* ColorSwatch_DarkGreen_16x16.png in Resources */,
AB796CC315CDCBA200C59155 /* ColorSwatch_DarkPurple_16x16.png in Resources */, AB796CC315CDCBA200C59155 /* ColorSwatch_DarkPurple_16x16.png in Resources */,
AB796CC415CDCBA200C59155 /* ColorSwatch_Gray_16x16.png in Resources */, AB796CC415CDCBA200C59155 /* ColorSwatch_Gray_16x16.png in Resources */,
ABC503AD1AAC2B71002FCD43 /* Icon_MicrophoneDarkGreen_256x256.png in Resources */,
AB796CC515CDCBA200C59155 /* ColorSwatch_Green_16x16.png in Resources */, AB796CC515CDCBA200C59155 /* ColorSwatch_Green_16x16.png in Resources */,
AB796CC615CDCBA200C59155 /* ColorSwatch_LimeGreen_16x16.png in Resources */, AB796CC615CDCBA200C59155 /* ColorSwatch_LimeGreen_16x16.png in Resources */,
AB796CC715CDCBA200C59155 /* ColorSwatch_Magenta_16x16.png in Resources */, AB796CC715CDCBA200C59155 /* ColorSwatch_Magenta_16x16.png in Resources */,
@ -2521,7 +2566,7 @@
AB796CDF15CDCBA200C59155 /* Icon_Emulation_420x420.png in Resources */, AB796CDF15CDCBA200C59155 /* Icon_Emulation_420x420.png in Resources */,
AB796CE015CDCBA200C59155 /* Icon_Input_420x420.png in Resources */, AB796CE015CDCBA200C59155 /* Icon_Input_420x420.png in Resources */,
AB7EC7F6189B2B92009D198A /* Icon_AutoholdSet_420x420.png in Resources */, AB7EC7F6189B2B92009D198A /* Icon_AutoholdSet_420x420.png in Resources */,
AB796CE115CDCBA200C59155 /* Icon_Microphone_420x420.png in Resources */, ABB0FBCC1A9EED350060C55A /* Icon_MicrophoneBlack_256x256.png in Resources */,
AB796CE215CDCBA200C59155 /* Icon_OpenROM_420x420.png in Resources */, AB796CE215CDCBA200C59155 /* Icon_OpenROM_420x420.png in Resources */,
AB796CE315CDCBA200C59155 /* Icon_Reset_420x420.png in Resources */, AB796CE315CDCBA200C59155 /* Icon_Reset_420x420.png in Resources */,
AB796CE415CDCBA200C59155 /* Icon_RotateCCW_420x420.png in Resources */, AB796CE415CDCBA200C59155 /* Icon_RotateCCW_420x420.png in Resources */,
@ -2532,6 +2577,7 @@
AB796CE915CDCBA200C59155 /* ChangeLog in Resources */, AB796CE915CDCBA200C59155 /* ChangeLog in Resources */,
AB796CEA15CDCBA200C59155 /* COPYING in Resources */, AB796CEA15CDCBA200C59155 /* COPYING in Resources */,
AB796CEB15CDCBA200C59155 /* README in Resources */, AB796CEB15CDCBA200C59155 /* README in Resources */,
ABB0FBD51A9EED350060C55A /* Icon_MicrophoneRed_256x256.png in Resources */,
AB68101F187D4AEF0049F2C2 /* Icon_GuitarGrip_Button_Red_512x512.png in Resources */, AB68101F187D4AEF0049F2C2 /* Icon_GuitarGrip_Button_Red_512x512.png in Resources */,
ABAB454F187CDB70007BE20C /* Image_GuitarGrip.png in Resources */, ABAB454F187CDB70007BE20C /* Image_GuitarGrip.png in Resources */,
AB681021187D4AEF0049F2C2 /* Icon_GuitarGrip_Button_Yellow_512x512.png in Resources */, AB681021187D4AEF0049F2C2 /* Icon_GuitarGrip_Button_Yellow_512x512.png in Resources */,
@ -2546,11 +2592,13 @@
buildActionMask = 2147483647; buildActionMask = 2147483647;
files = ( files = (
AB8F3C1A1A53AC2600A80BF6 /* KeyNames.plist in Resources */, AB8F3C1A1A53AC2600A80BF6 /* KeyNames.plist in Resources */,
ABB0FBDB1A9FD0260060C55A /* Icon_MicrophoneGray_256x256.png in Resources */,
AB8F3C1B1A53AC2600A80BF6 /* DefaultKeyMappings.plist in Resources */, AB8F3C1B1A53AC2600A80BF6 /* DefaultKeyMappings.plist in Resources */,
AB8F3C1C1A53AC2600A80BF6 /* DefaultUserPrefs.plist in Resources */, AB8F3C1C1A53AC2600A80BF6 /* DefaultUserPrefs.plist in Resources */,
AB8F3C1D1A53AC2600A80BF6 /* FileTypeInfo.plist in Resources */, AB8F3C1D1A53AC2600A80BF6 /* FileTypeInfo.plist in Resources */,
AB8F3C1E1A53AC2600A80BF6 /* AppIcon_ROMSave.icns in Resources */, AB8F3C1E1A53AC2600A80BF6 /* AppIcon_ROMSave.icns in Resources */,
AB8F3C1F1A53AC2600A80BF6 /* AppIcon_DeSmuME.icns in Resources */, AB8F3C1F1A53AC2600A80BF6 /* AppIcon_DeSmuME.icns in Resources */,
ABB0FBD11A9EED350060C55A /* Icon_MicrophoneBlueGlow_256x256.png in Resources */,
AB8F3C201A53AC2600A80BF6 /* AppIcon_NintendoDS_ROM.icns in Resources */, AB8F3C201A53AC2600A80BF6 /* AppIcon_NintendoDS_ROM.icns in Resources */,
AB8F3C211A53AC2600A80BF6 /* AppIcon_SaveState.icns in Resources */, AB8F3C211A53AC2600A80BF6 /* AppIcon_SaveState.icns in Resources */,
AB8F3C221A53AC2600A80BF6 /* InfoPlist.strings in Resources */, AB8F3C221A53AC2600A80BF6 /* InfoPlist.strings in Resources */,
@ -2566,6 +2614,7 @@
AB8F3C2C1A53AC2600A80BF6 /* Icon_VolumeMute_16x16.png in Resources */, AB8F3C2C1A53AC2600A80BF6 /* Icon_VolumeMute_16x16.png in Resources */,
AB8F3C2D1A53AC2600A80BF6 /* Icon_VolumeOneThird_16x16.png in Resources */, AB8F3C2D1A53AC2600A80BF6 /* Icon_VolumeOneThird_16x16.png in Resources */,
AB8F3C2E1A53AC2600A80BF6 /* Icon_VolumeTwoThird_16x16.png in Resources */, AB8F3C2E1A53AC2600A80BF6 /* Icon_VolumeTwoThird_16x16.png in Resources */,
ABB0FBD41A9EED350060C55A /* Icon_MicrophoneGreen_256x256.png in Resources */,
AB8F3C2F1A53AC2600A80BF6 /* Icon_FrameJump_420x420.png in Resources */, AB8F3C2F1A53AC2600A80BF6 /* Icon_FrameJump_420x420.png in Resources */,
AB8F3C301A53AC2600A80BF6 /* Icon_Execute_420x420.png in Resources */, AB8F3C301A53AC2600A80BF6 /* Icon_Execute_420x420.png in Resources */,
AB8F3C311A53AC2600A80BF6 /* Icon_Pause_420x420.png in Resources */, AB8F3C311A53AC2600A80BF6 /* Icon_Pause_420x420.png in Resources */,
@ -2577,6 +2626,7 @@
AB8F3C371A53AC2600A80BF6 /* ColorSwatch_DarkGreen_16x16.png in Resources */, AB8F3C371A53AC2600A80BF6 /* ColorSwatch_DarkGreen_16x16.png in Resources */,
AB8F3C381A53AC2600A80BF6 /* ColorSwatch_DarkPurple_16x16.png in Resources */, AB8F3C381A53AC2600A80BF6 /* ColorSwatch_DarkPurple_16x16.png in Resources */,
AB8F3C391A53AC2600A80BF6 /* ColorSwatch_Gray_16x16.png in Resources */, AB8F3C391A53AC2600A80BF6 /* ColorSwatch_Gray_16x16.png in Resources */,
ABC503AE1AAC2B90002FCD43 /* Icon_MicrophoneDarkGreen_256x256.png in Resources */,
AB8F3C3A1A53AC2600A80BF6 /* ColorSwatch_Green_16x16.png in Resources */, AB8F3C3A1A53AC2600A80BF6 /* ColorSwatch_Green_16x16.png in Resources */,
AB8F3C3B1A53AC2600A80BF6 /* ColorSwatch_LimeGreen_16x16.png in Resources */, AB8F3C3B1A53AC2600A80BF6 /* ColorSwatch_LimeGreen_16x16.png in Resources */,
AB8F3C3C1A53AC2600A80BF6 /* ColorSwatch_Magenta_16x16.png in Resources */, AB8F3C3C1A53AC2600A80BF6 /* ColorSwatch_Magenta_16x16.png in Resources */,
@ -2616,7 +2666,7 @@
AB8F3C5E1A53AC2600A80BF6 /* Icon_Emulation_420x420.png in Resources */, AB8F3C5E1A53AC2600A80BF6 /* Icon_Emulation_420x420.png in Resources */,
AB8F3C5F1A53AC2600A80BF6 /* Icon_Input_420x420.png in Resources */, AB8F3C5F1A53AC2600A80BF6 /* Icon_Input_420x420.png in Resources */,
AB8F3C601A53AC2600A80BF6 /* Icon_AutoholdSet_420x420.png in Resources */, AB8F3C601A53AC2600A80BF6 /* Icon_AutoholdSet_420x420.png in Resources */,
AB8F3C611A53AC2600A80BF6 /* Icon_Microphone_420x420.png in Resources */, ABB0FBCE1A9EED350060C55A /* Icon_MicrophoneBlack_256x256.png in Resources */,
AB8F3C621A53AC2600A80BF6 /* Icon_OpenROM_420x420.png in Resources */, AB8F3C621A53AC2600A80BF6 /* Icon_OpenROM_420x420.png in Resources */,
AB8F3C631A53AC2600A80BF6 /* Icon_Reset_420x420.png in Resources */, AB8F3C631A53AC2600A80BF6 /* Icon_Reset_420x420.png in Resources */,
AB8F3C641A53AC2600A80BF6 /* Icon_RotateCCW_420x420.png in Resources */, AB8F3C641A53AC2600A80BF6 /* Icon_RotateCCW_420x420.png in Resources */,
@ -2627,6 +2677,7 @@
AB8F3C691A53AC2600A80BF6 /* ChangeLog in Resources */, AB8F3C691A53AC2600A80BF6 /* ChangeLog in Resources */,
AB8F3C6A1A53AC2600A80BF6 /* COPYING in Resources */, AB8F3C6A1A53AC2600A80BF6 /* COPYING in Resources */,
AB8F3C6B1A53AC2600A80BF6 /* README in Resources */, AB8F3C6B1A53AC2600A80BF6 /* README in Resources */,
ABB0FBD71A9EED350060C55A /* Icon_MicrophoneRed_256x256.png in Resources */,
AB8F3C6C1A53AC2600A80BF6 /* Icon_GuitarGrip_Button_Red_512x512.png in Resources */, AB8F3C6C1A53AC2600A80BF6 /* Icon_GuitarGrip_Button_Red_512x512.png in Resources */,
AB8F3C6D1A53AC2600A80BF6 /* Image_GuitarGrip.png in Resources */, AB8F3C6D1A53AC2600A80BF6 /* Image_GuitarGrip.png in Resources */,
AB8F3C6E1A53AC2600A80BF6 /* Icon_GuitarGrip_Button_Yellow_512x512.png in Resources */, AB8F3C6E1A53AC2600A80BF6 /* Icon_GuitarGrip_Button_Yellow_512x512.png in Resources */,
@ -3326,6 +3377,7 @@
ABB3C6821501C04F00E0C22E /* slot2_piano.cpp in Sources */, ABB3C6821501C04F00E0C22E /* slot2_piano.cpp in Sources */,
ABB3C6831501C04F00E0C22E /* slot2_rumblepak.cpp in Sources */, ABB3C6831501C04F00E0C22E /* slot2_rumblepak.cpp in Sources */,
ABB3C6841501C04F00E0C22E /* 2xsai.cpp in Sources */, ABB3C6841501C04F00E0C22E /* 2xsai.cpp in Sources */,
ABC503B01AAC42C2002FCD43 /* coreaudiosound.cpp in Sources */,
ABB3C6851501C04F00E0C22E /* bilinear.cpp in Sources */, ABB3C6851501C04F00E0C22E /* bilinear.cpp in Sources */,
ABB3C6861501C04F00E0C22E /* epx.cpp in Sources */, ABB3C6861501C04F00E0C22E /* epx.cpp in Sources */,
ABB3C6871501C04F00E0C22E /* hq2x.cpp in Sources */, ABB3C6871501C04F00E0C22E /* hq2x.cpp in Sources */,

View File

@ -45,7 +45,6 @@
AB0F29C014BE7213009ABC6F /* Icon_DSButtonY_420x420.png in Resources */ = {isa = PBXBuildFile; fileRef = AB0F299C14BE7213009ABC6F /* Icon_DSButtonY_420x420.png */; }; AB0F29C014BE7213009ABC6F /* Icon_DSButtonY_420x420.png in Resources */ = {isa = PBXBuildFile; fileRef = AB0F299C14BE7213009ABC6F /* Icon_DSButtonY_420x420.png */; };
AB0F29C114BE7213009ABC6F /* Icon_Emulation_420x420.png in Resources */ = {isa = PBXBuildFile; fileRef = AB0F299D14BE7213009ABC6F /* Icon_Emulation_420x420.png */; }; AB0F29C114BE7213009ABC6F /* Icon_Emulation_420x420.png in Resources */ = {isa = PBXBuildFile; fileRef = AB0F299D14BE7213009ABC6F /* Icon_Emulation_420x420.png */; };
AB0F29C214BE7213009ABC6F /* Icon_Input_420x420.png in Resources */ = {isa = PBXBuildFile; fileRef = AB0F299E14BE7213009ABC6F /* Icon_Input_420x420.png */; }; AB0F29C214BE7213009ABC6F /* Icon_Input_420x420.png in Resources */ = {isa = PBXBuildFile; fileRef = AB0F299E14BE7213009ABC6F /* Icon_Input_420x420.png */; };
AB0F29C314BE7213009ABC6F /* Icon_Microphone_420x420.png in Resources */ = {isa = PBXBuildFile; fileRef = AB0F299F14BE7213009ABC6F /* Icon_Microphone_420x420.png */; };
AB0F29C414BE7213009ABC6F /* Icon_OpenROM_420x420.png in Resources */ = {isa = PBXBuildFile; fileRef = AB0F29A014BE7213009ABC6F /* Icon_OpenROM_420x420.png */; }; AB0F29C414BE7213009ABC6F /* Icon_OpenROM_420x420.png in Resources */ = {isa = PBXBuildFile; fileRef = AB0F29A014BE7213009ABC6F /* Icon_OpenROM_420x420.png */; };
AB0F29C514BE7213009ABC6F /* Icon_Reset_420x420.png in Resources */ = {isa = PBXBuildFile; fileRef = AB0F29A114BE7213009ABC6F /* Icon_Reset_420x420.png */; }; AB0F29C514BE7213009ABC6F /* Icon_Reset_420x420.png in Resources */ = {isa = PBXBuildFile; fileRef = AB0F29A114BE7213009ABC6F /* Icon_Reset_420x420.png */; };
AB0F29C614BE7213009ABC6F /* Icon_RotateCCW_420x420.png in Resources */ = {isa = PBXBuildFile; fileRef = AB0F29A214BE7213009ABC6F /* Icon_RotateCCW_420x420.png */; }; AB0F29C614BE7213009ABC6F /* Icon_RotateCCW_420x420.png in Resources */ = {isa = PBXBuildFile; fileRef = AB0F29A214BE7213009ABC6F /* Icon_RotateCCW_420x420.png */; };
@ -62,6 +61,36 @@
AB142028186E2CD80015D52F /* Image_MemoryExpansionPak.png in Resources */ = {isa = PBXBuildFile; fileRef = AB142025186E2CD80015D52F /* Image_MemoryExpansionPak.png */; }; AB142028186E2CD80015D52F /* Image_MemoryExpansionPak.png in Resources */ = {isa = PBXBuildFile; fileRef = AB142025186E2CD80015D52F /* Image_MemoryExpansionPak.png */; };
AB142029186E2CD80015D52F /* Image_MemoryExpansionPak.png in Resources */ = {isa = PBXBuildFile; fileRef = AB142025186E2CD80015D52F /* Image_MemoryExpansionPak.png */; }; AB142029186E2CD80015D52F /* Image_MemoryExpansionPak.png in Resources */ = {isa = PBXBuildFile; fileRef = AB142025186E2CD80015D52F /* Image_MemoryExpansionPak.png */; };
AB14202A186E2CD80015D52F /* Image_MemoryExpansionPak.png in Resources */ = {isa = PBXBuildFile; fileRef = AB142025186E2CD80015D52F /* Image_MemoryExpansionPak.png */; }; AB14202A186E2CD80015D52F /* Image_MemoryExpansionPak.png in Resources */ = {isa = PBXBuildFile; fileRef = AB142025186E2CD80015D52F /* Image_MemoryExpansionPak.png */; };
AB1CC8001AA509C2008B0A16 /* CoreAudio.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AB1CC7FF1AA509C2008B0A16 /* CoreAudio.framework */; };
AB1CC80A1AA509DF008B0A16 /* CoreAudio.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AB1CC7FF1AA509C2008B0A16 /* CoreAudio.framework */; };
AB1CC80B1AA509E0008B0A16 /* CoreAudio.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AB1CC7FF1AA509C2008B0A16 /* CoreAudio.framework */; };
AB1CC80C1AA509E0008B0A16 /* CoreAudio.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AB1CC7FF1AA509C2008B0A16 /* CoreAudio.framework */; };
AB1CC80D1AA509E1008B0A16 /* CoreAudio.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AB1CC7FF1AA509C2008B0A16 /* CoreAudio.framework */; };
AB1CC81B1AA50C8D008B0A16 /* Icon_MicrophoneBlack_256x256.png in Resources */ = {isa = PBXBuildFile; fileRef = AB1CC8161AA50C8D008B0A16 /* Icon_MicrophoneBlack_256x256.png */; };
AB1CC81C1AA50C8D008B0A16 /* Icon_MicrophoneBlueGlow_256x256.png in Resources */ = {isa = PBXBuildFile; fileRef = AB1CC8171AA50C8D008B0A16 /* Icon_MicrophoneBlueGlow_256x256.png */; };
AB1CC81D1AA50C8D008B0A16 /* Icon_MicrophoneGray_256x256.png in Resources */ = {isa = PBXBuildFile; fileRef = AB1CC8181AA50C8D008B0A16 /* Icon_MicrophoneGray_256x256.png */; };
AB1CC81E1AA50C8D008B0A16 /* Icon_MicrophoneGreen_256x256.png in Resources */ = {isa = PBXBuildFile; fileRef = AB1CC8191AA50C8D008B0A16 /* Icon_MicrophoneGreen_256x256.png */; };
AB1CC81F1AA50C8D008B0A16 /* Icon_MicrophoneRed_256x256.png in Resources */ = {isa = PBXBuildFile; fileRef = AB1CC81A1AA50C8D008B0A16 /* Icon_MicrophoneRed_256x256.png */; };
AB1CC8201AA50C8D008B0A16 /* Icon_MicrophoneBlack_256x256.png in Resources */ = {isa = PBXBuildFile; fileRef = AB1CC8161AA50C8D008B0A16 /* Icon_MicrophoneBlack_256x256.png */; };
AB1CC8211AA50C8D008B0A16 /* Icon_MicrophoneBlueGlow_256x256.png in Resources */ = {isa = PBXBuildFile; fileRef = AB1CC8171AA50C8D008B0A16 /* Icon_MicrophoneBlueGlow_256x256.png */; };
AB1CC8221AA50C8D008B0A16 /* Icon_MicrophoneGray_256x256.png in Resources */ = {isa = PBXBuildFile; fileRef = AB1CC8181AA50C8D008B0A16 /* Icon_MicrophoneGray_256x256.png */; };
AB1CC8231AA50C8D008B0A16 /* Icon_MicrophoneGreen_256x256.png in Resources */ = {isa = PBXBuildFile; fileRef = AB1CC8191AA50C8D008B0A16 /* Icon_MicrophoneGreen_256x256.png */; };
AB1CC8241AA50C8D008B0A16 /* Icon_MicrophoneRed_256x256.png in Resources */ = {isa = PBXBuildFile; fileRef = AB1CC81A1AA50C8D008B0A16 /* Icon_MicrophoneRed_256x256.png */; };
AB1CC8251AA50C8D008B0A16 /* Icon_MicrophoneBlack_256x256.png in Resources */ = {isa = PBXBuildFile; fileRef = AB1CC8161AA50C8D008B0A16 /* Icon_MicrophoneBlack_256x256.png */; };
AB1CC8261AA50C8D008B0A16 /* Icon_MicrophoneBlueGlow_256x256.png in Resources */ = {isa = PBXBuildFile; fileRef = AB1CC8171AA50C8D008B0A16 /* Icon_MicrophoneBlueGlow_256x256.png */; };
AB1CC8271AA50C8D008B0A16 /* Icon_MicrophoneGray_256x256.png in Resources */ = {isa = PBXBuildFile; fileRef = AB1CC8181AA50C8D008B0A16 /* Icon_MicrophoneGray_256x256.png */; };
AB1CC8281AA50C8D008B0A16 /* Icon_MicrophoneGreen_256x256.png in Resources */ = {isa = PBXBuildFile; fileRef = AB1CC8191AA50C8D008B0A16 /* Icon_MicrophoneGreen_256x256.png */; };
AB1CC8291AA50C8D008B0A16 /* Icon_MicrophoneRed_256x256.png in Resources */ = {isa = PBXBuildFile; fileRef = AB1CC81A1AA50C8D008B0A16 /* Icon_MicrophoneRed_256x256.png */; };
AB1CC82A1AA50C8D008B0A16 /* Icon_MicrophoneBlack_256x256.png in Resources */ = {isa = PBXBuildFile; fileRef = AB1CC8161AA50C8D008B0A16 /* Icon_MicrophoneBlack_256x256.png */; };
AB1CC82B1AA50C8D008B0A16 /* Icon_MicrophoneBlueGlow_256x256.png in Resources */ = {isa = PBXBuildFile; fileRef = AB1CC8171AA50C8D008B0A16 /* Icon_MicrophoneBlueGlow_256x256.png */; };
AB1CC82C1AA50C8D008B0A16 /* Icon_MicrophoneGray_256x256.png in Resources */ = {isa = PBXBuildFile; fileRef = AB1CC8181AA50C8D008B0A16 /* Icon_MicrophoneGray_256x256.png */; };
AB1CC82D1AA50C8D008B0A16 /* Icon_MicrophoneGreen_256x256.png in Resources */ = {isa = PBXBuildFile; fileRef = AB1CC8191AA50C8D008B0A16 /* Icon_MicrophoneGreen_256x256.png */; };
AB1CC82E1AA50C8D008B0A16 /* Icon_MicrophoneRed_256x256.png in Resources */ = {isa = PBXBuildFile; fileRef = AB1CC81A1AA50C8D008B0A16 /* Icon_MicrophoneRed_256x256.png */; };
AB1CC82F1AA50C8D008B0A16 /* Icon_MicrophoneBlack_256x256.png in Resources */ = {isa = PBXBuildFile; fileRef = AB1CC8161AA50C8D008B0A16 /* Icon_MicrophoneBlack_256x256.png */; };
AB1CC8301AA50C8D008B0A16 /* Icon_MicrophoneBlueGlow_256x256.png in Resources */ = {isa = PBXBuildFile; fileRef = AB1CC8171AA50C8D008B0A16 /* Icon_MicrophoneBlueGlow_256x256.png */; };
AB1CC8311AA50C8D008B0A16 /* Icon_MicrophoneGray_256x256.png in Resources */ = {isa = PBXBuildFile; fileRef = AB1CC8181AA50C8D008B0A16 /* Icon_MicrophoneGray_256x256.png */; };
AB1CC8321AA50C8D008B0A16 /* Icon_MicrophoneGreen_256x256.png in Resources */ = {isa = PBXBuildFile; fileRef = AB1CC8191AA50C8D008B0A16 /* Icon_MicrophoneGreen_256x256.png */; };
AB1CC8331AA50C8D008B0A16 /* Icon_MicrophoneRed_256x256.png in Resources */ = {isa = PBXBuildFile; fileRef = AB1CC81A1AA50C8D008B0A16 /* Icon_MicrophoneRed_256x256.png */; };
AB213D45170CB141006DDB0F /* InputProfileController.mm in Sources */ = {isa = PBXBuildFile; fileRef = AB213D44170CB141006DDB0F /* InputProfileController.mm */; }; AB213D45170CB141006DDB0F /* InputProfileController.mm in Sources */ = {isa = PBXBuildFile; fileRef = AB213D44170CB141006DDB0F /* InputProfileController.mm */; };
AB213D46170CB141006DDB0F /* InputProfileController.mm in Sources */ = {isa = PBXBuildFile; fileRef = AB213D44170CB141006DDB0F /* InputProfileController.mm */; }; AB213D46170CB141006DDB0F /* InputProfileController.mm in Sources */ = {isa = PBXBuildFile; fileRef = AB213D44170CB141006DDB0F /* InputProfileController.mm */; };
AB213D47170CB141006DDB0F /* InputProfileController.mm in Sources */ = {isa = PBXBuildFile; fileRef = AB213D44170CB141006DDB0F /* InputProfileController.mm */; }; AB213D47170CB141006DDB0F /* InputProfileController.mm in Sources */ = {isa = PBXBuildFile; fileRef = AB213D44170CB141006DDB0F /* InputProfileController.mm */; };
@ -132,7 +161,6 @@
AB2A99DE1725F00F0062C1A1 /* Icon_DSButtonY_420x420.png in Resources */ = {isa = PBXBuildFile; fileRef = AB0F299C14BE7213009ABC6F /* Icon_DSButtonY_420x420.png */; }; AB2A99DE1725F00F0062C1A1 /* Icon_DSButtonY_420x420.png in Resources */ = {isa = PBXBuildFile; fileRef = AB0F299C14BE7213009ABC6F /* Icon_DSButtonY_420x420.png */; };
AB2A99DF1725F00F0062C1A1 /* Icon_Emulation_420x420.png in Resources */ = {isa = PBXBuildFile; fileRef = AB0F299D14BE7213009ABC6F /* Icon_Emulation_420x420.png */; }; AB2A99DF1725F00F0062C1A1 /* Icon_Emulation_420x420.png in Resources */ = {isa = PBXBuildFile; fileRef = AB0F299D14BE7213009ABC6F /* Icon_Emulation_420x420.png */; };
AB2A99E01725F00F0062C1A1 /* Icon_Input_420x420.png in Resources */ = {isa = PBXBuildFile; fileRef = AB0F299E14BE7213009ABC6F /* Icon_Input_420x420.png */; }; AB2A99E01725F00F0062C1A1 /* Icon_Input_420x420.png in Resources */ = {isa = PBXBuildFile; fileRef = AB0F299E14BE7213009ABC6F /* Icon_Input_420x420.png */; };
AB2A99E11725F00F0062C1A1 /* Icon_Microphone_420x420.png in Resources */ = {isa = PBXBuildFile; fileRef = AB0F299F14BE7213009ABC6F /* Icon_Microphone_420x420.png */; };
AB2A99E21725F00F0062C1A1 /* Icon_OpenROM_420x420.png in Resources */ = {isa = PBXBuildFile; fileRef = AB0F29A014BE7213009ABC6F /* Icon_OpenROM_420x420.png */; }; AB2A99E21725F00F0062C1A1 /* Icon_OpenROM_420x420.png in Resources */ = {isa = PBXBuildFile; fileRef = AB0F29A014BE7213009ABC6F /* Icon_OpenROM_420x420.png */; };
AB2A99E31725F00F0062C1A1 /* Icon_Reset_420x420.png in Resources */ = {isa = PBXBuildFile; fileRef = AB0F29A114BE7213009ABC6F /* Icon_Reset_420x420.png */; }; AB2A99E31725F00F0062C1A1 /* Icon_Reset_420x420.png in Resources */ = {isa = PBXBuildFile; fileRef = AB0F29A114BE7213009ABC6F /* Icon_Reset_420x420.png */; };
AB2A99E41725F00F0062C1A1 /* Icon_RotateCCW_420x420.png in Resources */ = {isa = PBXBuildFile; fileRef = AB0F29A214BE7213009ABC6F /* Icon_RotateCCW_420x420.png */; }; AB2A99E41725F00F0062C1A1 /* Icon_RotateCCW_420x420.png in Resources */ = {isa = PBXBuildFile; fileRef = AB0F29A214BE7213009ABC6F /* Icon_RotateCCW_420x420.png */; };
@ -334,7 +362,6 @@
AB2F3BB415CF9C6000858373 /* Icon_DSButtonY_420x420.png in Resources */ = {isa = PBXBuildFile; fileRef = AB0F299C14BE7213009ABC6F /* Icon_DSButtonY_420x420.png */; }; AB2F3BB415CF9C6000858373 /* Icon_DSButtonY_420x420.png in Resources */ = {isa = PBXBuildFile; fileRef = AB0F299C14BE7213009ABC6F /* Icon_DSButtonY_420x420.png */; };
AB2F3BB515CF9C6000858373 /* Icon_Emulation_420x420.png in Resources */ = {isa = PBXBuildFile; fileRef = AB0F299D14BE7213009ABC6F /* Icon_Emulation_420x420.png */; }; AB2F3BB515CF9C6000858373 /* Icon_Emulation_420x420.png in Resources */ = {isa = PBXBuildFile; fileRef = AB0F299D14BE7213009ABC6F /* Icon_Emulation_420x420.png */; };
AB2F3BB615CF9C6000858373 /* Icon_Input_420x420.png in Resources */ = {isa = PBXBuildFile; fileRef = AB0F299E14BE7213009ABC6F /* Icon_Input_420x420.png */; }; AB2F3BB615CF9C6000858373 /* Icon_Input_420x420.png in Resources */ = {isa = PBXBuildFile; fileRef = AB0F299E14BE7213009ABC6F /* Icon_Input_420x420.png */; };
AB2F3BB715CF9C6000858373 /* Icon_Microphone_420x420.png in Resources */ = {isa = PBXBuildFile; fileRef = AB0F299F14BE7213009ABC6F /* Icon_Microphone_420x420.png */; };
AB2F3BB815CF9C6000858373 /* Icon_OpenROM_420x420.png in Resources */ = {isa = PBXBuildFile; fileRef = AB0F29A014BE7213009ABC6F /* Icon_OpenROM_420x420.png */; }; AB2F3BB815CF9C6000858373 /* Icon_OpenROM_420x420.png in Resources */ = {isa = PBXBuildFile; fileRef = AB0F29A014BE7213009ABC6F /* Icon_OpenROM_420x420.png */; };
AB2F3BB915CF9C6000858373 /* Icon_Reset_420x420.png in Resources */ = {isa = PBXBuildFile; fileRef = AB0F29A114BE7213009ABC6F /* Icon_Reset_420x420.png */; }; AB2F3BB915CF9C6000858373 /* Icon_Reset_420x420.png in Resources */ = {isa = PBXBuildFile; fileRef = AB0F29A114BE7213009ABC6F /* Icon_Reset_420x420.png */; };
AB2F3BBA15CF9C6000858373 /* Icon_RotateCCW_420x420.png in Resources */ = {isa = PBXBuildFile; fileRef = AB0F29A214BE7213009ABC6F /* Icon_RotateCCW_420x420.png */; }; AB2F3BBA15CF9C6000858373 /* Icon_RotateCCW_420x420.png in Resources */ = {isa = PBXBuildFile; fileRef = AB0F29A214BE7213009ABC6F /* Icon_RotateCCW_420x420.png */; };
@ -741,7 +768,6 @@
AB73A9A11507C9F500A310C8 /* Icon_DSButtonY_420x420.png in Resources */ = {isa = PBXBuildFile; fileRef = AB0F299C14BE7213009ABC6F /* Icon_DSButtonY_420x420.png */; }; AB73A9A11507C9F500A310C8 /* Icon_DSButtonY_420x420.png in Resources */ = {isa = PBXBuildFile; fileRef = AB0F299C14BE7213009ABC6F /* Icon_DSButtonY_420x420.png */; };
AB73A9A21507C9F500A310C8 /* Icon_Emulation_420x420.png in Resources */ = {isa = PBXBuildFile; fileRef = AB0F299D14BE7213009ABC6F /* Icon_Emulation_420x420.png */; }; AB73A9A21507C9F500A310C8 /* Icon_Emulation_420x420.png in Resources */ = {isa = PBXBuildFile; fileRef = AB0F299D14BE7213009ABC6F /* Icon_Emulation_420x420.png */; };
AB73A9A31507C9F500A310C8 /* Icon_Input_420x420.png in Resources */ = {isa = PBXBuildFile; fileRef = AB0F299E14BE7213009ABC6F /* Icon_Input_420x420.png */; }; AB73A9A31507C9F500A310C8 /* Icon_Input_420x420.png in Resources */ = {isa = PBXBuildFile; fileRef = AB0F299E14BE7213009ABC6F /* Icon_Input_420x420.png */; };
AB73A9A41507C9F500A310C8 /* Icon_Microphone_420x420.png in Resources */ = {isa = PBXBuildFile; fileRef = AB0F299F14BE7213009ABC6F /* Icon_Microphone_420x420.png */; };
AB73A9A51507C9F500A310C8 /* Icon_OpenROM_420x420.png in Resources */ = {isa = PBXBuildFile; fileRef = AB0F29A014BE7213009ABC6F /* Icon_OpenROM_420x420.png */; }; AB73A9A51507C9F500A310C8 /* Icon_OpenROM_420x420.png in Resources */ = {isa = PBXBuildFile; fileRef = AB0F29A014BE7213009ABC6F /* Icon_OpenROM_420x420.png */; };
AB73A9A61507C9F500A310C8 /* Icon_Reset_420x420.png in Resources */ = {isa = PBXBuildFile; fileRef = AB0F29A114BE7213009ABC6F /* Icon_Reset_420x420.png */; }; AB73A9A61507C9F500A310C8 /* Icon_Reset_420x420.png in Resources */ = {isa = PBXBuildFile; fileRef = AB0F29A114BE7213009ABC6F /* Icon_Reset_420x420.png */; };
AB73A9A71507C9F500A310C8 /* Icon_RotateCCW_420x420.png in Resources */ = {isa = PBXBuildFile; fileRef = AB0F29A214BE7213009ABC6F /* Icon_RotateCCW_420x420.png */; }; AB73A9A71507C9F500A310C8 /* Icon_RotateCCW_420x420.png in Resources */ = {isa = PBXBuildFile; fileRef = AB0F29A214BE7213009ABC6F /* Icon_RotateCCW_420x420.png */; };
@ -907,6 +933,11 @@
ABAAFBEB172122B6005DDDBE /* FileMigrationDelegate.mm in Sources */ = {isa = PBXBuildFile; fileRef = ABAAFBE9172122B6005DDDBE /* FileMigrationDelegate.mm */; }; ABAAFBEB172122B6005DDDBE /* FileMigrationDelegate.mm in Sources */ = {isa = PBXBuildFile; fileRef = ABAAFBE9172122B6005DDDBE /* FileMigrationDelegate.mm */; };
ABAAFBEC172122B6005DDDBE /* FileMigrationDelegate.mm in Sources */ = {isa = PBXBuildFile; fileRef = ABAAFBE9172122B6005DDDBE /* FileMigrationDelegate.mm */; }; ABAAFBEC172122B6005DDDBE /* FileMigrationDelegate.mm in Sources */ = {isa = PBXBuildFile; fileRef = ABAAFBE9172122B6005DDDBE /* FileMigrationDelegate.mm */; };
ABAAFBED172122B6005DDDBE /* FileMigrationDelegate.mm in Sources */ = {isa = PBXBuildFile; fileRef = ABAAFBE9172122B6005DDDBE /* FileMigrationDelegate.mm */; }; ABAAFBED172122B6005DDDBE /* FileMigrationDelegate.mm in Sources */ = {isa = PBXBuildFile; fileRef = ABAAFBE9172122B6005DDDBE /* FileMigrationDelegate.mm */; };
ABACB73A1AAC46B20066F429 /* Icon_MicrophoneDarkGreen_256x256.png in Resources */ = {isa = PBXBuildFile; fileRef = ABACB7391AAC46B20066F429 /* Icon_MicrophoneDarkGreen_256x256.png */; };
ABACB73B1AAC46B20066F429 /* Icon_MicrophoneDarkGreen_256x256.png in Resources */ = {isa = PBXBuildFile; fileRef = ABACB7391AAC46B20066F429 /* Icon_MicrophoneDarkGreen_256x256.png */; };
ABACB73C1AAC46B20066F429 /* Icon_MicrophoneDarkGreen_256x256.png in Resources */ = {isa = PBXBuildFile; fileRef = ABACB7391AAC46B20066F429 /* Icon_MicrophoneDarkGreen_256x256.png */; };
ABACB73D1AAC46B20066F429 /* Icon_MicrophoneDarkGreen_256x256.png in Resources */ = {isa = PBXBuildFile; fileRef = ABACB7391AAC46B20066F429 /* Icon_MicrophoneDarkGreen_256x256.png */; };
ABACB73E1AAC46B20066F429 /* Icon_MicrophoneDarkGreen_256x256.png in Resources */ = {isa = PBXBuildFile; fileRef = ABACB7391AAC46B20066F429 /* Icon_MicrophoneDarkGreen_256x256.png */; };
ABAD0F7315ACE7A00000EC47 /* KeyNames.plist in Resources */ = {isa = PBXBuildFile; fileRef = AB02475B13886BF300E9F9AB /* KeyNames.plist */; }; ABAD0F7315ACE7A00000EC47 /* KeyNames.plist in Resources */ = {isa = PBXBuildFile; fileRef = AB02475B13886BF300E9F9AB /* KeyNames.plist */; };
ABAD0F7415ACE7A00000EC47 /* DefaultKeyMappings.plist in Resources */ = {isa = PBXBuildFile; fileRef = ABC719E1138CB25E002827A9 /* DefaultKeyMappings.plist */; }; ABAD0F7415ACE7A00000EC47 /* DefaultKeyMappings.plist in Resources */ = {isa = PBXBuildFile; fileRef = ABC719E1138CB25E002827A9 /* DefaultKeyMappings.plist */; };
ABAD0F7515ACE7A00000EC47 /* DefaultUserPrefs.plist in Resources */ = {isa = PBXBuildFile; fileRef = ABBC0F8C1394B1AA0028B6BD /* DefaultUserPrefs.plist */; }; ABAD0F7515ACE7A00000EC47 /* DefaultUserPrefs.plist in Resources */ = {isa = PBXBuildFile; fileRef = ABBC0F8C1394B1AA0028B6BD /* DefaultUserPrefs.plist */; };
@ -965,7 +996,6 @@
ABAD0FAA15ACE7A00000EC47 /* Icon_DSButtonY_420x420.png in Resources */ = {isa = PBXBuildFile; fileRef = AB0F299C14BE7213009ABC6F /* Icon_DSButtonY_420x420.png */; }; ABAD0FAA15ACE7A00000EC47 /* Icon_DSButtonY_420x420.png in Resources */ = {isa = PBXBuildFile; fileRef = AB0F299C14BE7213009ABC6F /* Icon_DSButtonY_420x420.png */; };
ABAD0FAB15ACE7A00000EC47 /* Icon_Emulation_420x420.png in Resources */ = {isa = PBXBuildFile; fileRef = AB0F299D14BE7213009ABC6F /* Icon_Emulation_420x420.png */; }; ABAD0FAB15ACE7A00000EC47 /* Icon_Emulation_420x420.png in Resources */ = {isa = PBXBuildFile; fileRef = AB0F299D14BE7213009ABC6F /* Icon_Emulation_420x420.png */; };
ABAD0FAC15ACE7A00000EC47 /* Icon_Input_420x420.png in Resources */ = {isa = PBXBuildFile; fileRef = AB0F299E14BE7213009ABC6F /* Icon_Input_420x420.png */; }; ABAD0FAC15ACE7A00000EC47 /* Icon_Input_420x420.png in Resources */ = {isa = PBXBuildFile; fileRef = AB0F299E14BE7213009ABC6F /* Icon_Input_420x420.png */; };
ABAD0FAD15ACE7A00000EC47 /* Icon_Microphone_420x420.png in Resources */ = {isa = PBXBuildFile; fileRef = AB0F299F14BE7213009ABC6F /* Icon_Microphone_420x420.png */; };
ABAD0FAE15ACE7A00000EC47 /* Icon_OpenROM_420x420.png in Resources */ = {isa = PBXBuildFile; fileRef = AB0F29A014BE7213009ABC6F /* Icon_OpenROM_420x420.png */; }; ABAD0FAE15ACE7A00000EC47 /* Icon_OpenROM_420x420.png in Resources */ = {isa = PBXBuildFile; fileRef = AB0F29A014BE7213009ABC6F /* Icon_OpenROM_420x420.png */; };
ABAD0FAF15ACE7A00000EC47 /* Icon_Reset_420x420.png in Resources */ = {isa = PBXBuildFile; fileRef = AB0F29A114BE7213009ABC6F /* Icon_Reset_420x420.png */; }; ABAD0FAF15ACE7A00000EC47 /* Icon_Reset_420x420.png in Resources */ = {isa = PBXBuildFile; fileRef = AB0F29A114BE7213009ABC6F /* Icon_Reset_420x420.png */; };
ABAD0FB015ACE7A00000EC47 /* Icon_RotateCCW_420x420.png in Resources */ = {isa = PBXBuildFile; fileRef = AB0F29A214BE7213009ABC6F /* Icon_RotateCCW_420x420.png */; }; ABAD0FB015ACE7A00000EC47 /* Icon_RotateCCW_420x420.png in Resources */ = {isa = PBXBuildFile; fileRef = AB0F29A214BE7213009ABC6F /* Icon_RotateCCW_420x420.png */; };
@ -1303,7 +1333,6 @@
AB0F299C14BE7213009ABC6F /* Icon_DSButtonY_420x420.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = Icon_DSButtonY_420x420.png; path = images/Icon_DSButtonY_420x420.png; sourceTree = "<group>"; }; AB0F299C14BE7213009ABC6F /* Icon_DSButtonY_420x420.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = Icon_DSButtonY_420x420.png; path = images/Icon_DSButtonY_420x420.png; sourceTree = "<group>"; };
AB0F299D14BE7213009ABC6F /* Icon_Emulation_420x420.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = Icon_Emulation_420x420.png; path = images/Icon_Emulation_420x420.png; sourceTree = "<group>"; }; AB0F299D14BE7213009ABC6F /* Icon_Emulation_420x420.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = Icon_Emulation_420x420.png; path = images/Icon_Emulation_420x420.png; sourceTree = "<group>"; };
AB0F299E14BE7213009ABC6F /* Icon_Input_420x420.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = Icon_Input_420x420.png; path = images/Icon_Input_420x420.png; sourceTree = "<group>"; }; AB0F299E14BE7213009ABC6F /* Icon_Input_420x420.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = Icon_Input_420x420.png; path = images/Icon_Input_420x420.png; sourceTree = "<group>"; };
AB0F299F14BE7213009ABC6F /* Icon_Microphone_420x420.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = Icon_Microphone_420x420.png; path = images/Icon_Microphone_420x420.png; sourceTree = "<group>"; };
AB0F29A014BE7213009ABC6F /* Icon_OpenROM_420x420.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = Icon_OpenROM_420x420.png; path = images/Icon_OpenROM_420x420.png; sourceTree = "<group>"; }; AB0F29A014BE7213009ABC6F /* Icon_OpenROM_420x420.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = Icon_OpenROM_420x420.png; path = images/Icon_OpenROM_420x420.png; sourceTree = "<group>"; };
AB0F29A114BE7213009ABC6F /* Icon_Reset_420x420.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = Icon_Reset_420x420.png; path = images/Icon_Reset_420x420.png; sourceTree = "<group>"; }; AB0F29A114BE7213009ABC6F /* Icon_Reset_420x420.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = Icon_Reset_420x420.png; path = images/Icon_Reset_420x420.png; sourceTree = "<group>"; };
AB0F29A214BE7213009ABC6F /* Icon_RotateCCW_420x420.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = Icon_RotateCCW_420x420.png; path = images/Icon_RotateCCW_420x420.png; sourceTree = "<group>"; }; AB0F29A214BE7213009ABC6F /* Icon_RotateCCW_420x420.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = Icon_RotateCCW_420x420.png; path = images/Icon_RotateCCW_420x420.png; sourceTree = "<group>"; };
@ -1312,6 +1341,12 @@
AB0F29A514BE7213009ABC6F /* Icon_Speaker_420x420.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = Icon_Speaker_420x420.png; path = images/Icon_Speaker_420x420.png; sourceTree = "<group>"; }; AB0F29A514BE7213009ABC6F /* Icon_Speaker_420x420.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = Icon_Speaker_420x420.png; path = images/Icon_Speaker_420x420.png; sourceTree = "<group>"; };
AB126D06182ECB9500EBCF22 /* slot2_passme.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = slot2_passme.cpp; sourceTree = "<group>"; }; AB126D06182ECB9500EBCF22 /* slot2_passme.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = slot2_passme.cpp; sourceTree = "<group>"; };
AB142025186E2CD80015D52F /* Image_MemoryExpansionPak.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = Image_MemoryExpansionPak.png; path = images/Image_MemoryExpansionPak.png; sourceTree = "<group>"; }; AB142025186E2CD80015D52F /* Image_MemoryExpansionPak.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = Image_MemoryExpansionPak.png; path = images/Image_MemoryExpansionPak.png; sourceTree = "<group>"; };
AB1CC7FF1AA509C2008B0A16 /* CoreAudio.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreAudio.framework; path = System/Library/Frameworks/CoreAudio.framework; sourceTree = SDKROOT; };
AB1CC8161AA50C8D008B0A16 /* Icon_MicrophoneBlack_256x256.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = Icon_MicrophoneBlack_256x256.png; path = images/Icon_MicrophoneBlack_256x256.png; sourceTree = "<group>"; };
AB1CC8171AA50C8D008B0A16 /* Icon_MicrophoneBlueGlow_256x256.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = Icon_MicrophoneBlueGlow_256x256.png; path = images/Icon_MicrophoneBlueGlow_256x256.png; sourceTree = "<group>"; };
AB1CC8181AA50C8D008B0A16 /* Icon_MicrophoneGray_256x256.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = Icon_MicrophoneGray_256x256.png; path = images/Icon_MicrophoneGray_256x256.png; sourceTree = "<group>"; };
AB1CC8191AA50C8D008B0A16 /* Icon_MicrophoneGreen_256x256.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = Icon_MicrophoneGreen_256x256.png; path = images/Icon_MicrophoneGreen_256x256.png; sourceTree = "<group>"; };
AB1CC81A1AA50C8D008B0A16 /* Icon_MicrophoneRed_256x256.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = Icon_MicrophoneRed_256x256.png; path = images/Icon_MicrophoneRed_256x256.png; sourceTree = "<group>"; };
AB213D43170CB141006DDB0F /* InputProfileController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = InputProfileController.h; sourceTree = "<group>"; }; AB213D43170CB141006DDB0F /* InputProfileController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = InputProfileController.h; sourceTree = "<group>"; };
AB213D44170CB141006DDB0F /* InputProfileController.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = InputProfileController.mm; sourceTree = "<group>"; }; AB213D44170CB141006DDB0F /* InputProfileController.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = InputProfileController.mm; sourceTree = "<group>"; };
AB213E981710D074006DDB0F /* AudioToolbox.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AudioToolbox.framework; path = System/Library/Frameworks/AudioToolbox.framework; sourceTree = SDKROOT; }; AB213E981710D074006DDB0F /* AudioToolbox.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AudioToolbox.framework; path = System/Library/Frameworks/AudioToolbox.framework; sourceTree = SDKROOT; };
@ -1408,6 +1443,7 @@
ABA93EAF178C7D4200CBF50B /* encrypt.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = encrypt.cpp; path = ../encrypt.cpp; sourceTree = SOURCE_ROOT; }; ABA93EAF178C7D4200CBF50B /* encrypt.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = encrypt.cpp; path = ../encrypt.cpp; sourceTree = SOURCE_ROOT; };
ABAAFBE8172122B6005DDDBE /* FileMigrationDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FileMigrationDelegate.h; sourceTree = "<group>"; }; ABAAFBE8172122B6005DDDBE /* FileMigrationDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FileMigrationDelegate.h; sourceTree = "<group>"; };
ABAAFBE9172122B6005DDDBE /* FileMigrationDelegate.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = FileMigrationDelegate.mm; sourceTree = "<group>"; }; ABAAFBE9172122B6005DDDBE /* FileMigrationDelegate.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = FileMigrationDelegate.mm; sourceTree = "<group>"; };
ABACB7391AAC46B20066F429 /* Icon_MicrophoneDarkGreen_256x256.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = Icon_MicrophoneDarkGreen_256x256.png; path = images/Icon_MicrophoneDarkGreen_256x256.png; sourceTree = "<group>"; };
ABAD104915ACE7A00000EC47 /* DeSmuME (PPC).app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "DeSmuME (PPC).app"; sourceTree = BUILT_PRODUCTS_DIR; }; ABAD104915ACE7A00000EC47 /* DeSmuME (PPC).app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "DeSmuME (PPC).app"; sourceTree = BUILT_PRODUCTS_DIR; };
ABAE2F7918682B6C00C92F4F /* Slot2WindowDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Slot2WindowDelegate.h; sourceTree = "<group>"; }; ABAE2F7918682B6C00C92F4F /* Slot2WindowDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Slot2WindowDelegate.h; sourceTree = "<group>"; };
ABAE2F7A18682B6C00C92F4F /* Slot2WindowDelegate.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = Slot2WindowDelegate.mm; sourceTree = "<group>"; }; ABAE2F7A18682B6C00C92F4F /* Slot2WindowDelegate.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = Slot2WindowDelegate.mm; sourceTree = "<group>"; };
@ -1741,6 +1777,7 @@
AB2A9A721725F00F0062C1A1 /* IOKit.framework in Frameworks */, AB2A9A721725F00F0062C1A1 /* IOKit.framework in Frameworks */,
AB2A9A741725F00F0062C1A1 /* libz.dylib in Frameworks */, AB2A9A741725F00F0062C1A1 /* libz.dylib in Frameworks */,
AB2A9A731725F00F0062C1A1 /* OpenGL.framework in Frameworks */, AB2A9A731725F00F0062C1A1 /* OpenGL.framework in Frameworks */,
AB1CC8001AA509C2008B0A16 /* CoreAudio.framework in Frameworks */,
); );
runOnlyForDeploymentPostprocessing = 0; runOnlyForDeploymentPostprocessing = 0;
}; };
@ -1759,6 +1796,7 @@
AB2F3C3F15CF9C6000858373 /* IOKit.framework in Frameworks */, AB2F3C3F15CF9C6000858373 /* IOKit.framework in Frameworks */,
AB2F3C4115CF9C6000858373 /* libz.dylib in Frameworks */, AB2F3C4115CF9C6000858373 /* libz.dylib in Frameworks */,
AB2F3C4015CF9C6000858373 /* OpenGL.framework in Frameworks */, AB2F3C4015CF9C6000858373 /* OpenGL.framework in Frameworks */,
AB1CC80A1AA509DF008B0A16 /* CoreAudio.framework in Frameworks */,
); );
runOnlyForDeploymentPostprocessing = 0; runOnlyForDeploymentPostprocessing = 0;
}; };
@ -1777,6 +1815,7 @@
AB711F7B1481C35F009011C8 /* IOKit.framework in Frameworks */, AB711F7B1481C35F009011C8 /* IOKit.framework in Frameworks */,
ABC3AFCF14B8D16700D5B13D /* libz.dylib in Frameworks */, ABC3AFCF14B8D16700D5B13D /* libz.dylib in Frameworks */,
AB711F761481C35F009011C8 /* OpenGL.framework in Frameworks */, AB711F761481C35F009011C8 /* OpenGL.framework in Frameworks */,
AB1CC80D1AA509E1008B0A16 /* CoreAudio.framework in Frameworks */,
); );
runOnlyForDeploymentPostprocessing = 0; runOnlyForDeploymentPostprocessing = 0;
}; };
@ -1795,6 +1834,7 @@
AB73AA2D1507C9F500A310C8 /* IOKit.framework in Frameworks */, AB73AA2D1507C9F500A310C8 /* IOKit.framework in Frameworks */,
AB73AA2F1507C9F500A310C8 /* libz.dylib in Frameworks */, AB73AA2F1507C9F500A310C8 /* libz.dylib in Frameworks */,
AB73AA2E1507C9F500A310C8 /* OpenGL.framework in Frameworks */, AB73AA2E1507C9F500A310C8 /* OpenGL.framework in Frameworks */,
AB1CC80C1AA509E0008B0A16 /* CoreAudio.framework in Frameworks */,
); );
runOnlyForDeploymentPostprocessing = 0; runOnlyForDeploymentPostprocessing = 0;
}; };
@ -1813,6 +1853,7 @@
ABAD104315ACE7A00000EC47 /* IOKit.framework in Frameworks */, ABAD104315ACE7A00000EC47 /* IOKit.framework in Frameworks */,
ABAD104515ACE7A00000EC47 /* libz.dylib in Frameworks */, ABAD104515ACE7A00000EC47 /* libz.dylib in Frameworks */,
ABAD104415ACE7A00000EC47 /* OpenGL.framework in Frameworks */, ABAD104415ACE7A00000EC47 /* OpenGL.framework in Frameworks */,
AB1CC80B1AA509E0008B0A16 /* CoreAudio.framework in Frameworks */,
); );
runOnlyForDeploymentPostprocessing = 0; runOnlyForDeploymentPostprocessing = 0;
}; };
@ -1873,6 +1914,7 @@
ABC570D0134431CE00E7B0B1 /* AudioUnit.framework */, ABC570D0134431CE00E7B0B1 /* AudioUnit.framework */,
ABB6AD5C173A3F2B00EC2E8D /* Carbon.framework */, ABB6AD5C173A3F2B00EC2E8D /* Carbon.framework */,
1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */, 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */,
AB1CC7FF1AA509C2008B0A16 /* CoreAudio.framework */,
AB8C6E56186CD07E00E3EC64 /* ForceFeedback.framework */, AB8C6E56186CD07E00E3EC64 /* ForceFeedback.framework */,
29B97325FDCFA39411CA2CEA /* Foundation.framework */, 29B97325FDCFA39411CA2CEA /* Foundation.framework */,
AB350BA41478AC96007165AC /* IOKit.framework */, AB350BA41478AC96007165AC /* IOKit.framework */,
@ -2063,7 +2105,12 @@
ABD59815187D417900069403 /* Icon_GuitarGrip_Button_Red_512x512.png */, ABD59815187D417900069403 /* Icon_GuitarGrip_Button_Red_512x512.png */,
ABD59816187D417900069403 /* Icon_GuitarGrip_Button_Yellow_512x512.png */, ABD59816187D417900069403 /* Icon_GuitarGrip_Button_Yellow_512x512.png */,
AB0F299E14BE7213009ABC6F /* Icon_Input_420x420.png */, AB0F299E14BE7213009ABC6F /* Icon_Input_420x420.png */,
AB0F299F14BE7213009ABC6F /* Icon_Microphone_420x420.png */, AB1CC8161AA50C8D008B0A16 /* Icon_MicrophoneBlack_256x256.png */,
AB1CC8171AA50C8D008B0A16 /* Icon_MicrophoneBlueGlow_256x256.png */,
ABACB7391AAC46B20066F429 /* Icon_MicrophoneDarkGreen_256x256.png */,
AB1CC8181AA50C8D008B0A16 /* Icon_MicrophoneGray_256x256.png */,
AB1CC8191AA50C8D008B0A16 /* Icon_MicrophoneGreen_256x256.png */,
AB1CC81A1AA50C8D008B0A16 /* Icon_MicrophoneRed_256x256.png */,
AB0F29A014BE7213009ABC6F /* Icon_OpenROM_420x420.png */, AB0F29A014BE7213009ABC6F /* Icon_OpenROM_420x420.png */,
ABD59846187D4A6C00069403 /* Icon_PaddleKnob_256x256.png */, ABD59846187D4A6C00069403 /* Icon_PaddleKnob_256x256.png */,
AB0F28FF14BE6E68009ABC6F /* Icon_Pause_420x420.png */, AB0F28FF14BE6E68009ABC6F /* Icon_Pause_420x420.png */,
@ -2684,7 +2731,6 @@
AB2A99DE1725F00F0062C1A1 /* Icon_DSButtonY_420x420.png in Resources */, AB2A99DE1725F00F0062C1A1 /* Icon_DSButtonY_420x420.png in Resources */,
AB2A99DF1725F00F0062C1A1 /* Icon_Emulation_420x420.png in Resources */, AB2A99DF1725F00F0062C1A1 /* Icon_Emulation_420x420.png in Resources */,
AB2A99E01725F00F0062C1A1 /* Icon_Input_420x420.png in Resources */, AB2A99E01725F00F0062C1A1 /* Icon_Input_420x420.png in Resources */,
AB2A99E11725F00F0062C1A1 /* Icon_Microphone_420x420.png in Resources */,
AB2A99E21725F00F0062C1A1 /* Icon_OpenROM_420x420.png in Resources */, AB2A99E21725F00F0062C1A1 /* Icon_OpenROM_420x420.png in Resources */,
AB2A99E31725F00F0062C1A1 /* Icon_Reset_420x420.png in Resources */, AB2A99E31725F00F0062C1A1 /* Icon_Reset_420x420.png in Resources */,
AB2A99E41725F00F0062C1A1 /* Icon_RotateCCW_420x420.png in Resources */, AB2A99E41725F00F0062C1A1 /* Icon_RotateCCW_420x420.png in Resources */,
@ -2714,6 +2760,12 @@
ABBFDFB71898EE4B00A3FFA5 /* Icon_FrameJump_420x420.png in Resources */, ABBFDFB71898EE4B00A3FFA5 /* Icon_FrameJump_420x420.png in Resources */,
AB851D32189B2C9A007363CC /* Icon_AutoholdClear_420x420.png in Resources */, AB851D32189B2C9A007363CC /* Icon_AutoholdClear_420x420.png in Resources */,
AB851D33189B2C9A007363CC /* Icon_AutoholdSet_420x420.png in Resources */, AB851D33189B2C9A007363CC /* Icon_AutoholdSet_420x420.png in Resources */,
AB1CC82F1AA50C8D008B0A16 /* Icon_MicrophoneBlack_256x256.png in Resources */,
AB1CC8301AA50C8D008B0A16 /* Icon_MicrophoneBlueGlow_256x256.png in Resources */,
AB1CC8311AA50C8D008B0A16 /* Icon_MicrophoneGray_256x256.png in Resources */,
AB1CC8321AA50C8D008B0A16 /* Icon_MicrophoneGreen_256x256.png in Resources */,
AB1CC8331AA50C8D008B0A16 /* Icon_MicrophoneRed_256x256.png in Resources */,
ABACB73E1AAC46B20066F429 /* Icon_MicrophoneDarkGreen_256x256.png in Resources */,
); );
runOnlyForDeploymentPostprocessing = 0; runOnlyForDeploymentPostprocessing = 0;
}; };
@ -2779,7 +2831,6 @@
AB2F3BB415CF9C6000858373 /* Icon_DSButtonY_420x420.png in Resources */, AB2F3BB415CF9C6000858373 /* Icon_DSButtonY_420x420.png in Resources */,
AB2F3BB515CF9C6000858373 /* Icon_Emulation_420x420.png in Resources */, AB2F3BB515CF9C6000858373 /* Icon_Emulation_420x420.png in Resources */,
AB2F3BB615CF9C6000858373 /* Icon_Input_420x420.png in Resources */, AB2F3BB615CF9C6000858373 /* Icon_Input_420x420.png in Resources */,
AB2F3BB715CF9C6000858373 /* Icon_Microphone_420x420.png in Resources */,
AB2F3BB815CF9C6000858373 /* Icon_OpenROM_420x420.png in Resources */, AB2F3BB815CF9C6000858373 /* Icon_OpenROM_420x420.png in Resources */,
AB2F3BB915CF9C6000858373 /* Icon_Reset_420x420.png in Resources */, AB2F3BB915CF9C6000858373 /* Icon_Reset_420x420.png in Resources */,
AB2F3BBA15CF9C6000858373 /* Icon_RotateCCW_420x420.png in Resources */, AB2F3BBA15CF9C6000858373 /* Icon_RotateCCW_420x420.png in Resources */,
@ -2809,6 +2860,12 @@
ABBFDFB11898EE4B00A3FFA5 /* Icon_FrameJump_420x420.png in Resources */, ABBFDFB11898EE4B00A3FFA5 /* Icon_FrameJump_420x420.png in Resources */,
AB851D2C189B2C9A007363CC /* Icon_AutoholdClear_420x420.png in Resources */, AB851D2C189B2C9A007363CC /* Icon_AutoholdClear_420x420.png in Resources */,
AB851D2D189B2C9A007363CC /* Icon_AutoholdSet_420x420.png in Resources */, AB851D2D189B2C9A007363CC /* Icon_AutoholdSet_420x420.png in Resources */,
AB1CC81B1AA50C8D008B0A16 /* Icon_MicrophoneBlack_256x256.png in Resources */,
AB1CC81C1AA50C8D008B0A16 /* Icon_MicrophoneBlueGlow_256x256.png in Resources */,
AB1CC81D1AA50C8D008B0A16 /* Icon_MicrophoneGray_256x256.png in Resources */,
AB1CC81E1AA50C8D008B0A16 /* Icon_MicrophoneGreen_256x256.png in Resources */,
AB1CC81F1AA50C8D008B0A16 /* Icon_MicrophoneRed_256x256.png in Resources */,
ABACB73A1AAC46B20066F429 /* Icon_MicrophoneDarkGreen_256x256.png in Resources */,
); );
runOnlyForDeploymentPostprocessing = 0; runOnlyForDeploymentPostprocessing = 0;
}; };
@ -2874,7 +2931,6 @@
AB0F29C014BE7213009ABC6F /* Icon_DSButtonY_420x420.png in Resources */, AB0F29C014BE7213009ABC6F /* Icon_DSButtonY_420x420.png in Resources */,
AB0F29C114BE7213009ABC6F /* Icon_Emulation_420x420.png in Resources */, AB0F29C114BE7213009ABC6F /* Icon_Emulation_420x420.png in Resources */,
AB0F29C214BE7213009ABC6F /* Icon_Input_420x420.png in Resources */, AB0F29C214BE7213009ABC6F /* Icon_Input_420x420.png in Resources */,
AB0F29C314BE7213009ABC6F /* Icon_Microphone_420x420.png in Resources */,
AB0F29C414BE7213009ABC6F /* Icon_OpenROM_420x420.png in Resources */, AB0F29C414BE7213009ABC6F /* Icon_OpenROM_420x420.png in Resources */,
AB0F29C514BE7213009ABC6F /* Icon_Reset_420x420.png in Resources */, AB0F29C514BE7213009ABC6F /* Icon_Reset_420x420.png in Resources */,
AB0F29C614BE7213009ABC6F /* Icon_RotateCCW_420x420.png in Resources */, AB0F29C614BE7213009ABC6F /* Icon_RotateCCW_420x420.png in Resources */,
@ -2904,6 +2960,12 @@
ABBFDFAF1898EE4B00A3FFA5 /* Icon_FrameJump_420x420.png in Resources */, ABBFDFAF1898EE4B00A3FFA5 /* Icon_FrameJump_420x420.png in Resources */,
AB851D2A189B2C9A007363CC /* Icon_AutoholdClear_420x420.png in Resources */, AB851D2A189B2C9A007363CC /* Icon_AutoholdClear_420x420.png in Resources */,
AB851D2B189B2C9A007363CC /* Icon_AutoholdSet_420x420.png in Resources */, AB851D2B189B2C9A007363CC /* Icon_AutoholdSet_420x420.png in Resources */,
AB1CC8201AA50C8D008B0A16 /* Icon_MicrophoneBlack_256x256.png in Resources */,
AB1CC8211AA50C8D008B0A16 /* Icon_MicrophoneBlueGlow_256x256.png in Resources */,
AB1CC8221AA50C8D008B0A16 /* Icon_MicrophoneGray_256x256.png in Resources */,
AB1CC8231AA50C8D008B0A16 /* Icon_MicrophoneGreen_256x256.png in Resources */,
AB1CC8241AA50C8D008B0A16 /* Icon_MicrophoneRed_256x256.png in Resources */,
ABACB73B1AAC46B20066F429 /* Icon_MicrophoneDarkGreen_256x256.png in Resources */,
); );
runOnlyForDeploymentPostprocessing = 0; runOnlyForDeploymentPostprocessing = 0;
}; };
@ -2969,7 +3031,6 @@
AB73A9A11507C9F500A310C8 /* Icon_DSButtonY_420x420.png in Resources */, AB73A9A11507C9F500A310C8 /* Icon_DSButtonY_420x420.png in Resources */,
AB73A9A21507C9F500A310C8 /* Icon_Emulation_420x420.png in Resources */, AB73A9A21507C9F500A310C8 /* Icon_Emulation_420x420.png in Resources */,
AB73A9A31507C9F500A310C8 /* Icon_Input_420x420.png in Resources */, AB73A9A31507C9F500A310C8 /* Icon_Input_420x420.png in Resources */,
AB73A9A41507C9F500A310C8 /* Icon_Microphone_420x420.png in Resources */,
AB73A9A51507C9F500A310C8 /* Icon_OpenROM_420x420.png in Resources */, AB73A9A51507C9F500A310C8 /* Icon_OpenROM_420x420.png in Resources */,
AB73A9A61507C9F500A310C8 /* Icon_Reset_420x420.png in Resources */, AB73A9A61507C9F500A310C8 /* Icon_Reset_420x420.png in Resources */,
AB73A9A71507C9F500A310C8 /* Icon_RotateCCW_420x420.png in Resources */, AB73A9A71507C9F500A310C8 /* Icon_RotateCCW_420x420.png in Resources */,
@ -2999,6 +3060,12 @@
ABBFDFB51898EE4B00A3FFA5 /* Icon_FrameJump_420x420.png in Resources */, ABBFDFB51898EE4B00A3FFA5 /* Icon_FrameJump_420x420.png in Resources */,
AB851D30189B2C9A007363CC /* Icon_AutoholdClear_420x420.png in Resources */, AB851D30189B2C9A007363CC /* Icon_AutoholdClear_420x420.png in Resources */,
AB851D31189B2C9A007363CC /* Icon_AutoholdSet_420x420.png in Resources */, AB851D31189B2C9A007363CC /* Icon_AutoholdSet_420x420.png in Resources */,
AB1CC82A1AA50C8D008B0A16 /* Icon_MicrophoneBlack_256x256.png in Resources */,
AB1CC82B1AA50C8D008B0A16 /* Icon_MicrophoneBlueGlow_256x256.png in Resources */,
AB1CC82C1AA50C8D008B0A16 /* Icon_MicrophoneGray_256x256.png in Resources */,
AB1CC82D1AA50C8D008B0A16 /* Icon_MicrophoneGreen_256x256.png in Resources */,
AB1CC82E1AA50C8D008B0A16 /* Icon_MicrophoneRed_256x256.png in Resources */,
ABACB73D1AAC46B20066F429 /* Icon_MicrophoneDarkGreen_256x256.png in Resources */,
); );
runOnlyForDeploymentPostprocessing = 0; runOnlyForDeploymentPostprocessing = 0;
}; };
@ -3064,7 +3131,6 @@
ABAD0FAA15ACE7A00000EC47 /* Icon_DSButtonY_420x420.png in Resources */, ABAD0FAA15ACE7A00000EC47 /* Icon_DSButtonY_420x420.png in Resources */,
ABAD0FAB15ACE7A00000EC47 /* Icon_Emulation_420x420.png in Resources */, ABAD0FAB15ACE7A00000EC47 /* Icon_Emulation_420x420.png in Resources */,
ABAD0FAC15ACE7A00000EC47 /* Icon_Input_420x420.png in Resources */, ABAD0FAC15ACE7A00000EC47 /* Icon_Input_420x420.png in Resources */,
ABAD0FAD15ACE7A00000EC47 /* Icon_Microphone_420x420.png in Resources */,
ABAD0FAE15ACE7A00000EC47 /* Icon_OpenROM_420x420.png in Resources */, ABAD0FAE15ACE7A00000EC47 /* Icon_OpenROM_420x420.png in Resources */,
ABAD0FAF15ACE7A00000EC47 /* Icon_Reset_420x420.png in Resources */, ABAD0FAF15ACE7A00000EC47 /* Icon_Reset_420x420.png in Resources */,
ABAD0FB015ACE7A00000EC47 /* Icon_RotateCCW_420x420.png in Resources */, ABAD0FB015ACE7A00000EC47 /* Icon_RotateCCW_420x420.png in Resources */,
@ -3094,6 +3160,12 @@
ABBFDFB31898EE4B00A3FFA5 /* Icon_FrameJump_420x420.png in Resources */, ABBFDFB31898EE4B00A3FFA5 /* Icon_FrameJump_420x420.png in Resources */,
AB851D2E189B2C9A007363CC /* Icon_AutoholdClear_420x420.png in Resources */, AB851D2E189B2C9A007363CC /* Icon_AutoholdClear_420x420.png in Resources */,
AB851D2F189B2C9A007363CC /* Icon_AutoholdSet_420x420.png in Resources */, AB851D2F189B2C9A007363CC /* Icon_AutoholdSet_420x420.png in Resources */,
AB1CC8251AA50C8D008B0A16 /* Icon_MicrophoneBlack_256x256.png in Resources */,
AB1CC8261AA50C8D008B0A16 /* Icon_MicrophoneBlueGlow_256x256.png in Resources */,
AB1CC8271AA50C8D008B0A16 /* Icon_MicrophoneGray_256x256.png in Resources */,
AB1CC8281AA50C8D008B0A16 /* Icon_MicrophoneGreen_256x256.png in Resources */,
AB1CC8291AA50C8D008B0A16 /* Icon_MicrophoneRed_256x256.png in Resources */,
ABACB73C1AAC46B20066F429 /* Icon_MicrophoneDarkGreen_256x256.png in Resources */,
); );
runOnlyForDeploymentPostprocessing = 0; runOnlyForDeploymentPostprocessing = 0;
}; };

View File

@ -1,5 +1,5 @@
/* /*
Copyright (C) 2013 DeSmuME team Copyright (C) 2013-2015 DeSmuME team
This file is free software: you can redistribute it and/or modify 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 it under the terms of the GNU General Public License as published by
@ -22,21 +22,42 @@
#include "audiosamplegenerator.h" #include "audiosamplegenerator.h"
#include <math.h> #include <math.h>
#include "cocoa_globals.h"
#define NUM_INTERNAL_NOISE_SAMPLES 32 #define NUM_INTERNAL_NOISE_SAMPLES 32
static const u8 noiseSample[NUM_INTERNAL_NOISE_SAMPLES] = static const uint8_t noiseSample[NUM_INTERNAL_NOISE_SAMPLES] =
{ {
0xFC, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF5, 0xFF, 0xFF, 0xFF, 0xFF, 0x8E, 0xFF, 0xFC, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF5, 0xFF, 0xFF, 0xFF, 0xFF, 0x8E, 0xFF,
0xF4, 0xE1, 0xBF, 0x9A, 0x71, 0x58, 0x5B, 0x5F, 0x62, 0xC2, 0x25, 0x05, 0x01, 0x01, 0x01, 0x01 0xF4, 0xE1, 0xBF, 0x9A, 0x71, 0x58, 0x5B, 0x5F, 0x62, 0xC2, 0x25, 0x05, 0x01, 0x01, 0x01, 0x01
}; };
AudioSampleBlockGenerator::AudioSampleBlockGenerator(const u8 *audioBuffer, const size_t sampleCount) size_t AudioGenerator::generateSampleBlock(size_t sampleCount, uint8_t *outBuffer)
{ {
_buffer = (u8 *)malloc(sampleCount * sizeof(u8)); if (outBuffer == NULL)
{
return 0;
}
for (uint8_t *i = outBuffer; i < outBuffer + sampleCount; i++)
{
*i = this->generateSample();
}
return sampleCount;
}
uint8_t AudioGenerator::generateSample()
{
return MIC_NULL_SAMPLE_VALUE;
}
AudioSampleBlockGenerator::AudioSampleBlockGenerator(const uint8_t *audioBuffer, const size_t sampleCount)
{
_buffer = (uint8_t *)malloc(sampleCount * sizeof(uint8_t));
_sampleCount = sampleCount; _sampleCount = sampleCount;
_samplePosition = 0; _samplePosition = 0;
memcpy(_buffer, audioBuffer, _sampleCount * sizeof(u8)); memcpy(_buffer, audioBuffer, _sampleCount * sizeof(uint8_t));
} }
AudioSampleBlockGenerator::~AudioSampleBlockGenerator() AudioSampleBlockGenerator::~AudioSampleBlockGenerator()
@ -45,22 +66,22 @@ AudioSampleBlockGenerator::~AudioSampleBlockGenerator()
this->_buffer = NULL; this->_buffer = NULL;
} }
u8* AudioSampleBlockGenerator::allocate(const size_t sampleCount) uint8_t* AudioSampleBlockGenerator::allocate(const size_t sampleCount)
{ {
if (this->_buffer != NULL) if (this->_buffer != NULL)
{ {
free(this->_buffer); free(this->_buffer);
} }
this->_buffer = (u8 *)malloc(sampleCount * sizeof(u8)); this->_buffer = (uint8_t *)malloc(sampleCount * sizeof(uint8_t));
this->_sampleCount = sampleCount; this->_sampleCount = sampleCount;
this->_samplePosition = 0; this->_samplePosition = 0;
memset(this->_buffer, MIC_NULL_SAMPLE_VALUE, this->_sampleCount * sizeof(u8)); memset(this->_buffer, MIC_NULL_SAMPLE_VALUE, this->_sampleCount * sizeof(uint8_t));
return this->_buffer; return this->_buffer;
} }
u8 AudioSampleBlockGenerator::generateSample() uint8_t AudioSampleBlockGenerator::generateSample()
{ {
if (this->_samplePosition >= this->_sampleCount) if (this->_samplePosition >= this->_sampleCount)
{ {
@ -70,7 +91,7 @@ u8 AudioSampleBlockGenerator::generateSample()
return this->_buffer[_samplePosition++]; return this->_buffer[_samplePosition++];
} }
u8* AudioSampleBlockGenerator::getBuffer() const uint8_t* AudioSampleBlockGenerator::getBuffer() const
{ {
return this->_buffer; return this->_buffer;
} }
@ -92,29 +113,41 @@ void AudioSampleBlockGenerator::setSamplePosition(size_t thePosition)
InternalNoiseGenerator::InternalNoiseGenerator() InternalNoiseGenerator::InternalNoiseGenerator()
{ {
_buffer = (u8 *)malloc(NUM_INTERNAL_NOISE_SAMPLES * sizeof(u8)); _buffer = (uint8_t *)malloc(NUM_INTERNAL_NOISE_SAMPLES * sizeof(uint8_t));
_sampleCount = NUM_INTERNAL_NOISE_SAMPLES; _sampleCount = NUM_INTERNAL_NOISE_SAMPLES;
_samplePosition = 0; _samplePosition = 0;
memcpy(_buffer, noiseSample, _sampleCount * sizeof(u8)); memcpy(_buffer, noiseSample, _sampleCount * sizeof(uint8_t));
for (size_t i = 0; i < NUM_INTERNAL_NOISE_SAMPLES; i++)
{
_buffer[i] >>= 1;
}
} }
u8 WhiteNoiseGenerator::generateSample() uint8_t WhiteNoiseGenerator::generateSample()
{ {
#ifdef __APPLE__ #ifdef __APPLE__
#ifdef MAC_OS_X_VERSION_10_7 #ifdef MAC_OS_X_VERSION_10_7
if (IsOSXVersionSupported(10, 7, 0)) if (IsOSXVersionSupported(10, 7, 0))
{ {
return (u8)(arc4random_uniform(0x00000080) & 0x7F); return (uint8_t)(arc4random_uniform(0x00000080) & 0x7F);
} }
return (u8)((arc4random() % 0x00000080) & 0x7F); return (uint8_t)((arc4random() % 0x00000080) & 0x7F);
#else #else
return (u8)((arc4random() % 0x00000080) & 0x7F); return (uint8_t)((arc4random() % 0x00000080) & 0x7F);
#endif #endif
#else #else
return (u8)(rand() & 0x7F); return (uint8_t)(rand() & 0x7F);
#endif #endif
} }
SineWaveGenerator::SineWaveGenerator()
{
_frequency = 250.0;
_sampleRate = MIC_SAMPLE_RATE;
_cyclePosition = 0.0;
};
SineWaveGenerator::SineWaveGenerator(const double freq, const double sampleRate) SineWaveGenerator::SineWaveGenerator(const double freq, const double sampleRate)
{ {
_frequency = freq; _frequency = freq;
@ -122,9 +155,9 @@ SineWaveGenerator::SineWaveGenerator(const double freq, const double sampleRate)
_cyclePosition = 0.0; _cyclePosition = 0.0;
} }
u8 SineWaveGenerator::generateSample() uint8_t SineWaveGenerator::generateSample()
{ {
const u8 sampleValue = (u8)(63.0 * sin(2.0 * M_PI * this->_cyclePosition)) + MIC_NULL_SAMPLE_VALUE; const uint8_t sampleValue = (uint8_t)(63.0 * sin(2.0 * M_PI * this->_cyclePosition)) + MIC_NULL_SAMPLE_VALUE;
this->_cyclePosition += (this->_frequency / this->_sampleRate); this->_cyclePosition += (this->_frequency / this->_sampleRate);
return sampleValue; return sampleValue;

View File

@ -1,5 +1,5 @@
/* /*
Copyright (C) 2013 DeSmuME team Copyright (C) 2013-2015 DeSmuME team
This file is free software: you can redistribute it and/or modify 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 it under the terms of the GNU General Public License as published by
@ -18,10 +18,7 @@
#ifndef _AUDIO_SAMPLE_GENERATOR_ #ifndef _AUDIO_SAMPLE_GENERATOR_
#define _AUDIO_SAMPLE_GENERATOR_ #define _AUDIO_SAMPLE_GENERATOR_
#include <stdio.h> #include <stdint.h>
#include "types.h"
#define MIC_NULL_SAMPLE_VALUE 64
class AudioGenerator class AudioGenerator
@ -30,25 +27,8 @@ public:
AudioGenerator() {}; AudioGenerator() {};
virtual ~AudioGenerator() {}; virtual ~AudioGenerator() {};
virtual size_t generateSampleBlock(size_t sampleCount, u8 *outBuffer) virtual size_t generateSampleBlock(size_t sampleCount, uint8_t *outBuffer);
{ virtual uint8_t generateSample();
if (outBuffer == NULL)
{
return 0;
}
for (u8 *i = outBuffer; i < outBuffer + sampleCount; i++)
{
*i = this->generateSample();
}
return sampleCount;
}
virtual u8 generateSample()
{
return MIC_NULL_SAMPLE_VALUE;
}
}; };
class NullGenerator : public AudioGenerator {}; class NullGenerator : public AudioGenerator {};
@ -56,7 +36,7 @@ class NullGenerator : public AudioGenerator {};
class AudioSampleBlockGenerator : public AudioGenerator class AudioSampleBlockGenerator : public AudioGenerator
{ {
protected: protected:
u8 *_buffer; uint8_t *_buffer;
size_t _sampleCount; size_t _sampleCount;
size_t _samplePosition; size_t _samplePosition;
@ -66,16 +46,16 @@ public:
, _sampleCount(0) , _sampleCount(0)
, _samplePosition(0) , _samplePosition(0)
{}; {};
AudioSampleBlockGenerator(const u8 *audioBuffer, const size_t sampleCount); AudioSampleBlockGenerator(const uint8_t *audioBuffer, const size_t sampleCount);
~AudioSampleBlockGenerator(); ~AudioSampleBlockGenerator();
u8* allocate(const size_t sampleCount); uint8_t* allocate(const size_t sampleCount);
u8* getBuffer() const; uint8_t* getBuffer() const;
size_t getSampleCount() const; size_t getSampleCount() const;
size_t getSamplePosition() const; size_t getSamplePosition() const;
void setSamplePosition(size_t thePosition); void setSamplePosition(size_t thePosition);
virtual u8 generateSample(); virtual uint8_t generateSample();
}; };
class InternalNoiseGenerator : public AudioSampleBlockGenerator class InternalNoiseGenerator : public AudioSampleBlockGenerator
@ -87,7 +67,7 @@ public:
class WhiteNoiseGenerator : public AudioGenerator class WhiteNoiseGenerator : public AudioGenerator
{ {
public: public:
virtual u8 generateSample(); virtual uint8_t generateSample();
}; };
class SineWaveGenerator : public AudioGenerator class SineWaveGenerator : public AudioGenerator
@ -98,11 +78,7 @@ protected:
double _cyclePosition; double _cyclePosition;
public: public:
SineWaveGenerator() SineWaveGenerator();
: _frequency(250.0)
, _sampleRate(44100.0)
, _cyclePosition(0.0)
{};
SineWaveGenerator(const double freq, const double sampleRate); SineWaveGenerator(const double freq, const double sampleRate);
double getFrequency() const; double getFrequency() const;
@ -112,7 +88,7 @@ public:
double getCyclePosition() const; double getCyclePosition() const;
void setCyclePosition(double thePosition); void setCyclePosition(double thePosition);
virtual u8 generateSample(); virtual uint8_t generateSample();
}; };
#endif // _AUDIO_SAMPLE_GENERATOR_ #endif // _AUDIO_SAMPLE_GENERATOR_

View File

@ -694,6 +694,8 @@ volatile bool execute = true;
pthread_cond_signal(&threadParam.condThreadExecute); pthread_cond_signal(&threadParam.condThreadExecute);
pthread_mutex_unlock(&threadParam.mutexThreadExecute); pthread_mutex_unlock(&threadParam.mutexThreadExecute);
[[self cdsController] setHardwareMicPause:!(coreState == CORESTATE_EXECUTE)];
} }
- (NSInteger) coreState - (NSInteger) coreState

View File

@ -224,7 +224,8 @@
#define FRAME_SKIP_BIAS 0.1 // May be any real number. This value acts as a vector addition to the frame skip. #define FRAME_SKIP_BIAS 0.1 // May be any real number. This value acts as a vector addition to the frame skip.
#define MAX_FRAME_SKIP (DS_FRAMES_PER_SECOND / 3.0) #define MAX_FRAME_SKIP (DS_FRAMES_PER_SECOND / 3.0)
#define SPU_SAMPLE_RATE (44100.0 * DS_FRAMES_PER_SECOND / 60.0) // Samples per second //#define SPU_SAMPLE_RATE (44100.0 * DS_FRAMES_PER_SECOND / 60.0) // Samples per second
#define SPU_SAMPLE_RATE 44100.0 // Samples per second
#define SPU_SAMPLE_RESOLUTION 16 // Bits per sample; must be a multiple of 8 #define SPU_SAMPLE_RESOLUTION 16 // Bits per sample; must be a multiple of 8
#define SPU_NUMBER_CHANNELS 2 // Number of channels #define SPU_NUMBER_CHANNELS 2 // Number of channels
#define SPU_SAMPLE_SIZE ((SPU_SAMPLE_RESOLUTION / 8) * SPU_NUMBER_CHANNELS) // Bytes per sample, multiplied by the number of channels #define SPU_SAMPLE_SIZE ((SPU_SAMPLE_RESOLUTION / 8) * SPU_NUMBER_CHANNELS) // Bytes per sample, multiplied by the number of channels
@ -242,8 +243,17 @@
#define ROMINFO_GAME_CODE_LENGTH 4 #define ROMINFO_GAME_CODE_LENGTH 4
#define ROMINFO_GAME_BANNER_LENGTH 128 #define ROMINFO_GAME_BANNER_LENGTH 128
#define MIC_SAMPLE_RATE 16000 #define MIC_SAMPLE_RATE 16000.0
#define MIC_MAX_BUFFER_SAMPLES (MIC_SAMPLE_RATE / DS_FRAMES_PER_SECOND) #define MIC_SAMPLE_RESOLUTION 8 // Bits per sample; must be a multiple of 8
#define MIC_NUMBER_CHANNELS 1 // Number of channels
#define MIC_SAMPLE_SIZE ((MIC_SAMPLE_RESOLUTION / 8) * MIC_NUMBER_CHANNELS) // Bytes per sample, multiplied by the number of channels
#define MIC_MAX_BUFFER_SAMPLES ((MIC_SAMPLE_RATE / DS_FRAMES_PER_SECOND) * MIC_SAMPLE_SIZE)
#define MIC_CAPTURE_FRAMES 192 // The number of audio frames that the NDS microphone should pull. The lower this value, the lower the latency. Ensure that this value is not too low, or else audio frames may be lost.
#define MIC_CLIP_FRAME_THRESHOLD 15 // When the number of clipped mic samples exceeds this amount, the UI will reflect that the mic is clipping.
#define MIC_CLIP_FRAME_MAX_COUNT 60 // When counting clipped mic samples, don't count past this number. This is to prevent the mic clip state from persisting too long after the mic has stopped clipping.
#define MIC_NULL_FRAME_THRESHOLD 12 // When the number of null mic samples exceeds this amount, the UI will reflect that the mic is null.
#define MIC_NULL_FRAME_MAX_COUNT 24 // When counting null mic samples, don't count past this number. This is to prevent the mic null state from persisting too long after the mic has read some samples.
#define MIC_NULL_SAMPLE_VALUE 64
#define COCOA_DIALOG_CANCEL 0 #define COCOA_DIALOG_CANCEL 0
#define COCOA_DIALOG_DEFAULT 1 #define COCOA_DIALOG_DEFAULT 1

View File

@ -1,6 +1,6 @@
/* /*
Copyright (C) 2011 Roger Manuel Copyright (C) 2011 Roger Manuel
Copyright (C) 2012-2014 DeSmuME Team Copyright (C) 2012-2015 DeSmuME Team
This file is free software: you can redistribute it and/or modify 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 it under the terms of the GNU General Public License as published by
@ -18,8 +18,11 @@
#import <Cocoa/Cocoa.h> #import <Cocoa/Cocoa.h>
#include <libkern/OSAtomic.h> #include <libkern/OSAtomic.h>
#include "mic_ext.h"
#undef BOOL @class CocoaDSController;
class CoreAudioInput;
class AudioGenerator;
class AudioSampleBlockGenerator;
enum enum
{ {
@ -71,32 +74,72 @@ typedef struct
uint16_t turboPattern; uint16_t turboPattern;
} NDSInput; } NDSInput;
@protocol CocoaDSControllerDelegate <NSObject>
@required
- (uint8_t) doMicSamplesReadFromController:(CocoaDSController *)cdsController inSample:(uint8_t)sampleValue;
@optional
- (void) doMicHardwareGainChangedFromController:(CocoaDSController *)cdsController gain:(float)gainValue;
@end
@interface CocoaDSController : NSObject @interface CocoaDSController : NSObject
{ {
id <CocoaDSControllerDelegate> delegate;
BOOL autohold; BOOL autohold;
BOOL isAutoholdCleared; BOOL isAutoholdCleared;
BOOL _useHardwareMic;
size_t _availableMicSamples;
NSInteger micMode; NSInteger micMode;
NSPoint touchLocation; NSPoint touchLocation;
NDSInput ndsInput[DSControllerState_StatesCount]; NDSInput ndsInput[DSControllerState_StatesCount];
AudioSampleBlockGenerator *selectedAudioFileGenerator; AudioSampleBlockGenerator *selectedAudioFileGenerator;
CoreAudioInput *CAInputDevice;
AudioGenerator *softwareMicSampleGenerator;
NSInteger paddleAdjust; NSInteger paddleAdjust;
OSSpinLock spinlockControllerState; OSSpinLock spinlockControllerState;
} }
@property (retain) id <CocoaDSControllerDelegate> delegate;
@property (assign) BOOL autohold; @property (assign) BOOL autohold;
@property (readonly) BOOL isHardwareMicAvailable;
@property (assign) BOOL hardwareMicEnabled;
@property (readonly) BOOL hardwareMicLocked;
@property (assign) float hardwareMicGain;
@property (assign) BOOL hardwareMicMute;
@property (assign) BOOL hardwareMicPause;
@property (assign) BOOL softwareMicState;
@property (assign) NSInteger softwareMicMode;
@property (assign) NSInteger micMode; @property (assign) NSInteger micMode;
@property (readonly) CoreAudioInput *CAInputDevice;
@property (readonly) AudioGenerator *softwareMicSampleGenerator;
@property (assign) AudioSampleBlockGenerator *selectedAudioFileGenerator; @property (assign) AudioSampleBlockGenerator *selectedAudioFileGenerator;
@property (assign) NSInteger paddleAdjust; @property (assign) NSInteger paddleAdjust;
- (void) setControllerState:(BOOL)theState controlID:(const NSUInteger)controlID; - (void) setControllerState:(BOOL)theState controlID:(const NSUInteger)controlID;
- (void) setControllerState:(BOOL)theState controlID:(const NSUInteger)controlID turbo:(const BOOL)isTurboEnabled; - (void) setControllerState:(BOOL)theState controlID:(const NSUInteger)controlID turbo:(const BOOL)isTurboEnabled;
- (void) setTouchState:(BOOL)theState location:(const NSPoint)theLocation; - (void) setTouchState:(BOOL)theState location:(const NSPoint)theLocation;
- (void) setMicrophoneState:(BOOL)theState inputMode:(const NSInteger)inputMode;
- (void) setSineWaveGeneratorFrequency:(const double)freq; - (void) setSineWaveGeneratorFrequency:(const double)freq;
- (void) clearAutohold; - (void) clearAutohold;
- (void) flush; - (void) flush;
- (void) flushEmpty; - (void) flushEmpty;
- (uint8_t) handleMicSampleRead:(CoreAudioInput *)caInput softwareMic:(AudioGenerator *)sampleGenerator;
- (void) handleMicHardwareGainChanged:(float)gainValue;
@end @end
#ifdef __cplusplus
extern "C"
{
#endif
void CAResetCallback(void *inParam1, void *inParam2);
uint8_t CASampleReadCallback(void *inParam1, void *inParam2);
void CAHardwareGainChangedCallback(float normalizedGain, void *inParam1, void *inParam2);
#ifdef __cplusplus
}
#endif

View File

@ -1,6 +1,6 @@
/* /*
Copyright (C) 2011 Roger Manuel Copyright (C) 2011 Roger Manuel
Copyright (C) 2012-2014 DeSmuME team Copyright (C) 2012-2015 DeSmuME team
This file is free software: you can redistribute it and/or modify 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 it under the terms of the GNU General Public License as published by
@ -19,15 +19,34 @@
#import "cocoa_input.h" #import "cocoa_input.h"
#import "cocoa_globals.h" #import "cocoa_globals.h"
#include "mic_ext.h"
#include "coreaudiosound.h"
#include "audiosamplegenerator.h"
#include "../NDSSystem.h" #include "../NDSSystem.h"
#include "../slot2.h" #include "../slot2.h"
#undef BOOL #undef BOOL
NullGenerator nullSampleGenerator;
InternalNoiseGenerator internalNoiseGenerator;
WhiteNoiseGenerator whiteNoiseGenerator;
SineWaveGenerator sineWaveGenerator(250.0, MIC_SAMPLE_RATE);
@implementation CocoaDSController @implementation CocoaDSController
@synthesize delegate;
@dynamic isHardwareMicAvailable;
@dynamic hardwareMicEnabled;
@dynamic hardwareMicLocked;
@dynamic hardwareMicGain;
@dynamic hardwareMicMute;
@dynamic hardwareMicPause;
@dynamic softwareMicState;
@dynamic softwareMicMode;
@dynamic autohold; @dynamic autohold;
@synthesize micMode; @synthesize micMode;
@synthesize CAInputDevice;
@synthesize softwareMicSampleGenerator;
@synthesize selectedAudioFileGenerator; @synthesize selectedAudioFileGenerator;
@synthesize paddleAdjust; @synthesize paddleAdjust;
@ -47,23 +66,126 @@
ndsInput[i].autohold = false; ndsInput[i].autohold = false;
} }
delegate = nil;
spinlockControllerState = OS_SPINLOCK_INIT; spinlockControllerState = OS_SPINLOCK_INIT;
autohold = NO; autohold = NO;
isAutoholdCleared = YES; isAutoholdCleared = YES;
_useHardwareMic = NO;
_availableMicSamples = 0;
micMode = MICMODE_NONE; micMode = MICMODE_NONE;
selectedAudioFileGenerator = NULL; selectedAudioFileGenerator = NULL;
CAInputDevice = new CoreAudioInput;
CAInputDevice->SetCallbackHardwareGainChanged(&CAHardwareGainChangedCallback, self, NULL);
softwareMicSampleGenerator = &nullSampleGenerator;
touchLocation = NSMakePoint(0.0f, 0.0f); touchLocation = NSMakePoint(0.0f, 0.0f);
paddleAdjust = 0; paddleAdjust = 0;
Mic_SetResetCallback(&CAResetCallback, self, NULL);
Mic_SetSampleReadCallback(&CASampleReadCallback, self, NULL);
return self; return self;
} }
- (void)dealloc - (void)dealloc
{ {
delete CAInputDevice;
[super dealloc]; [super dealloc];
} }
- (BOOL) isHardwareMicAvailable
{
return ( CAInputDevice->IsHardwareEnabled() &&
!CAInputDevice->IsHardwareLocked() &&
!CAInputDevice->GetPauseState() ) ? YES : NO;
}
- (void) setHardwareMicEnabled:(BOOL)micEnabled
{
if (micEnabled)
{
CAInputDevice->Start();
}
else
{
CAInputDevice->Stop();
}
}
- (BOOL) hardwareMicEnabled
{
return (CAInputDevice->IsHardwareEnabled()) ? YES : NO;
}
- (BOOL) hardwareMicLocked
{
return (CAInputDevice->IsHardwareLocked()) ? YES : NO;
}
- (void) setHardwareMicGain:(float)micGain
{
CAInputDevice->SetGain(micGain);
}
- (float) hardwareMicGain
{
return CAInputDevice->GetGain();
}
- (void) setHardwareMicMute:(BOOL)isMicMuted
{
bool muteState = (isMicMuted) ? true : false;
CAInputDevice->SetMuteState(muteState);
}
- (BOOL) hardwareMicMute
{
BOOL isMicMuted = (CAInputDevice->GetMuteState()) ? YES : NO;
return isMicMuted;
}
- (void) setHardwareMicPause:(BOOL)isMicPaused
{
bool pauseState = (isMicPaused) ? true : false;
CAInputDevice->SetMuteState(pauseState);
}
- (BOOL) hardwareMicPause
{
BOOL isMicPaused = (CAInputDevice->GetPauseState()) ? YES : NO;
return isMicPaused;
}
- (void) setSoftwareMicState:(BOOL)theState
{
OSSpinLockLock(&spinlockControllerState);
ndsInput[DSControllerState_Microphone].state = (theState) ? true : false;
OSSpinLockUnlock(&spinlockControllerState);
}
- (BOOL) softwareMicState
{
OSSpinLockLock(&spinlockControllerState);
BOOL theState = (ndsInput[DSControllerState_Microphone].state) ? YES : NO;
OSSpinLockUnlock(&spinlockControllerState);
return theState;
}
- (void) setSoftwareMicMode:(NSInteger)theMode
{
OSSpinLockLock(&spinlockControllerState);
micMode = theMode;
OSSpinLockUnlock(&spinlockControllerState);
}
- (NSInteger) softwareMicMode
{
OSSpinLockLock(&spinlockControllerState);
NSInteger theMode = micMode;
OSSpinLockUnlock(&spinlockControllerState);
return theMode;
}
- (void) setAutohold:(BOOL)theState - (void) setAutohold:(BOOL)theState
{ {
OSSpinLockLock(&spinlockControllerState); OSSpinLockLock(&spinlockControllerState);
@ -136,14 +258,6 @@
OSSpinLockUnlock(&spinlockControllerState); OSSpinLockUnlock(&spinlockControllerState);
} }
- (void) setMicrophoneState:(BOOL)theState inputMode:(const NSInteger)inputMode
{
OSSpinLockLock(&spinlockControllerState);
ndsInput[DSControllerState_Microphone].state = (theState) ? true : false;
micMode = inputMode;
OSSpinLockUnlock(&spinlockControllerState);
}
- (void) setSineWaveGeneratorFrequency:(const double)freq - (void) setSineWaveGeneratorFrequency:(const double)freq
{ {
sineWaveGenerator.setFrequency(freq); sineWaveGenerator.setFrequency(freq);
@ -262,36 +376,37 @@
// Setup the DS mic. // Setup the DS mic.
AudioGenerator *selectedGenerator = &nullSampleGenerator; AudioGenerator *selectedGenerator = &nullSampleGenerator;
switch (theMicMode)
{
case MICMODE_INTERNAL_NOISE:
selectedGenerator = &internalNoiseGenerator;
break;
case MICMODE_WHITE_NOISE:
selectedGenerator = &whiteNoiseGenerator;
break;
case MICMODE_SINE_WAVE:
selectedGenerator = &sineWaveGenerator;
break;
case MICMODE_AUDIO_FILE:
if (selectedAudioFileGenerator != NULL)
{
selectedGenerator = selectedAudioFileGenerator;
}
break;
default:
break;
}
NDS_setMic(isMicPressed); if (isMicPressed)
if (!isMicPressed) {
switch (theMicMode)
{
case MICMODE_INTERNAL_NOISE:
selectedGenerator = &internalNoiseGenerator;
break;
case MICMODE_WHITE_NOISE:
selectedGenerator = &whiteNoiseGenerator;
break;
case MICMODE_SINE_WAVE:
selectedGenerator = &sineWaveGenerator;
break;
case MICMODE_AUDIO_FILE:
if (selectedAudioFileGenerator != NULL)
{
selectedGenerator = selectedAudioFileGenerator;
}
break;
default:
break;
}
}
else
{ {
selectedGenerator = &nullSampleGenerator; selectedGenerator = &nullSampleGenerator;
internalNoiseGenerator.setSamplePosition(0); internalNoiseGenerator.setSamplePosition(0);
sineWaveGenerator.setCyclePosition(0.0); sineWaveGenerator.setCyclePosition(0.0);
@ -301,26 +416,9 @@
} }
} }
static const bool useBufferedSource = false; _useHardwareMic = (isMicPressed) ? NO : YES;
Mic_SetUseBufferedSource(useBufferedSource); softwareMicSampleGenerator = selectedGenerator;
if (useBufferedSource) NDS_setMic(isMicPressed);
{
static u8 generatedSampleBuffer[(size_t)(MIC_MAX_BUFFER_SAMPLES + 0.5)] = {0};
static const size_t requestedSamples = MIC_MAX_BUFFER_SAMPLES;
const size_t availableSamples = micInputBuffer.getAvailableElements();
if (availableSamples < requestedSamples)
{
micInputBuffer.drop(requestedSamples - availableSamples);
}
selectedGenerator->generateSampleBlock(requestedSamples, generatedSampleBuffer);
micInputBuffer.write(generatedSampleBuffer, requestedSamples);
}
else
{
Mic_SetSelectedDirectSampleGenerator(selectedGenerator);
}
} }
- (void) flushEmpty - (void) flushEmpty
@ -380,30 +478,67 @@
} }
// Setup the DS mic. // Setup the DS mic.
AudioGenerator *selectedGenerator = &nullSampleGenerator; _useHardwareMic = NO;
softwareMicSampleGenerator = &nullSampleGenerator;
NDS_setMic(false); NDS_setMic(false);
}
- (uint8_t) handleMicSampleRead:(CoreAudioInput *)caInput softwareMic:(AudioGenerator *)sampleGenerator
{
uint8_t theSample = MIC_NULL_SAMPLE_VALUE;
static const bool useBufferedSource = false; if (_useHardwareMic && (caInput != NULL))
Mic_SetUseBufferedSource(useBufferedSource);
if (useBufferedSource)
{ {
static u8 generatedSampleBuffer[(size_t)(MIC_MAX_BUFFER_SAMPLES + 0.5)] = {0}; if (caInput->GetPauseState())
static const size_t requestedSamples = MIC_MAX_BUFFER_SAMPLES;
const size_t availableSamples = micInputBuffer.getAvailableElements();
if (availableSamples < requestedSamples)
{ {
micInputBuffer.drop(requestedSamples - availableSamples); return theSample;
}
else
{
if (_availableMicSamples == 0)
{
_availableMicSamples = CAInputDevice->Pull();
}
caInput->_samplesConverted->read(&theSample, 1);
theSample >>= 1; // Samples from CoreAudio are 8-bit, so we need to convert the sample to 7-bit
_availableMicSamples--;
} }
selectedGenerator->generateSampleBlock(requestedSamples, generatedSampleBuffer);
micInputBuffer.write(generatedSampleBuffer, requestedSamples);
} }
else else
{ {
Mic_SetSelectedDirectSampleGenerator(selectedGenerator); theSample = sampleGenerator->generateSample();
} }
return [[self delegate] doMicSamplesReadFromController:self inSample:theSample];
}
- (void) handleMicHardwareGainChanged:(float)gainValue
{
if (delegate == nil || ![delegate respondsToSelector:@selector(doMicHardwareGainChangedFromController:gain:)])
{
return;
}
[[self delegate] doMicHardwareGainChangedFromController:self gain:gainValue];
} }
@end @end
void CAResetCallback(void *inParam1, void *inParam2)
{
CocoaDSController *cdsController = (CocoaDSController *)inParam1;
[cdsController CAInputDevice]->Start();
}
uint8_t CASampleReadCallback(void *inParam1, void *inParam2)
{
CocoaDSController *cdsController = (CocoaDSController *)inParam1;
return [cdsController handleMicSampleRead:[cdsController CAInputDevice] softwareMic:[cdsController softwareMicSampleGenerator]];
}
void CAHardwareGainChangedCallback(float normalizedGain, void *inParam1, void *inParam2)
{
CocoaDSController *cdsController = (CocoaDSController *)inParam1;
[cdsController handleMicHardwareGainChanged:normalizedGain];
}

File diff suppressed because it is too large Load Diff

View File

@ -1,5 +1,5 @@
/* /*
Copyright (C) 2012-2013 DeSmuME team Copyright (C) 2012-2015 DeSmuME team
This file is free software: you can redistribute it and/or modify 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 it under the terms of the GNU General Public License as published by
@ -25,6 +25,63 @@
#include "ringbuffer.h" #include "ringbuffer.h"
typedef void (*CoreAudioInputHardwareGainChangedCallback)(float normalizedGain, void *inParam1, void *inParam2);
class CoreAudioInput
{
private:
OSSpinLock *_spinlockAUHAL;
CoreAudioInputHardwareGainChangedCallback _hwGainChangedCallbackFunc;
void *_hwGainChangedCallbackParam1;
void *_hwGainChangedCallbackParam2;
AUGraph _auGraph;
AUNode _auFormatConverterNode;
AUNode _auOutputNode;
AudioUnit _auFormatConverterUnit;
float _inputGainNormalized;
AudioUnitElement _inputElement;
bool _isMuted;
bool _isPaused;
bool _isHardwareEnabled;
bool _isHardwareLocked;
OSStatus InitInputAUHAL(UInt32 deviceID);
public:
AudioUnit _auHALInputDevice;
AudioUnit _auOutputUnit;
AudioTimeStamp _timeStamp;
AudioBufferList *_captureBufferList;
AudioBufferList *_convertBufferList;
UInt32 _captureFrames;
RingBuffer *_samplesCaptured;
RingBuffer *_samplesConverted;
CoreAudioInput();
~CoreAudioInput();
void Start();
void Stop();
size_t Pull();
bool IsHardwareEnabled() const;
bool IsHardwareLocked() const;
bool GetMuteState() const;
void SetMuteState(bool muteState);
bool GetPauseState() const;
void SetPauseState(bool pauseState);
float GetGain() const;
void SetGain(float normalizedGain);
void SetGain_ValueOnly(float normalizedGain);
void UpdateHardwareLock();
void SetCallbackHardwareGainChanged(CoreAudioInputHardwareGainChangedCallback callbackFunc, void *inParam1, void *inParam2);
void RunHardwareGainChangedCallback(float normalizedGain);
};
class CoreAudioOutput class CoreAudioOutput
{ {
private: private:
@ -50,6 +107,38 @@ public:
void setVolume(float vol); void setVolume(float vol);
}; };
OSStatus CoreAudioInputCaptureCallback(void *inRefCon,
AudioUnitRenderActionFlags *ioActionFlags,
const AudioTimeStamp *inTimeStamp,
UInt32 inBusNumber,
UInt32 inNumberFrames,
AudioBufferList *ioData);
OSStatus CoreAudioInputReceiveCallback(void *inRefCon,
AudioUnitRenderActionFlags *ioActionFlags,
const AudioTimeStamp *inTimeStamp,
UInt32 inBusNumber,
UInt32 inNumberFrames,
AudioBufferList *ioData);
OSStatus CoreAudioInputConvertCallback(void *inRefCon,
AudioUnitRenderActionFlags *ioActionFlags,
const AudioTimeStamp *inTimeStamp,
UInt32 inBusNumber,
UInt32 inNumberFrames,
AudioBufferList *ioData);
OSStatus CoreAudioInputDeviceChanged(AudioObjectID inObjectID,
UInt32 inNumberAddresses,
const AudioObjectPropertyAddress inAddresses[],
void *inClientData);
void CoreAudioInputAUHALChanged(void *inRefCon,
AudioUnit inUnit,
AudioUnitPropertyID inID,
AudioUnitScope inScope,
AudioUnitElement inElement);
OSStatus CoreAudioOutputRenderCallback(void *inRefCon, OSStatus CoreAudioOutputRenderCallback(void *inRefCon,
AudioUnitRenderActionFlags *ioActionFlags, AudioUnitRenderActionFlags *ioActionFlags,
const AudioTimeStamp *inTimeStamp, const AudioTimeStamp *inTimeStamp,
@ -57,4 +146,12 @@ OSStatus CoreAudioOutputRenderCallback(void *inRefCon,
UInt32 inNumberFrames, UInt32 inNumberFrames,
AudioBufferList *ioData); AudioBufferList *ioData);
void CoreAudioInputDefaultHardwareGainChangedCallback(float normalizedGain, void *inParam1, void *inParam2);
bool CreateAudioUnitInstance(AudioUnit *au, ComponentDescription *auDescription);
#if defined(MAC_OS_X_VERSION_10_6) && MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_6
bool CreateAudioUnitInstance(AudioUnit *au, AudioComponentDescription *auDescription);
#endif
void DestroyAudioUnitInstance(AudioUnit *au);
#endif #endif

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 19 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 55 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.9 KiB

After

Width:  |  Height:  |  Size: 2.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.9 KiB

After

Width:  |  Height:  |  Size: 2.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.8 KiB

After

Width:  |  Height:  |  Size: 2.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.9 KiB

After

Width:  |  Height:  |  Size: 2.8 KiB

View File

@ -21,74 +21,52 @@
#include "../emufile.h" #include "../emufile.h"
#include "../readwrite.h" #include "../readwrite.h"
RingBuffer micInputBuffer(MIC_MAX_BUFFER_SAMPLES * 2, sizeof(u8));
NullGenerator nullSampleGenerator;
InternalNoiseGenerator internalNoiseGenerator;
WhiteNoiseGenerator whiteNoiseGenerator;
SineWaveGenerator sineWaveGenerator(250.0, MIC_SAMPLE_RATE);
static bool _micUseBufferedSource = true; MicResetCallback _micResetCallback = &Mic_DefaultResetCallback;
static AudioGenerator *_selectedDirectSampleGenerator = NULL; void *_resetCallbackParam1 = NULL;
void *_resetCallbackParam2 = NULL;
MicSampleReadCallback _micSampleReadCallback = &Mic_DefaultSampleReadCallback;
void *_sampleReadCallbackParam1 = NULL;
void *_sampleReadCallbackParam2 = NULL;
BOOL Mic_Init() BOOL Mic_Init()
{ {
// Do nothing.
return TRUE; return TRUE;
} }
void Mic_Reset()
{
micInputBuffer.clear();
}
void Mic_DeInit() void Mic_DeInit()
{ {
// Do nothing.
} }
void Mic_Reset()
{
_micResetCallback(_resetCallbackParam1, _resetCallbackParam2);
}
// The NDS reads audio samples in the following format:
// Format: Unsigned Linear PCM
// Channels: 1 (mono)
// Sample Rate: 16000 Hz
// Sample Resolution: 7-bit
u8 Mic_ReadSample() u8 Mic_ReadSample()
{ {
u8 theSample = MIC_NULL_SAMPLE_VALUE; return _micSampleReadCallback(_sampleReadCallbackParam1, _sampleReadCallbackParam2);
if (_micUseBufferedSource)
{
if (micInputBuffer.isEmpty())
{
return theSample;
}
micInputBuffer.read(&theSample, 1);
}
else
{
if (_selectedDirectSampleGenerator != NULL)
{
theSample = _selectedDirectSampleGenerator->generateSample();
}
}
return theSample;
} }
bool Mic_GetUseBufferedSource() void Mic_SetResetCallback(MicResetCallback callbackFunc, void *inParam1, void *inParam2)
{ {
return _micUseBufferedSource; _micResetCallback = callbackFunc;
_resetCallbackParam1 = inParam1;
_resetCallbackParam2 = inParam2;
} }
void Mic_SetUseBufferedSource(bool theState) void Mic_SetSampleReadCallback(MicSampleReadCallback callbackFunc, void *inParam1, void *inParam2)
{ {
_micUseBufferedSource = theState; _micSampleReadCallback = callbackFunc;
} _sampleReadCallbackParam1 = inParam1;
_sampleReadCallbackParam2 = inParam2;
AudioGenerator* Mic_GetSelectedDirectSampleGenerator()
{
return _selectedDirectSampleGenerator;
}
void Mic_SetSelectedDirectSampleGenerator(AudioGenerator *theGenerator)
{
_selectedDirectSampleGenerator = theGenerator;
} }
void mic_savestate(EMUFILE* os) void mic_savestate(EMUFILE* os)
@ -101,3 +79,13 @@ bool mic_loadstate(EMUFILE* is, int size)
is->fseek(size, SEEK_CUR); is->fseek(size, SEEK_CUR);
return true; return true;
} }
void Mic_DefaultResetCallback(void *inParam1, void *inParam2)
{
// Do nothing.
}
uint8_t Mic_DefaultSampleReadCallback(void *inParam1, void *inParam2)
{
return MIC_NULL_SAMPLE_VALUE;
}

View File

@ -1,6 +1,6 @@
/* /*
Copyright (C) 2011 Roger Manuel Copyright (C) 2011 Roger Manuel
Copyright (C) 2012-2013 DeSmuME team Copyright (C) 2012-2015 DeSmuME team
This file is free software: you can redistribute it and/or modify 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 it under the terms of the GNU General Public License as published by
@ -19,29 +19,15 @@
#ifndef _MIC_EXTENSION_ #ifndef _MIC_EXTENSION_
#define _MIC_EXTENSION_ #define _MIC_EXTENSION_
#include "audiosamplegenerator.h" #include <stdint.h>
#include "ringbuffer.h"
#ifdef __cplusplus
extern "C"
{
#endif
bool Mic_GetUseBufferedSource(); typedef void (*MicResetCallback)(void *inParam1, void *inParam2);
void Mic_SetUseBufferedSource(bool theState); typedef uint8_t (*MicSampleReadCallback)(void *inParam1, void *inParam2);
AudioGenerator* Mic_GetSelectedDirectSampleGenerator();
void Mic_SetSelectedDirectSampleGenerator(AudioGenerator *theGenerator);
extern RingBuffer micInputBuffer; void Mic_SetResetCallback(MicResetCallback callbackFunc, void *inParam1, void *inParam2);
extern NullGenerator nullSampleGenerator; void Mic_SetSampleReadCallback(MicSampleReadCallback callbackFunc, void *inParam1, void *inParam2);
extern InternalNoiseGenerator internalNoiseGenerator; void Mic_DefaultResetCallback(void *inParam1, void *inParam2);
extern WhiteNoiseGenerator whiteNoiseGenerator; uint8_t Mic_DefaultSampleReadCallback(void *inParam1, void *inParam2);
extern SineWaveGenerator sineWaveGenerator;
extern AudioGenerator *selectedGeneratorDirect;
#ifdef __cplusplus
}
#endif
#endif // _MIC_EXTENSION_ #endif // _MIC_EXTENSION_

View File

@ -18,6 +18,7 @@
#import <Cocoa/Cocoa.h> #import <Cocoa/Cocoa.h>
#import <OpenEmuBase/OEGameCore.h> #import <OpenEmuBase/OEGameCore.h>
#import "OENDSSystemResponderClient.h" #import "OENDSSystemResponderClient.h"
#import "../cocoa_input.h"
#include <libkern/OSAtomic.h> #include <libkern/OSAtomic.h>
#include <pthread.h> #include <pthread.h>
@ -27,7 +28,7 @@
@class CocoaDSFirmware; @class CocoaDSFirmware;
@interface NDSGameCore : OEGameCore @interface NDSGameCore : OEGameCore <CocoaDSControllerDelegate>
{ {
NSPoint touchLocation; NSPoint touchLocation;
NSMutableDictionary *addedCheatsDict; NSMutableDictionary *addedCheatsDict;

View File

@ -488,4 +488,13 @@ volatile bool execute = true;
} }
} }
#pragma mark CocoaDSControllerDelegate Protocol
- (uint8_t) doMicSamplesReadFromController:(CocoaDSController *)cdsController inSample:(uint8_t)sampleValue
{
// Do nothing.
// OpenEmu has no UI to reflect changes with the NDS microphone input.
return sampleValue;
}
@end @end

View File

@ -1,5 +1,5 @@
/* /*
Copyright (C) 2013 DeSmuME team Copyright (C) 2013-2015 DeSmuME team
This file is free software: you can redistribute it and/or modify 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 it under the terms of the GNU General Public License as published by
@ -21,17 +21,10 @@
#include <libkern/OSAtomic.h> #include <libkern/OSAtomic.h>
RingBuffer::RingBuffer(const size_t numberElements, const size_t newBufferElementSize) RingBuffer::RingBuffer(const size_t numberElements, const size_t elementSize)
{ {
_elementCapacity = numberElements; _buffer = NULL;
_elementSize = newBufferElementSize; allocate(numberElements, elementSize);
_buffer = (uint8_t *)calloc(numberElements + 2, newBufferElementSize);
_bufferSize = (numberElements + 2) * newBufferElementSize;
_readPosition = 0;
_writePosition = 1;
_elementFillCount = 0;
} }
RingBuffer::~RingBuffer() RingBuffer::~RingBuffer()
@ -40,6 +33,26 @@ RingBuffer::~RingBuffer()
_buffer = NULL; _buffer = NULL;
} }
void RingBuffer::allocate(const size_t numberElements, const size_t elementSize)
{
this->_elementCapacity = numberElements;
this->_elementSize = elementSize;
this->_bufferSize = (this->_elementCapacity + 2) * this->_elementSize;
this->_buffer = (uint8_t *)realloc(this->_buffer, this->_bufferSize);
memset(this->_buffer, 0, this->_bufferSize);
this->_readPosition = 0;
this->_writePosition = 1;
this->_elementFillCount = 0;
}
void RingBuffer::resize(const size_t numberElements, const size_t elementSize)
{
this->drop(this->getUsedElements());
this->allocate(numberElements, elementSize);
}
void RingBuffer::clear() void RingBuffer::clear()
{ {
this->_readPosition = 0; this->_readPosition = 0;
@ -237,6 +250,11 @@ size_t RingBuffer::getAvailableElements() const
return (this->_elementCapacity - this->_elementFillCount); return (this->_elementCapacity - this->_elementFillCount);
} }
size_t RingBuffer::getUsedElements() const
{
return (size_t)this->_elementFillCount;
}
size_t RingBuffer::getElementCapacity() const size_t RingBuffer::getElementCapacity() const
{ {
return this->_elementCapacity; return this->_elementCapacity;

View File

@ -34,15 +34,19 @@ private:
size_t _readPosition; size_t _readPosition;
size_t _writePosition; size_t _writePosition;
void allocate(const size_t numberElements, const size_t elementSize);
public: public:
RingBuffer(const size_t numberElements, const size_t newBufferElementSize); RingBuffer(const size_t numberElements, const size_t elementSize);
~RingBuffer(); ~RingBuffer();
void clear(); void clear();
void resize(const size_t numberElements, const size_t elementSize);
size_t read(void *__restrict__ destBuffer, size_t requestedNumberElements); size_t read(void *__restrict__ destBuffer, size_t requestedNumberElements);
size_t write(const void *__restrict__ srcBuffer, size_t requestedNumberElements); size_t write(const void *__restrict__ srcBuffer, size_t requestedNumberElements);
size_t drop(size_t requestedNumberElements); size_t drop(size_t requestedNumberElements);
size_t getAvailableElements() const; size_t getAvailableElements() const;
size_t getUsedElements() const;
size_t getElementCapacity() const; size_t getElementCapacity() const;
size_t getElementSize() const; size_t getElementSize() const;
bool isEmpty() const; bool isEmpty() const;

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -79,6 +79,12 @@ class OGLVideoOutput;
DisplayView *view; DisplayView *view;
NSView *saveScreenshotPanelAccessoryView; NSView *saveScreenshotPanelAccessoryView;
NSView *outputVolumeControlView;
NSView *microphoneGainControlView;
NSMenuItem *outputVolumeMenuItem;
NSMenuItem *microphoneGainMenuItem;
NSSlider *microphoneGainSlider;
NSButton *microphoneMuteButton;
EmuControllerDelegate *emuControl; EmuControllerDelegate *emuControl;
CocoaDSDisplayVideo *cdsVideoOutput; CocoaDSDisplayVideo *cdsVideoOutput;
@ -112,6 +118,12 @@ class OGLVideoOutput;
@property (readonly) IBOutlet DisplayView *view; @property (readonly) IBOutlet DisplayView *view;
@property (readonly) IBOutlet NSView *saveScreenshotPanelAccessoryView; @property (readonly) IBOutlet NSView *saveScreenshotPanelAccessoryView;
@property (readonly) IBOutlet NSView *outputVolumeControlView;
@property (readonly) IBOutlet NSView *microphoneGainControlView;
@property (readonly) IBOutlet NSMenuItem *outputVolumeMenuItem;
@property (readonly) IBOutlet NSMenuItem *microphoneGainMenuItem;
@property (readonly) IBOutlet NSSlider *microphoneGainSlider;
@property (readonly) IBOutlet NSButton *microphoneMuteButton;
@property (retain) EmuControllerDelegate *emuControl; @property (retain) EmuControllerDelegate *emuControl;
@property (assign) CocoaDSDisplayVideo *cdsVideoOutput; @property (assign) CocoaDSDisplayVideo *cdsVideoOutput;
@ -142,6 +154,7 @@ class OGLVideoOutput;
- (void) exitFullScreen; - (void) exitFullScreen;
- (IBAction) copy:(id)sender; - (IBAction) copy:(id)sender;
- (IBAction) changeHardwareMicGain:(id)sender;
- (IBAction) changeVolume:(id)sender; - (IBAction) changeVolume:(id)sender;
- (IBAction) toggleKeepMinDisplaySizeAtNormal:(id)sender; - (IBAction) toggleKeepMinDisplaySizeAtNormal:(id)sender;
- (IBAction) toggleStatusBar:(id)sender; - (IBAction) toggleStatusBar:(id)sender;

View File

@ -51,6 +51,12 @@
@synthesize masterWindow; @synthesize masterWindow;
@synthesize view; @synthesize view;
@synthesize saveScreenshotPanelAccessoryView; @synthesize saveScreenshotPanelAccessoryView;
@synthesize outputVolumeControlView;
@synthesize microphoneGainControlView;
@synthesize outputVolumeMenuItem;
@synthesize microphoneGainMenuItem;
@synthesize microphoneGainSlider;
@synthesize microphoneMuteButton;
@dynamic normalSize; @dynamic normalSize;
@dynamic displayScale; @dynamic displayScale;
@ -708,6 +714,11 @@ static std::unordered_map<NSScreen *, DisplayWindowController *> _screenMap; //
[CocoaDSUtil messageSendOneWay:[[self cdsVideoOutput] receivePort] msgID:MESSAGE_COPY_TO_PASTEBOARD]; [CocoaDSUtil messageSendOneWay:[[self cdsVideoOutput] receivePort] msgID:MESSAGE_COPY_TO_PASTEBOARD];
} }
- (IBAction) changeHardwareMicGain:(id)sender
{
[emuControl changeHardwareMicGain:sender];
}
- (IBAction) changeVolume:(id)sender - (IBAction) changeVolume:(id)sender
{ {
[emuControl changeVolume:sender]; [emuControl changeVolume:sender];
@ -1085,6 +1096,10 @@ static std::unordered_map<NSScreen *, DisplayWindowController *> _screenMap; //
[[emuControl windowList] addObject:self]; [[emuControl windowList] addObject:self];
[emuControl updateAllWindowTitles]; [emuControl updateAllWindowTitles];
// Set up some custom UI elements.
[microphoneGainMenuItem setView:microphoneGainControlView];
[outputVolumeMenuItem setView:outputVolumeControlView];
// Set up the video output thread. // Set up the video output thread.
cdsVideoOutput = [[CocoaDSDisplayVideo alloc] init]; cdsVideoOutput = [[CocoaDSDisplayVideo alloc] init];
[cdsVideoOutput setDelegate:view]; [cdsVideoOutput setDelegate:view];

View File

@ -17,10 +17,12 @@
#import <Cocoa/Cocoa.h> #import <Cocoa/Cocoa.h>
#include <libkern/OSAtomic.h> #include <libkern/OSAtomic.h>
#import "../cocoa_input.h"
@class InputManager; @class InputManager;
@class CocoaDSRom; @class CocoaDSRom;
@class CocoaDSFirmware; @class CocoaDSFirmware;
@class CocoaDSController;
@class CocoaDSOutput; @class CocoaDSOutput;
@class CocoaDSSpeaker; @class CocoaDSSpeaker;
@class CocoaDSCheatManager; @class CocoaDSCheatManager;
@ -28,7 +30,7 @@
@class DisplayWindowController; @class DisplayWindowController;
class AudioSampleBlockGenerator; class AudioSampleBlockGenerator;
@interface EmuControllerDelegate : NSObject <NSUserInterfaceValidations> @interface EmuControllerDelegate : NSObject <NSUserInterfaceValidations, CocoaDSControllerDelegate>
{ {
InputManager *inputManager; InputManager *inputManager;
@ -60,6 +62,7 @@ class AudioSampleBlockGenerator;
BOOL isRomLoading; BOOL isRomLoading;
NSString *statusText; NSString *statusText;
float currentVolumeValue; float currentVolumeValue;
NSImage *currentMicStatusIcon;
NSImage *currentVolumeIcon; NSImage *currentVolumeIcon;
BOOL isShowingSaveStateDialog; BOOL isShowingSaveStateDialog;
BOOL isShowingFileMigrationDialog; BOOL isShowingFileMigrationDialog;
@ -72,9 +75,20 @@ class AudioSampleBlockGenerator;
NSInteger frameJumpToFrame; NSInteger frameJumpToFrame;
CGFloat lastSetSpeedScalar; CGFloat lastSetSpeedScalar;
uint32_t hwMicNumberIdleFrames;
uint32_t hwMicNumberClippedFrames;
BOOL isSoftwareMicActive;
BOOL isHardwareMicIdle;
BOOL isHardwareMicInClip;
float currentMicGainValue;
BOOL isSoundMuted; BOOL isSoundMuted;
float lastSetVolumeValue; float lastSetVolumeValue;
NSImage *iconMicDisabled;
NSImage *iconMicIdle;
NSImage *iconMicActive;
NSImage *iconMicInClip;
NSImage *iconMicManualOverride;
NSImage *iconVolumeFull; NSImage *iconVolumeFull;
NSImage *iconVolumeTwoThird; NSImage *iconVolumeTwoThird;
NSImage *iconVolumeOneThird; NSImage *iconVolumeOneThird;
@ -127,7 +141,13 @@ class AudioSampleBlockGenerator;
@property (assign) BOOL isWorking; @property (assign) BOOL isWorking;
@property (assign) BOOL isRomLoading; @property (assign) BOOL isRomLoading;
@property (assign) NSString *statusText; @property (assign) NSString *statusText;
@property (assign) BOOL isSoftwareMicActive;
@property (assign) BOOL isHardwareMicMuted;
@property (assign) BOOL isHardwareMicIdle;
@property (assign) BOOL isHardwareMicInClip;
@property (assign) float currentMicGainValue;
@property (assign) float currentVolumeValue; @property (assign) float currentVolumeValue;
@property (retain) NSImage *currentMicStatusIcon;
@property (retain) NSImage *currentVolumeIcon; @property (retain) NSImage *currentVolumeIcon;
@property (assign) BOOL isShowingSaveStateDialog; @property (assign) BOOL isShowingSaveStateDialog;
@property (assign) BOOL isShowingFileMigrationDialog; @property (assign) BOOL isShowingFileMigrationDialog;
@ -184,6 +204,7 @@ class AudioSampleBlockGenerator;
- (IBAction) changeCoreSpeed:(id)sender; - (IBAction) changeCoreSpeed:(id)sender;
- (IBAction) changeCoreEmuFlags:(id)sender; - (IBAction) changeCoreEmuFlags:(id)sender;
- (IBAction) changeFirmwareSettings:(id)sender; - (IBAction) changeFirmwareSettings:(id)sender;
- (IBAction) changeHardwareMicGain:(id)sender;
- (IBAction) changeVolume:(id)sender; - (IBAction) changeVolume:(id)sender;
- (IBAction) changeAudioEngine:(id)sender; - (IBAction) changeAudioEngine:(id)sender;
- (IBAction) changeSpuAdvancedLogic:(id)sender; - (IBAction) changeSpuAdvancedLogic:(id)sender;
@ -239,6 +260,9 @@ class AudioSampleBlockGenerator;
- (void) executeCore; - (void) executeCore;
- (void) pauseCore; - (void) pauseCore;
- (void) restoreCoreState; - (void) restoreCoreState;
- (void) updateMicStatusIcon;
- (BOOL) isMicSampleIdle:(uint8_t)sampleValue;
- (BOOL) isMicSampleCausingClip:(uint8_t)sampleValue;
- (AudioSampleBlockGenerator *) selectedAudioFileGenerator; - (AudioSampleBlockGenerator *) selectedAudioFileGenerator;
- (void) setSelectedAudioFileGenerator:(AudioSampleBlockGenerator *)theGenerator; - (void) setSelectedAudioFileGenerator:(AudioSampleBlockGenerator *)theGenerator;

View File

@ -71,7 +71,13 @@
@synthesize isWorking; @synthesize isWorking;
@synthesize isRomLoading; @synthesize isRomLoading;
@synthesize statusText; @synthesize statusText;
@synthesize isSoftwareMicActive;
@dynamic isHardwareMicMuted;
@synthesize isHardwareMicIdle;
@synthesize isHardwareMicInClip;
@synthesize currentMicGainValue;
@dynamic currentVolumeValue; @dynamic currentVolumeValue;
@synthesize currentMicStatusIcon;
@synthesize currentVolumeIcon; @synthesize currentVolumeIcon;
@synthesize isShowingSaveStateDialog; @synthesize isShowingSaveStateDialog;
@ -121,6 +127,12 @@
frameJumpToFrame = 0; frameJumpToFrame = 0;
lastSetSpeedScalar = 1.0f; lastSetSpeedScalar = 1.0f;
hwMicNumberIdleFrames = 0;
hwMicNumberClippedFrames = 0;
isSoftwareMicActive = NO;
isHardwareMicIdle = YES;
isHardwareMicInClip = NO;
currentMicGainValue = 0.5f;
isSoundMuted = NO; isSoundMuted = NO;
lastSetVolumeValue = MAX_VOLUME; lastSetVolumeValue = MAX_VOLUME;
@ -128,6 +140,12 @@
iconPause = [[NSImage alloc] initWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"Icon_Pause_420x420" ofType:@"png"]]; iconPause = [[NSImage alloc] initWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"Icon_Pause_420x420" ofType:@"png"]];
iconSpeedNormal = [[NSImage alloc] initWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"Icon_Speed1x_420x420" ofType:@"png"]]; iconSpeedNormal = [[NSImage alloc] initWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"Icon_Speed1x_420x420" ofType:@"png"]];
iconSpeedDouble = [[NSImage alloc] initWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"Icon_Speed2x_420x420" ofType:@"png"]]; iconSpeedDouble = [[NSImage alloc] initWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"Icon_Speed2x_420x420" ofType:@"png"]];
iconMicDisabled = [[NSImage alloc] initWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"Icon_MicrophoneBlack_256x256" ofType:@"png"]];
iconMicIdle = [[NSImage alloc] initWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"Icon_MicrophoneDarkGreen_256x256" ofType:@"png"]];
iconMicActive = [[NSImage alloc] initWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"Icon_MicrophoneGreen_256x256" ofType:@"png"]];
iconMicInClip = [[NSImage alloc] initWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"Icon_MicrophoneRed_256x256" ofType:@"png"]];
iconMicManualOverride = [[NSImage alloc] initWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"Icon_MicrophoneGray_256x256" ofType:@"png"]];
iconVolumeFull = [[NSImage alloc] initWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"Icon_VolumeFull_16x16" ofType:@"png"]]; iconVolumeFull = [[NSImage alloc] initWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"Icon_VolumeFull_16x16" ofType:@"png"]];
iconVolumeTwoThird = [[NSImage alloc] initWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"Icon_VolumeTwoThird_16x16" ofType:@"png"]]; iconVolumeTwoThird = [[NSImage alloc] initWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"Icon_VolumeTwoThird_16x16" ofType:@"png"]];
iconVolumeOneThird = [[NSImage alloc] initWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"Icon_VolumeOneThird_16x16" ofType:@"png"]]; iconVolumeOneThird = [[NSImage alloc] initWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"Icon_VolumeOneThird_16x16" ofType:@"png"]];
@ -137,6 +155,7 @@
isRomLoading = NO; isRomLoading = NO;
statusText = NSSTRING_STATUS_READY; statusText = NSSTRING_STATUS_READY;
currentVolumeValue = MAX_VOLUME; currentVolumeValue = MAX_VOLUME;
currentMicStatusIcon = [iconMicDisabled retain];
currentVolumeIcon = [iconVolumeFull retain]; currentVolumeIcon = [iconVolumeFull retain];
[[NSNotificationCenter defaultCenter] addObserver:self [[NSNotificationCenter defaultCenter] addObserver:self
@ -155,6 +174,12 @@
[iconPause release]; [iconPause release];
[iconSpeedNormal release]; [iconSpeedNormal release];
[iconSpeedDouble release]; [iconSpeedDouble release];
[iconMicDisabled release];
[iconMicIdle release];
[iconMicActive release];
[iconMicInClip release];
[iconMicManualOverride release];
[iconVolumeFull release]; [iconVolumeFull release];
[iconVolumeTwoThird release]; [iconVolumeTwoThird release];
[iconVolumeOneThird release]; [iconVolumeOneThird release];
@ -267,6 +292,19 @@
return [cdsCore speedScalar]; return [cdsCore speedScalar];
} }
- (void) setIsHardwareMicMuted:(BOOL)theState
{
CocoaDSCore *cdsCore = (CocoaDSCore *)[cdsCoreController content];
[[cdsCore cdsController] setHardwareMicMute:theState];
[self updateMicStatusIcon];
}
- (BOOL) isHardwareMicMuted
{
CocoaDSCore *cdsCore = (CocoaDSCore *)[cdsCoreController content];
return [[cdsCore cdsController] hardwareMicMute];
}
- (void) setCurrentVolumeValue:(float)vol - (void) setCurrentVolumeValue:(float)vol
{ {
currentVolumeValue = vol; currentVolumeValue = vol;
@ -807,11 +845,16 @@
[[cdsCore cdsFirmware] update]; [[cdsCore cdsFirmware] update];
} }
- (IBAction) changeHardwareMicGain:(id)sender
{
CocoaDSCore *cdsCore = (CocoaDSCore *)[cdsCoreController content];
[[cdsCore cdsController] setHardwareMicGain:[self currentMicGainValue]];
}
- (IBAction) changeVolume:(id)sender - (IBAction) changeVolume:(id)sender
{ {
const float vol = [self currentVolumeValue]; const float vol = [self currentVolumeValue];
[self setCurrentVolumeValue:vol]; [self setCurrentVolumeValue:vol];
[self setStatusText:[NSString stringWithFormat:NSSTRING_STATUS_VOLUME, vol]];
[CocoaDSUtil messageSendOneWayWithFloat:[cdsSpeaker receivePort] msgID:MESSAGE_SET_VOLUME floatValue:vol]; [CocoaDSUtil messageSendOneWayWithFloat:[cdsSpeaker receivePort] msgID:MESSAGE_SET_VOLUME floatValue:vol];
} }
@ -1008,15 +1051,18 @@
const BOOL theState = (cmdAttr.input.state == INPUT_ATTRIBUTE_STATE_ON) ? YES : NO; const BOOL theState = (cmdAttr.input.state == INPUT_ATTRIBUTE_STATE_ON) ? YES : NO;
CocoaDSCore *cdsCore = (CocoaDSCore *)[cdsCoreController content]; CocoaDSCore *cdsCore = (CocoaDSCore *)[cdsCoreController content];
CocoaDSController *cdsController = [cdsCore cdsController];
const NSInteger micMode = cmdAttr.intValue[1]; const NSInteger micMode = cmdAttr.intValue[1];
[[cdsCore cdsController] setMicrophoneState:theState inputMode:micMode]; [cdsController setSoftwareMicState:theState];
[cdsController setSoftwareMicMode:micMode];
//[self updateMicStatusIcon];
const float sineWaveFrequency = cmdAttr.floatValue[0]; const float sineWaveFrequency = cmdAttr.floatValue[0];
[[cdsCore cdsController] setSineWaveGeneratorFrequency:sineWaveFrequency]; [cdsController setSineWaveGeneratorFrequency:sineWaveFrequency];
NSString *audioFilePath = cmdAttr.object[0]; NSString *audioFilePath = cmdAttr.object[0];
[[cdsCore cdsController] setSelectedAudioFileGenerator:[inputManager audioFileGeneratorFromFilePath:audioFilePath]]; [cdsController setSelectedAudioFileGenerator:[inputManager audioFileGeneratorFromFilePath:audioFilePath]];
} }
- (void) cmdUpdateDSPaddle:(NSValue *)cmdAttrValue - (void) cmdUpdateDSPaddle:(NSValue *)cmdAttrValue
@ -1865,18 +1911,93 @@
{ {
CocoaDSCore *cdsCore = (CocoaDSCore *)[cdsCoreController content]; CocoaDSCore *cdsCore = (CocoaDSCore *)[cdsCoreController content];
[cdsCore setCoreState:CORESTATE_EXECUTE]; [cdsCore setCoreState:CORESTATE_EXECUTE];
[self updateMicStatusIcon];
} }
- (void) pauseCore - (void) pauseCore
{ {
CocoaDSCore *cdsCore = (CocoaDSCore *)[cdsCoreController content]; CocoaDSCore *cdsCore = (CocoaDSCore *)[cdsCoreController content];
[cdsCore setCoreState:CORESTATE_PAUSE]; [cdsCore setCoreState:CORESTATE_PAUSE];
[self updateMicStatusIcon];
} }
- (void) restoreCoreState - (void) restoreCoreState
{ {
CocoaDSCore *cdsCore = (CocoaDSCore *)[cdsCoreController content]; CocoaDSCore *cdsCore = (CocoaDSCore *)[cdsCoreController content];
[cdsCore restoreCoreState]; [cdsCore restoreCoreState];
[self updateMicStatusIcon];
}
- (void) updateMicStatusIcon
{
NSImage *micIcon = iconMicDisabled;
CocoaDSCore *cdsCore = (CocoaDSCore *)[cdsCoreController content];
CocoaDSController *cdsController = [cdsCore cdsController];
if ([self isSoftwareMicActive])
{
micIcon = iconMicManualOverride;
}
else
{
if ([cdsController isHardwareMicAvailable])
{
if ([self isHardwareMicInClip])
{
micIcon = iconMicInClip;
}
else if ([self isHardwareMicIdle])
{
micIcon = iconMicIdle;
}
else
{
micIcon = iconMicActive;
}
}
}
[self performSelectorOnMainThread:@selector(setCurrentMicStatusIcon:) withObject:micIcon waitUntilDone:NO];
}
- (BOOL) isMicSampleIdle:(uint8_t)sampleValue
{
if (sampleValue == MIC_NULL_SAMPLE_VALUE)
{
if (hwMicNumberIdleFrames < MIC_NULL_FRAME_MAX_COUNT)
{
hwMicNumberIdleFrames++;
}
}
else
{
if (hwMicNumberIdleFrames > 0)
{
hwMicNumberIdleFrames--;
}
}
return (hwMicNumberIdleFrames >= MIC_NULL_FRAME_THRESHOLD);
}
- (BOOL) isMicSampleCausingClip:(uint8_t)sampleValue
{
if (sampleValue == 0 || sampleValue == 127)
{
if (hwMicNumberClippedFrames < MIC_CLIP_FRAME_MAX_COUNT)
{
hwMicNumberClippedFrames++;
}
}
else
{
if (hwMicNumberClippedFrames > 0)
{
hwMicNumberClippedFrames--;
}
}
return (hwMicNumberClippedFrames >= MIC_CLIP_FRAME_THRESHOLD);
} }
- (AudioSampleBlockGenerator *) selectedAudioFileGenerator - (AudioSampleBlockGenerator *) selectedAudioFileGenerator
@ -2353,4 +2474,56 @@
[[cdsCore cdsGPU] setRender3DDepthComparisonThreshold:[(NSNumber *)[aNotification object] integerValue]]; [[cdsCore cdsGPU] setRender3DDepthComparisonThreshold:[(NSNumber *)[aNotification object] integerValue]];
} }
#pragma mark CocoaDSControllerDelegate Protocol
- (uint8_t) doMicSamplesReadFromController:(CocoaDSController *)cdsController inSample:(uint8_t)sampleValue
{
BOOL needsUpdate = NO;
const BOOL controllerSoftwareMicState = [cdsController softwareMicState];
const BOOL isEmuSoftwareMicActive = [self isSoftwareMicActive];
// Check if the software mic state transitioned.
if (( controllerSoftwareMicState && !isEmuSoftwareMicActive) ||
(!controllerSoftwareMicState && isEmuSoftwareMicActive))
{
[self setIsSoftwareMicActive:controllerSoftwareMicState];
needsUpdate = YES;
}
// If we're reading the hardware mic, then check the sample value and make
// sure to check the mic's level state.
if (!controllerSoftwareMicState)
{
const BOOL isSampleIdle = [self isMicSampleIdle:sampleValue];
const BOOL isIdle = [self isHardwareMicIdle];
if (( isSampleIdle && !isIdle) ||
(!isSampleIdle && isIdle))
{
[self setIsHardwareMicIdle:isSampleIdle];
needsUpdate = YES;
}
const BOOL isCausingClip = [self isMicSampleCausingClip:sampleValue];
const BOOL isInClip = [self isHardwareMicInClip];
if (( isCausingClip && !isInClip) ||
(!isCausingClip && isInClip))
{
[self setIsHardwareMicInClip:isCausingClip];
needsUpdate = YES;
}
}
if (needsUpdate)
{
[self updateMicStatusIcon];
}
return sampleValue;
}
- (void) doMicHardwareGainChangedFromController:(CocoaDSController *)cdsController gain:(float)gainValue
{
[self setCurrentMicGainValue:gainValue];
}
@end @end

View File

@ -30,8 +30,7 @@
#include <string> #include <string>
#include <vector> #include <vector>
#include "mic_ext.h" #include "../audiosamplegenerator.h"
#undef BOOL
#define INPUT_HANDLER_STRING_LENGTH 256 #define INPUT_HANDLER_STRING_LENGTH 256

View File

@ -1027,7 +1027,7 @@ static std::unordered_map<unsigned short, std::string> keyboardNameTable; // Key
[[[NSImage alloc] initWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"Icon_DSButtonR_420x420" ofType:@"png"]] autorelease], @"R", [[[NSImage alloc] initWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"Icon_DSButtonR_420x420" ofType:@"png"]] autorelease], @"R",
[[[NSImage alloc] initWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"Icon_DSButtonStart_420x420" ofType:@"png"]] autorelease], @"Start", [[[NSImage alloc] initWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"Icon_DSButtonStart_420x420" ofType:@"png"]] autorelease], @"Start",
[[[NSImage alloc] initWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"Icon_DSButtonSelect_420x420" ofType:@"png"]] autorelease], @"Select", [[[NSImage alloc] initWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"Icon_DSButtonSelect_420x420" ofType:@"png"]] autorelease], @"Select",
[[[NSImage alloc] initWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"Icon_Microphone_420x420" ofType:@"png"]] autorelease], @"Microphone", [[[NSImage alloc] initWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"Icon_MicrophoneBlueGlow_256x256" ofType:@"png"]] autorelease], @"Microphone",
[[[NSImage alloc] initWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"Icon_GuitarGrip_Button_Green_512x512" ofType:@"png"]] autorelease], @"Guitar Grip: Green", [[[NSImage alloc] initWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"Icon_GuitarGrip_Button_Green_512x512" ofType:@"png"]] autorelease], @"Guitar Grip: Green",
[[[NSImage alloc] initWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"Icon_GuitarGrip_Button_Red_512x512" ofType:@"png"]] autorelease], @"Guitar Grip: Red", [[[NSImage alloc] initWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"Icon_GuitarGrip_Button_Red_512x512" ofType:@"png"]] autorelease], @"Guitar Grip: Red",
[[[NSImage alloc] initWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"Icon_GuitarGrip_Button_Yellow_512x512" ofType:@"png"]] autorelease], @"Guitar Grip: Yellow", [[[NSImage alloc] initWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"Icon_GuitarGrip_Button_Yellow_512x512" ofType:@"png"]] autorelease], @"Guitar Grip: Yellow",
@ -1851,11 +1851,11 @@ static std::unordered_map<unsigned short, std::string> keyboardNameTable; // Key
outputFormat.mSampleRate = MIC_SAMPLE_RATE; outputFormat.mSampleRate = MIC_SAMPLE_RATE;
outputFormat.mFormatID = kAudioFormatLinearPCM; outputFormat.mFormatID = kAudioFormatLinearPCM;
outputFormat.mFormatFlags = kAudioFormatFlagIsPacked; outputFormat.mFormatFlags = kAudioFormatFlagIsPacked;
outputFormat.mBytesPerPacket = 1; outputFormat.mBytesPerPacket = MIC_SAMPLE_SIZE;
outputFormat.mFramesPerPacket = 1; outputFormat.mFramesPerPacket = 1;
outputFormat.mBytesPerFrame = 1; outputFormat.mBytesPerFrame = MIC_SAMPLE_SIZE;
outputFormat.mChannelsPerFrame = 1; outputFormat.mChannelsPerFrame = MIC_NUMBER_CHANNELS;
outputFormat.mBitsPerChannel = 8; outputFormat.mBitsPerChannel = MIC_SAMPLE_RESOLUTION;
error = ExtAudioFileSetProperty(audioFile, kExtAudioFileProperty_ClientDataFormat, sizeof(outputFormat), &outputFormat); error = ExtAudioFileSetProperty(audioFile, kExtAudioFileProperty_ClientDataFormat, sizeof(outputFormat), &outputFormat);
if (error != noErr) if (error != noErr)
@ -1886,7 +1886,7 @@ static std::unordered_map<unsigned short, std::string> keyboardNameTable; // Key
AudioSampleBlockGenerator &theGenerator = audioFileGenerators[filePathStr]; AudioSampleBlockGenerator &theGenerator = audioFileGenerators[filePathStr];
const size_t readSize = 32 * 1024; const size_t readSize = 32 * 1024;
const size_t bufferSize = (size_t)((double)(outputFormat.mSampleRate / inputFormat.mSampleRate) * (double)fileLengthFrames) + readSize; const size_t bufferSize = (size_t)((double)(outputFormat.mSampleRate / inputFormat.mSampleRate) * (double)fileLengthFrames) + readSize;
u8 *buffer = theGenerator.allocate(bufferSize); uint8_t *buffer = theGenerator.allocate(bufferSize);
// Read the audio file and fill the generator's buffer. // Read the audio file and fill the generator's buffer.
AudioBufferList convertedData; AudioBufferList convertedData;

View File

@ -113,7 +113,7 @@
{ {
NSFont *newFont = [[NSFontManager sharedFontManager] fontWithFamily:[[outCell font] familyName] NSFont *newFont = [[NSFontManager sharedFontManager] fontWithFamily:[[outCell font] familyName]
traits:([item isKindOfClass:[NSArray class]]) ? NSBoldFontMask : 0 traits:([item isKindOfClass:[NSArray class]]) ? NSBoldFontMask : 0
weight:0 weight:5
size:[[outCell font] pointSize]]; size:[[outCell font] pointSize]];
[outCell setFont:newFont]; [outCell setFont:newFont];
} }
@ -121,7 +121,7 @@
{ {
NSFont *newFont = [[NSFontManager sharedFontManager] fontWithFamily:[[outCell font] familyName] NSFont *newFont = [[NSFontManager sharedFontManager] fontWithFamily:[[outCell font] familyName]
traits:([item isKindOfClass:[NSArray class]]) ? NSBoldFontMask : 0 traits:([item isKindOfClass:[NSArray class]]) ? NSBoldFontMask : 0
weight:0 weight:5
size:[[outCell font] pointSize]]; size:[[outCell font] pointSize]];
[outCell setFont:newFont]; [outCell setFont:newFont];
} }

View File

@ -181,6 +181,7 @@
// Init the DS controller. // Init the DS controller.
CocoaDSController *newController = [[[CocoaDSController alloc] init] autorelease]; CocoaDSController *newController = [[[CocoaDSController alloc] init] autorelease];
[newController setDelegate:emuControl];
[newCore setCdsController:newController]; [newCore setCdsController:newController];
// Init the DS speakers. // Init the DS speakers.