diff --git a/desmume/src/frontend/cocoa/ClientInputHandler.cpp b/desmume/src/frontend/cocoa/ClientInputHandler.cpp index b587a3f24..a47c6b278 100644 --- a/desmume/src/frontend/cocoa/ClientInputHandler.cpp +++ b/desmume/src/frontend/cocoa/ClientInputHandler.cpp @@ -76,7 +76,8 @@ ClientInputHandler::ClientInputHandler() _selectedAudioFileGenerator = NULL; // Note that this value can be NULL. _hardwareMicSampleGenerator = _nullSampleGenerator; - _avgMicLevel = 0.0f; + _avgMicLevelPending = 0.0f; + _avgMicLevelApplied = 0.0f; _avgMicLevelTotal = 0.0f; _avgMicLevelsRead = 0.0f; _isHardwareMicMuted = true; @@ -268,31 +269,36 @@ void ClientInputHandler::SetSineWaveFrequency(double freq) float ClientInputHandler::GetAverageMicLevel() { - return this->_avgMicLevel; + return this->_avgMicLevelApplied; } void ClientInputHandler::AddSampleToAverageMicLevel(uint8_t sampleValue) { this->_avgMicLevelTotal += (float)( (MIC_NULL_SAMPLE_VALUE > sampleValue) ? MIC_NULL_SAMPLE_VALUE - sampleValue : sampleValue - MIC_NULL_SAMPLE_VALUE ); this->_avgMicLevelsRead += 1.0f; - this->_avgMicLevel = this->_avgMicLevelTotal / this->_avgMicLevelsRead; + this->_avgMicLevelPending = this->_avgMicLevelTotal / this->_avgMicLevelsRead; } void ClientInputHandler::ClearAverageMicLevel() { this->_avgMicLevelTotal = 0.0f; this->_avgMicLevelsRead = 0.0f; - this->_avgMicLevel = 0.0f; + this->_avgMicLevelPending = 0.0f; +} + +void ClientInputHandler::ApplyAverageMicLevel() +{ + this->_avgMicLevelApplied = this->_avgMicLevelPending; } bool ClientInputHandler::IsMicrophoneIdle() { - return (this->_avgMicLevel < MIC_NULL_LEVEL_THRESHOLD); + return (this->_avgMicLevelApplied < MIC_NULL_LEVEL_THRESHOLD); } bool ClientInputHandler::IsMicrophoneClipping() { - return (this->_avgMicLevel >= MIC_CLIP_LEVEL_THRESHOLD); + return (this->_avgMicLevelApplied >= MIC_CLIP_LEVEL_THRESHOLD); } AudioGenerator* ClientInputHandler::GetClientSoftwareMicSampleGenerator() @@ -694,9 +700,13 @@ uint8_t ClientInputHandler::HandleMicSampleRead() void ClientInputHandler::ReportAverageMicLevel() { - // Do nothing. This is implementation-dependent. - // This method mainly exists for implementations to do some stuff during the - // emulation loop. + // This method is called regularly during the emulation loop so that + // implementations can report the microphone level. Implementations + // should either override this method and retain the call to + // ApplyAverageMicLevel(), or call GetAverageMicLevel() after this + // method finishes. + + this->ApplyAverageMicLevel(); } bool ClientInputHandler::GetHardwareMicMute() diff --git a/desmume/src/frontend/cocoa/ClientInputHandler.h b/desmume/src/frontend/cocoa/ClientInputHandler.h index 581eaa650..f4078dc5f 100644 --- a/desmume/src/frontend/cocoa/ClientInputHandler.h +++ b/desmume/src/frontend/cocoa/ClientInputHandler.h @@ -378,7 +378,8 @@ protected: int16_t _paddleValueApplied; int16_t _paddleAdjustApplied; - float _avgMicLevel; + float _avgMicLevelPending; + float _avgMicLevelApplied; float _avgMicLevelTotal; float _avgMicLevelsRead; bool _isHardwareMicMuted; @@ -407,6 +408,7 @@ public: float GetAverageMicLevel(); void AddSampleToAverageMicLevel(uint8_t sampleValue); void ClearAverageMicLevel(); + void ApplyAverageMicLevel(); bool IsMicrophoneIdle(); bool IsMicrophoneClipping(); diff --git a/desmume/src/frontend/cocoa/Info (Debug).plist b/desmume/src/frontend/cocoa/Info (Debug).plist index 22d626e48..32c115c18 100644 --- a/desmume/src/frontend/cocoa/Info (Debug).plist +++ b/desmume/src/frontend/cocoa/Info (Debug).plist @@ -2,6 +2,8 @@ + NSMicrophoneUsageDescription + DeSmuME requires your host microphone to emulate the NDS microphone. CFBundleDevelopmentRegion English CFBundleDocumentTypes diff --git a/desmume/src/frontend/cocoa/Info.plist b/desmume/src/frontend/cocoa/Info.plist index 06bfae9ed..0b2ea546c 100644 --- a/desmume/src/frontend/cocoa/Info.plist +++ b/desmume/src/frontend/cocoa/Info.plist @@ -2,6 +2,8 @@ + NSMicrophoneUsageDescription + DeSmuME requires your host microphone to emulate the NDS microphone. CFBundleDevelopmentRegion English CFBundleDocumentTypes diff --git a/desmume/src/frontend/cocoa/cocoa_input.mm b/desmume/src/frontend/cocoa/cocoa_input.mm index 946f635ad..0f79456ea 100644 --- a/desmume/src/frontend/cocoa/cocoa_input.mm +++ b/desmume/src/frontend/cocoa/cocoa_input.mm @@ -326,6 +326,7 @@ bool MacInputHandler::IsHardwareMicAvailable() void MacInputHandler::ReportAverageMicLevel() { + this->ApplyAverageMicLevel(); [this->_cdsController setMicLevel:this->GetAverageMicLevel()]; } diff --git a/desmume/src/frontend/cocoa/translations/English.lproj/MainMenu.xib b/desmume/src/frontend/cocoa/translations/English.lproj/MainMenu.xib index b3ad79496..0ebe706ff 100644 --- a/desmume/src/frontend/cocoa/translations/English.lproj/MainMenu.xib +++ b/desmume/src/frontend/cocoa/translations/English.lproj/MainMenu.xib @@ -6141,7 +6141,7 @@ L3d3dy5hZHZhbnNjZW5lLmNvbS9vZmZsaW5lL2RhdGFzL0FEVkFOc0NFbmVfUlRvb2xEUy56aXANSView - + 268 @@ -6149,7 +6149,6 @@ L3d3dy5hZHZhbnNjZW5lLmNvbS9vZmZsaW5lL2RhdGFzL0FEVkFOc0NFbmVfUlRvb2xEUy56aXA268 {{163, 329}, {220, 26}} - YES @@ -6208,7 +6207,6 @@ L3d3dy5hZHZhbnNjZW5lLmNvbS9vZmZsaW5lL2RhdGFzL0FEVkFOc0NFbmVfUlRvb2xEUy56aXA268 {{17, 335}, {144, 17}} - YES @@ -6236,7 +6234,6 @@ L3d3dy5hZHZhbnNjZW5lLmNvbS9vZmZsaW5lL2RhdGFzL0FEVkFOc0NFbmVfUlRvb2xEUy56aXA268 {{16, 12}, {153, 18}} - YES @@ -6259,13 +6256,11 @@ L3d3dy5hZHZhbnNjZW5lLmNvbS9vZmZsaW5lL2RhdGFzL0FEVkFOc0NFbmVfUlRvb2xEUy56aXA {{1, 1}, {364, 38}} - {{17, 209}, {366, 54}} - {0, 0} @@ -6295,7 +6290,6 @@ L3d3dy5hZHZhbnNjZW5lLmNvbS9vZmZsaW5lL2RhdGFzL0FEVkFOc0NFbmVfUlRvb2xEUy56aXA268 {{18, 15}, {180, 46}} - YES NO @@ -6541,7 +6535,6 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 268 {{145, 10}, {204, 26}} - YES -2076180416 @@ -6608,13 +6601,11 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 {{1, 1}, {364, 71}} - {{17, 16}, {366, 87}} - {0, 0} @@ -6644,7 +6635,6 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 268 {{18, 14}, {328, 58}} - YES NO @@ -6899,13 +6889,11 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 {{1, 1}, {364, 82}} - {{17, 107}, {366, 98}} - {0, 0} @@ -6935,7 +6923,6 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 268 {{40, 13}, {246, 21}} - YES @@ -6959,7 +6946,6 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 268 {{287, 17}, {62, 17}} - YES @@ -7039,7 +7025,6 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 {{18, 16}, {16, 16}} - YES @@ -7060,13 +7045,11 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 {{1, 1}, {364, 44}} - {{17, 267}, {366, 60}} - {0, 0} @@ -7085,8 +7068,6 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 {400, 373} - - NSView @@ -10330,7 +10311,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 {1.7976931348623157e+308, 1.7976931348623157e+308} - + 256 @@ -10346,6 +10327,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 268 {{18, 14}, {190, 126}} + YES NO 4 @@ -10614,6 +10596,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 268 {{130, 18}, {224, 21}} + YES 612368448 @@ -10634,6 +10617,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 268 {{476, 11}, {96, 32}} + YES 67108864 @@ -10655,6 +10639,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 268 {{128, 47}, {348, 26}} + YES -2080112384 @@ -10677,6 +10662,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 268 {{479, 56}, {90, 17}} + YES 68157504 @@ -10736,6 +10722,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 268 {{356, 11}, {124, 32}} + YES 67108864 @@ -10755,10 +10742,12 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 {{1, 1}, {584, 150}} + {{17, 56}, {586, 166}} + {0, 0} 67108864 @@ -10779,6 +10768,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 268 {{510, 12}, {96, 32}} + 1 YES @@ -10801,6 +10791,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 268 {{414, 12}, {96, 32}} + YES 67108864 @@ -10822,6 +10813,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 268 {{17, 230}, {586, 17}} + YES 70254657 @@ -10838,6 +10830,8 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 {620, 267} + + {{0, 0}, {1920, 1177}} {1.7976931348623157e+308, 1.7976931348623157e+308} @@ -32715,7 +32709,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 {1.7976931348623157e+308, 1.7976931348623157e+308} - + 256 @@ -32734,6 +32728,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 {{11, 105}, {48, 48}} + YES @@ -32756,6 +32751,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 268 {{60, 111}, {252, 18}} + YES @@ -32774,6 +32770,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 268 {{120, 14}, {150, 19}} + YES 67108864 @@ -32795,6 +32792,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 268 {{58, 134}, {150, 14}} + YES @@ -32822,6 +32820,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 268 {{16, 92}, {110, 14}} + YES @@ -32841,6 +32840,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 268 {{16, 75}, {110, 14}} + YES @@ -32860,6 +32860,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 268 {{16, 58}, {110, 14}} + YES @@ -32879,6 +32880,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 268 {{130, 92}, {205, 14}} + YES @@ -32899,6 +32901,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 268 {{130, 75}, {205, 14}} + YES @@ -32919,6 +32922,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 268 {{130, 58}, {205, 14}} + YES @@ -32939,6 +32943,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 268 {{65, 23}, {205, 27}} + YES @@ -32962,6 +32967,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 268 {{67, 14}, {26, 11}} + YES @@ -32981,6 +32987,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 268 {{112, 14}, {33, 11}} + YES @@ -33000,6 +33007,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 268 {{156, 14}, {33, 11}} + YES @@ -33019,6 +33027,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 268 {{204, 14}, {33, 11}} + YES @@ -33038,6 +33047,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 268 {{248, 14}, {41, 11}} + YES @@ -33057,6 +33067,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 268 {{25, 33}, {37, 17}} + YES @@ -33076,6 +33087,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 268 {{264, 33}, {72, 17}} + YES @@ -33135,11 +33147,13 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 {{1, 1}, {354, 116}} + {{17, 157}, {356, 132}} + {0, 0} @@ -33161,6 +33175,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 268 {{318, 111}, {59, 20}} + YES @@ -33185,6 +33200,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 12 {{11, 94}, {367, 5}} + {0, 0} 67108864 @@ -33204,6 +33220,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 268 {{17, 32.425800000000002}, {356, 56}} + YES 67108864 @@ -33219,6 +33236,8 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 {390, 309} + + {{0, 0}, {1920, 1177}} @@ -59085,6 +59104,14 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 12230 + + + ndsMicLevelIndicator + + + + 12231 + @@ -85304,8 +85331,9 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 {{885, 594}, {350, 125}} com.apple.InterfaceBuilder.CocoaPlugin + {{0, 578}, {620, 267}} com.apple.InterfaceBuilder.CocoaPlugin - {{310, 589}, {620, 267}} + {{0, 578}, {620, 267}} com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin @@ -86697,10 +86725,10 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin - {{329, 415}, {390, 309}} + {{659, 440}, {390, 309}} {99.5, 246.5} com.apple.InterfaceBuilder.CocoaPlugin - {{329, 415}, {390, 309}} + {{659, 440}, {390, 309}} com.apple.InterfaceBuilder.CocoaPlugin @@ -86747,7 +86775,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 - 12230 + 12231 @@ -87576,6 +87604,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 InputManager NSWindow NSTextField + NSLevelIndicator NSPopUpButton PreferencesWindowDelegate RomInfoPanel @@ -87659,6 +87688,10 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 ndsErrorStatusTextField NSTextField + + ndsMicLevelIndicator + NSLevelIndicator + openglMSAAPopUpButton NSPopUpButton diff --git a/desmume/src/frontend/cocoa/userinterface/EmuControllerDelegate.h b/desmume/src/frontend/cocoa/userinterface/EmuControllerDelegate.h index d79fc9803..5de50b642 100644 --- a/desmume/src/frontend/cocoa/userinterface/EmuControllerDelegate.h +++ b/desmume/src/frontend/cocoa/userinterface/EmuControllerDelegate.h @@ -78,6 +78,7 @@ class AudioSampleBlockGenerator; NSWindow *ndsErrorSheet; NSTextField *ndsErrorStatusTextField; NSView *exportRomSavePanelAccessoryView; + NSLevelIndicator *ndsMicLevelIndicator; NSPopUpButton *openglMSAAPopUpButton; @@ -159,6 +160,7 @@ class AudioSampleBlockGenerator; @property (readonly) IBOutlet NSWindow *ndsErrorSheet; @property (readonly) IBOutlet NSTextField *ndsErrorStatusTextField; @property (readonly) IBOutlet NSView *exportRomSavePanelAccessoryView; +@property (readonly) IBOutlet NSLevelIndicator *ndsMicLevelIndicator; @property (readonly) IBOutlet NSPopUpButton *openglMSAAPopUpButton; diff --git a/desmume/src/frontend/cocoa/userinterface/EmuControllerDelegate.mm b/desmume/src/frontend/cocoa/userinterface/EmuControllerDelegate.mm index 67c0b8e14..6b6361ad5 100644 --- a/desmume/src/frontend/cocoa/userinterface/EmuControllerDelegate.mm +++ b/desmume/src/frontend/cocoa/userinterface/EmuControllerDelegate.mm @@ -89,6 +89,7 @@ @synthesize currentMicGainValue; @dynamic currentVolumeValue; @synthesize currentMicStatusIcon; +@synthesize ndsMicLevelIndicator; @synthesize currentVolumeIcon; @synthesize isShowingSaveStateDialog; @@ -2224,6 +2225,8 @@ { [self performSelectorOnMainThread:@selector(setCurrentMicStatusIcon:) withObject:micIcon waitUntilDone:NO]; } + + [ndsMicLevelIndicator performSelectorOnMainThread:@selector(setNeedsDisplay) withObject:nil waitUntilDone:NO]; } - (AudioSampleBlockGenerator *) selectedAudioFileGenerator