From b41183d837e2a139370e41b5b71e48a3fadbfda6 Mon Sep 17 00:00:00 2001 From: jsiegle <jsiegle@mit.edu> Date: Sun, 8 Apr 2012 17:52:03 -0400 Subject: [PATCH] AudioComponent closes device when not in use. Closes #10. The AudioComponent now closes the audio device when it's not in use, saving CPU cycles. Previously, background CPU levels would be between 8 and 10%. Now, when acquisition is not active (and audio device settings are not being actively edited), background CPU levels drop to 2%. More optimization will be necessary to get it down to zero, but 2% is still a big improvement over what we had previously. --- Source/Audio/AudioComponent.cpp | 21 +++++++++++++++- Source/Audio/AudioComponent.h | 3 +++ Source/Processors/Editors/AudioEditor.cpp | 16 +++++++++--- Source/Processors/Editors/AudioEditor.h | 3 ++- Source/Processors/Editors/GenericEditor.cpp | 4 +-- .../Processors/Visualization/OpenGLCanvas.cpp | 2 +- Source/UI/EditorViewport.cpp | 25 ++++++++++++++----- 7 files changed, 59 insertions(+), 15 deletions(-) diff --git a/Source/Audio/AudioComponent.cpp b/Source/Audio/AudioComponent.cpp index f393750c1..9942ff147 100644 --- a/Source/Audio/AudioComponent.cpp +++ b/Source/Audio/AudioComponent.cpp @@ -68,7 +68,10 @@ AudioComponent::AudioComponent() : isPlaying(false) std::cout << "Audio device sample rate: " << sr << std::endl; std::cout << "Audio device buffer size: " << buffSize << std::endl << std::endl; - graphPlayer = new AudioProcessorPlayer(); + graphPlayer = new AudioProcessorPlayer(); + + stopDevice(); // reduces the amount of background processing when + // device is not in use } @@ -99,8 +102,22 @@ bool AudioComponent::callbacksAreActive() { return isPlaying; } +void AudioComponent::restartDevice() +{ + deviceManager.restartLastAudioDevice(); + +} + +void AudioComponent::stopDevice() +{ + + deviceManager.closeAudioDevice(); +} + void AudioComponent::beginCallbacks() { + restartDevice(); + std::cout << std::endl << "Adding audio callback." << std::endl; deviceManager.addAudioCallback(graphPlayer); isPlaying = true; @@ -113,5 +130,7 @@ void AudioComponent::endCallbacks() { deviceManager.removeAudioCallback(graphPlayer); isPlaying = false; + stopDevice(); + } diff --git a/Source/Audio/AudioComponent.h b/Source/Audio/AudioComponent.h index 45a804c4b..e129564e6 100644 --- a/Source/Audio/AudioComponent.h +++ b/Source/Audio/AudioComponent.h @@ -56,6 +56,9 @@ public: bool callbacksAreActive(); + void restartDevice(); + void stopDevice(); + AudioDeviceManager deviceManager; private: diff --git a/Source/Processors/Editors/AudioEditor.cpp b/Source/Processors/Editors/AudioEditor.cpp index 50f659177..808226e56 100644 --- a/Source/Processors/Editors/AudioEditor.cpp +++ b/Source/Processors/Editors/AudioEditor.cpp @@ -136,16 +136,23 @@ void AudioEditor::buttonClicked(Button* button) { if (acw == 0) { - AudioComponent* ac = getAudioComponent(); - - if (ac != 0) - acw = new AudioConfigurationWindow(ac->deviceManager, (Button*) audioWindowButton); + // AudioComponent* audioComponent = getAudioComponent(); + // audioComponent->restartDevice(); + // if (audioComponent != 0) { + acw = new AudioConfigurationWindow(getAudioComponent()->deviceManager, (Button*) audioWindowButton); + acw->setUIComponent(getUIComponent()); + //} } + getAudioComponent()->restartDevice(); acw->setVisible(true); + } else { + acw->setVisible(false); + //deleteAndZero(acw); + getAudioComponent()->stopDevice(); } } @@ -205,6 +212,7 @@ AudioConfigurationWindow::~AudioConfigurationWindow() void AudioConfigurationWindow::closeButtonPressed() { controlButton->setToggleState(false,false); + getAudioComponent()->stopDevice(); setVisible(false); } diff --git a/Source/Processors/Editors/AudioEditor.h b/Source/Processors/Editors/AudioEditor.h index fcdad65b5..5389a25d8 100644 --- a/Source/Processors/Editors/AudioEditor.h +++ b/Source/Processors/Editors/AudioEditor.h @@ -48,7 +48,8 @@ class AudioWindowButton : public Button Font font; }; -class AudioConfigurationWindow : public DocumentWindow +class AudioConfigurationWindow : public DocumentWindow, + public AccessClass { public: AudioConfigurationWindow(AudioDeviceManager& adm, Button* b); diff --git a/Source/Processors/Editors/GenericEditor.cpp b/Source/Processors/Editors/GenericEditor.cpp index 9600c196b..b44d1a867 100644 --- a/Source/Processors/Editors/GenericEditor.cpp +++ b/Source/Processors/Editors/GenericEditor.cpp @@ -79,8 +79,8 @@ GenericEditor::GenericEditor (GenericProcessor* owner)//, FilterViewport* vp) audioChannels.clear(); recordChannels.clear(); - backgroundGradient = ColourGradient(Colour(190, 190, 190), 0.0f, 0.0f, - Colour(145, 145, 145), 0.0f, 150.0f, false); + backgroundGradient = ColourGradient(Colour(190, 190, 190), 0.0f, 150.0f, + Colour(145, 145, 145), 0.0f, 0.0f, false); //grad.addColour(0.5f, Colour(170, 170, 170)); //grad.addColour(0.5, Colours::lightgrey); diff --git a/Source/Processors/Visualization/OpenGLCanvas.cpp b/Source/Processors/Visualization/OpenGLCanvas.cpp index 1d8b33856..a51104ccb 100644 --- a/Source/Processors/Visualization/OpenGLCanvas.cpp +++ b/Source/Processors/Visualization/OpenGLCanvas.cpp @@ -28,7 +28,7 @@ OpenGLCanvas::OpenGLCanvas() : //OpenGLComponent(OpenGLComponent::OpenGLType::openGLDefault, true), scrollPix(0), scrollTime(0), scrollDiff(0), originalScrollPix(0), scrollBarWidth(15), PI(3.1415926), showScrollTrack(true), - animationIsActive(false), refreshMs(100) + animationIsActive(false), refreshMs(50) { loadFonts(); diff --git a/Source/UI/EditorViewport.cpp b/Source/UI/EditorViewport.cpp index b4752b7f4..0652adc75 100644 --- a/Source/UI/EditorViewport.cpp +++ b/Source/UI/EditorViewport.cpp @@ -687,13 +687,26 @@ void SignalChainTabButton::paintButton(Graphics &g, bool isMouseOver, bool isBut } if (isMouseOver) { - grad1 = ColourGradient(Colour(255, 255, 255), 0.0f, 20.0f, - Colour(180, 180, 180), 0.0f, 0.0f, - false); + + grad1.multiplyOpacity(0.7f); + grad2.multiplyOpacity(0.7f); + // grad1 = ColourGradient(Colour(255, 255, 255), 0.0f, 20.0f, + // Colour(180, 180, 180), 0.0f, 0.0f, + // false); + + // grad2 = ColourGradient(Colour(255, 255, 255), 0.0f, 0.0f, + // Colour(180, 180, 180), 0.0f, 20.0f, + // false); + } + + if (isButtonDown) { + + // ColourGradient grad3 = grad1; + // grad1 = grad2; + // grad2 = grad3; + // grad1.multiplyOpacity(0.7f); + // grad2.multiplyOpacity(0.7f); - grad2 = ColourGradient(Colour(255, 255, 255), 0.0f, 0.0f, - Colour(180, 180, 180), 0.0f, 20.0f, - false); } g.setGradientFill(grad2); -- GitLab