diff --git a/modules/juce_audio_utils/gui/juce_AudioAppComponent.cpp b/modules/juce_audio_utils/gui/juce_AudioAppComponent.cpp new file mode 100644 index 0000000000..8d8b28a91d --- /dev/null +++ b/modules/juce_audio_utils/gui/juce_AudioAppComponent.cpp @@ -0,0 +1,43 @@ +/* + ============================================================================== + + This file is part of the JUCE library. + Copyright (c) 2013 - Raw Material Software Ltd. + + Permission is granted to use this software under the terms of either: + a) the GPL v2 (or any later version) + b) the Affero GPL v3 + + Details of these licenses can be found at: www.gnu.org/licenses + + JUCE is distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR + A PARTICULAR PURPOSE. See the GNU General Public License for more details. + + ------------------------------------------------------------------------------ + + To release a closed-source product which uses JUCE, commercial licenses are + available: visit www.juce.com for more information. + + ============================================================================== +*/ + +AudioAppComponent::AudioAppComponent() +{ +} + +AudioAppComponent::~AudioAppComponent() +{ + audioSourcePlayer.setSource (nullptr); + deviceManager.removeAudioCallback (&audioSourcePlayer); + deviceManager.closeAudioDevice(); +} + +void AudioAppComponent::initialise (int numInputChannels, int numOutputChannels) +{ + String audioError = deviceManager.initialise (numInputChannels, numOutputChannels, nullptr, true); + jassert (audioError.isEmpty()); + + deviceManager.addAudioCallback (&audioSourcePlayer); + audioSourcePlayer.setSource (&transportSource); +} diff --git a/modules/juce_audio_utils/gui/juce_AudioAppComponent.h b/modules/juce_audio_utils/gui/juce_AudioAppComponent.h new file mode 100644 index 0000000000..5518b4a0f6 --- /dev/null +++ b/modules/juce_audio_utils/gui/juce_AudioAppComponent.h @@ -0,0 +1,57 @@ +/* + ============================================================================== + + This file is part of the JUCE library. + Copyright (c) 2013 - Raw Material Software Ltd. + + Permission is granted to use this software under the terms of either: + a) the GPL v2 (or any later version) + b) the Affero GPL v3 + + Details of these licenses can be found at: www.gnu.org/licenses + + JUCE is distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR + A PARTICULAR PURPOSE. See the GNU General Public License for more details. + + ------------------------------------------------------------------------------ + + To release a closed-source product which uses JUCE, commercial licenses are + available: visit www.juce.com for more information. + + ============================================================================== +*/ + +#ifndef JUCE_AUDIOAPPCOMPONENT_H_INCLUDED +#define JUCE_AUDIOAPPCOMPONENT_H_INCLUDED + + +//============================================================================== +/** + A base class for writing audio apps that stream from the audio i/o devices. + + A subclass can inherit from this and implement just a few methods such as + renderAudio(). The base class provides a basic AudioDeviceManager object + and runs audio through the +*/ +class AudioAppComponent : public Component, + public AudioSource +{ +public: + AudioAppComponent(); + ~AudioAppComponent(); + + /** A subclass should call this to set up the audio */ + void initialise (int numInputChannels, int numOutputChannels); + + AudioDeviceManager deviceManager; + +private: + //============================================================================== + AudioSourcePlayer audioSourcePlayer; + + JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (AnimatedAppComponent) +}; + + +#endif // JUCE_AUDIOAPPCOMPONENT_H_INCLUDED diff --git a/modules/juce_gui_extra/misc/juce_AnimatedAppComponent.cpp b/modules/juce_gui_extra/misc/juce_AnimatedAppComponent.cpp new file mode 100644 index 0000000000..0e312a4a90 --- /dev/null +++ b/modules/juce_gui_extra/misc/juce_AnimatedAppComponent.cpp @@ -0,0 +1,57 @@ +/* + ============================================================================== + + This file is part of the JUCE library. + Copyright (c) 2013 - Raw Material Software Ltd. + + Permission is granted to use this software under the terms of either: + a) the GPL v2 (or any later version) + b) the Affero GPL v3 + + Details of these licenses can be found at: www.gnu.org/licenses + + JUCE is distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR + A PARTICULAR PURPOSE. See the GNU General Public License for more details. + + ------------------------------------------------------------------------------ + + To release a closed-source product which uses JUCE, commercial licenses are + available: visit www.juce.com for more information. + + ============================================================================== +*/ + +AnimatedAppComponent::AnimatedAppComponent() + : lastPaintTime (Time::getCurrentTime()), elapsedFrames (0) +{ + setOpaque (true); +} + +void AnimatedAppComponent::setFramesPerSecond (int framesPerSecond) +{ + jassert (framesPerSecond > 0 && framesPerSecond < 1000); + startTimer (1000 / framesPerSecond); +} + +int AnimatedAppComponent::getFrameCounter() const noexcept +{ + return elapsedFrames; +} + +int AnimatedAppComponent::getMillisecondsSinceLastPaint() const noexcept +{ + return (Time::getCurrentTime() - lastPaintTime).toMilliseconds(); +} + +void AnimatedAppComponent::timerCallback() override +{ + ++elapsedFrames; + update(); + repaint(); +} + +void AnimatedAppComponent::paintOverChildren (Graphics&) +{ + lastPaintTime = Time::getCurrentTime(); +} diff --git a/modules/juce_gui_extra/misc/juce_AnimatedAppComponent.h b/modules/juce_gui_extra/misc/juce_AnimatedAppComponent.h new file mode 100644 index 0000000000..7adb829ceb --- /dev/null +++ b/modules/juce_gui_extra/misc/juce_AnimatedAppComponent.h @@ -0,0 +1,72 @@ +/* + ============================================================================== + + This file is part of the JUCE library. + Copyright (c) 2013 - Raw Material Software Ltd. + + Permission is granted to use this software under the terms of either: + a) the GPL v2 (or any later version) + b) the Affero GPL v3 + + Details of these licenses can be found at: www.gnu.org/licenses + + JUCE is distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR + A PARTICULAR PURPOSE. See the GNU General Public License for more details. + + ------------------------------------------------------------------------------ + + To release a closed-source product which uses JUCE, commercial licenses are + available: visit www.juce.com for more information. + + ============================================================================== +*/ + +#ifndef JUCE_ANIMATEDAPPCOMPONENT_H_INCLUDED +#define JUCE_ANIMATEDAPPCOMPONENT_H_INCLUDED + + +//============================================================================== +/** + A base class for writing simple one-page graphical apps. + + A subclass can inherit from this and implement just a few methods such as + paint() and mouse-handling. The base class provides some simple abstractions + to take care of continuously repainting itself. +*/ +class AnimatedAppComponent : public Component, + private Timer +{ +public: + AnimatedAppComponent(); + + /** Your subclass can call this to start a timer running which will + call update() and repaint the component at the given frequency. + */ + void setFramesPerSecond (int framesPerSecond); + + /** Returns the number of elapsed frames since the component started running. */ + int getFrameCounter() const noexcept; + + /** + */ + int getMillisecondsSinceLastPaint() const noexcept; + + /** + */ + void update() = 0; + +private: + //============================================================================== + Time lastPaintTime; + int elapsedFrames; + + void timerCallback() override; + void paintOverChildren (Graphics&) override; + + JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (AnimatedAppComponent) +}; + + + +#endif // JUCE_ANIMATEDAPPCOMPONENT_H_INCLUDED diff --git a/modules/juce_opengl/utils/juce_OpenGLAppComponent.cpp b/modules/juce_opengl/utils/juce_OpenGLAppComponent.cpp new file mode 100644 index 0000000000..0e312a4a90 --- /dev/null +++ b/modules/juce_opengl/utils/juce_OpenGLAppComponent.cpp @@ -0,0 +1,57 @@ +/* + ============================================================================== + + This file is part of the JUCE library. + Copyright (c) 2013 - Raw Material Software Ltd. + + Permission is granted to use this software under the terms of either: + a) the GPL v2 (or any later version) + b) the Affero GPL v3 + + Details of these licenses can be found at: www.gnu.org/licenses + + JUCE is distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR + A PARTICULAR PURPOSE. See the GNU General Public License for more details. + + ------------------------------------------------------------------------------ + + To release a closed-source product which uses JUCE, commercial licenses are + available: visit www.juce.com for more information. + + ============================================================================== +*/ + +AnimatedAppComponent::AnimatedAppComponent() + : lastPaintTime (Time::getCurrentTime()), elapsedFrames (0) +{ + setOpaque (true); +} + +void AnimatedAppComponent::setFramesPerSecond (int framesPerSecond) +{ + jassert (framesPerSecond > 0 && framesPerSecond < 1000); + startTimer (1000 / framesPerSecond); +} + +int AnimatedAppComponent::getFrameCounter() const noexcept +{ + return elapsedFrames; +} + +int AnimatedAppComponent::getMillisecondsSinceLastPaint() const noexcept +{ + return (Time::getCurrentTime() - lastPaintTime).toMilliseconds(); +} + +void AnimatedAppComponent::timerCallback() override +{ + ++elapsedFrames; + update(); + repaint(); +} + +void AnimatedAppComponent::paintOverChildren (Graphics&) +{ + lastPaintTime = Time::getCurrentTime(); +} diff --git a/modules/juce_opengl/utils/juce_OpenGLAppComponent.h b/modules/juce_opengl/utils/juce_OpenGLAppComponent.h new file mode 100644 index 0000000000..ecb0f642e5 --- /dev/null +++ b/modules/juce_opengl/utils/juce_OpenGLAppComponent.h @@ -0,0 +1,72 @@ +/* + ============================================================================== + + This file is part of the JUCE library. + Copyright (c) 2013 - Raw Material Software Ltd. + + Permission is granted to use this software under the terms of either: + a) the GPL v2 (or any later version) + b) the Affero GPL v3 + + Details of these licenses can be found at: www.gnu.org/licenses + + JUCE is distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR + A PARTICULAR PURPOSE. See the GNU General Public License for more details. + + ------------------------------------------------------------------------------ + + To release a closed-source product which uses JUCE, commercial licenses are + available: visit www.juce.com for more information. + + ============================================================================== +*/ + +#ifndef JUCE_OPENGLAPPCOMPONENT_H_INCLUDED +#define JUCE_OPENGLAPPCOMPONENT_H_INCLUDED + + +//============================================================================== +/** + A base class for writing simple one-page graphical apps. + + A subclass can inherit from this and implement just a few methods such as + paint() and mouse-handling. The base class provides some simple abstractions + to take care of continuously repainting itself. +*/ +class AnimatedAppComponent : public Component, + private Timer +{ +public: + AnimatedAppComponent(); + + /** Your subclass can call this to start a timer running which will + call update() and repaint the component at the given frequency. + */ + void setFramesPerSecond (int framesPerSecond); + + /** Returns the number of elapsed frames since the component started running. */ + int getFrameCounter() const noexcept; + + /** + */ + int getMillisecondsSinceLastPaint() const noexcept; + + /** + */ + void update() = 0; + +private: + //============================================================================== + Time lastPaintTime; + int elapsedFrames; + + void timerCallback() override; + void paintOverChildren (Graphics&) override; + + JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (AnimatedAppComponent) +}; + + + +#endif // JUCE_OPENGLAPPCOMPONENT_H_INCLUDED