|
|
@@ -26,8 +26,31 @@ |
|
|
namespace juce
|
|
|
namespace juce
|
|
|
{
|
|
|
{
|
|
|
|
|
|
|
|
|
class ARADocumentControllerSpecialisation::ARADocumentControllerImpl : public ARADocumentController,
|
|
|
|
|
|
private juce::Timer
|
|
|
|
|
|
|
|
|
class SimpleTimer final : private Timer
|
|
|
|
|
|
{
|
|
|
|
|
|
public:
|
|
|
|
|
|
SimpleTimer (int frequencyHz, std::function<void()> callbackIn)
|
|
|
|
|
|
: callback (std::move (callbackIn))
|
|
|
|
|
|
{
|
|
|
|
|
|
jassert (callback);
|
|
|
|
|
|
startTimerHz (frequencyHz);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
~SimpleTimer() override
|
|
|
|
|
|
{
|
|
|
|
|
|
stopTimer();
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
private:
|
|
|
|
|
|
void timerCallback() override
|
|
|
|
|
|
{
|
|
|
|
|
|
callback();
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
std::function<void()> callback;
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
class ARADocumentControllerSpecialisation::ARADocumentControllerImpl : public ARADocumentController
|
|
|
{
|
|
|
{
|
|
|
public:
|
|
|
public:
|
|
|
ARADocumentControllerImpl (const ARA::PlugIn::PlugInEntry* entry,
|
|
|
ARADocumentControllerImpl (const ARA::PlugIn::PlugInEntry* entry,
|
|
|
@@ -204,10 +227,6 @@ protected: |
|
|
void didUpdatePlaybackRegionProperties (ARA::PlugIn::PlaybackRegion* playbackRegion) noexcept override;
|
|
|
void didUpdatePlaybackRegionProperties (ARA::PlugIn::PlaybackRegion* playbackRegion) noexcept override;
|
|
|
void willDestroyPlaybackRegion (ARA::PlugIn::PlaybackRegion* playbackRegion) noexcept override;
|
|
|
void willDestroyPlaybackRegion (ARA::PlugIn::PlaybackRegion* playbackRegion) noexcept override;
|
|
|
|
|
|
|
|
|
//==============================================================================
|
|
|
|
|
|
// juce::Timer overrides
|
|
|
|
|
|
void timerCallback() override;
|
|
|
|
|
|
|
|
|
|
|
|
public:
|
|
|
public:
|
|
|
//==============================================================================
|
|
|
//==============================================================================
|
|
|
/** @internal */
|
|
|
/** @internal */
|
|
|
@@ -248,6 +267,9 @@ private: |
|
|
std::atomic<bool> internalAnalysisProgressIsSynced { true };
|
|
|
std::atomic<bool> internalAnalysisProgressIsSynced { true };
|
|
|
ScopedJuceInitialiser_GUI libraryInitialiser;
|
|
|
ScopedJuceInitialiser_GUI libraryInitialiser;
|
|
|
int activeAudioSourcesCount = 0;
|
|
|
int activeAudioSourcesCount = 0;
|
|
|
|
|
|
std::optional<SimpleTimer> analysisTimer;
|
|
|
|
|
|
|
|
|
|
|
|
void analysisTimerCallback();
|
|
|
|
|
|
|
|
|
//==============================================================================
|
|
|
//==============================================================================
|
|
|
template <typename ModelObject, typename Function, typename... Ts>
|
|
|
template <typename ModelObject, typename Function, typename... Ts>
|
|
|
@@ -363,10 +385,10 @@ void ARADocumentControllerSpecialisation::ARADocumentControllerImpl::didEndEditi |
|
|
{
|
|
|
{
|
|
|
notifyListeners (&ARADocument::Listener::didEndEditing, static_cast<ARADocument*> (getDocument()));
|
|
|
notifyListeners (&ARADocument::Listener::didEndEditing, static_cast<ARADocument*> (getDocument()));
|
|
|
|
|
|
|
|
|
if (isTimerRunning() && (activeAudioSourcesCount == 0))
|
|
|
|
|
|
stopTimer();
|
|
|
|
|
|
else if (! isTimerRunning() && (activeAudioSourcesCount > 0))
|
|
|
|
|
|
startTimerHz (20);
|
|
|
|
|
|
|
|
|
if (activeAudioSourcesCount == 0)
|
|
|
|
|
|
analysisTimer.reset();
|
|
|
|
|
|
else if (! analysisTimer.has_value() && (activeAudioSourcesCount > 0))
|
|
|
|
|
|
analysisTimer.emplace (20, [this] { analysisTimerCallback(); });
|
|
|
}
|
|
|
}
|
|
|
|
|
|
|
|
|
void ARADocumentControllerSpecialisation::ARADocumentControllerImpl::willNotifyModelUpdates() noexcept
|
|
|
void ARADocumentControllerSpecialisation::ARADocumentControllerImpl::willNotifyModelUpdates() noexcept
|
|
|
@@ -760,7 +782,7 @@ namespace ModelUpdateControllerProgressAdapter |
|
|
}
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
|
|
|
void ARADocumentControllerSpecialisation::ARADocumentControllerImpl::timerCallback()
|
|
|
|
|
|
|
|
|
void ARADocumentControllerSpecialisation::ARADocumentControllerImpl::analysisTimerCallback()
|
|
|
{
|
|
|
{
|
|
|
if (! internalAnalysisProgressIsSynced.exchange (true, std::memory_order_release))
|
|
|
if (! internalAnalysisProgressIsSynced.exchange (true, std::memory_order_release))
|
|
|
for (auto& audioSource : getDocument()->getAudioSources())
|
|
|
for (auto& audioSource : getDocument()->getAudioSources())
|
|
|
|