From f3e1e52c88fc2f597bc4da231f6fe40cfff5c981 Mon Sep 17 00:00:00 2001 From: jules Date: Fri, 11 May 2018 12:26:27 +0100 Subject: [PATCH] Cleaned up some audio plugin creation function prototypes --- .../Source/Filters/InternalFilters.cpp | 2 +- .../Source/Filters/InternalFilters.h | 2 +- .../format/juce_AudioPluginFormat.h | 4 +- .../format_types/juce_AudioUnitPluginFormat.h | 6 +- .../juce_AudioUnitPluginFormat.mm | 157 +++++++----------- .../format_types/juce_LADSPAPluginFormat.cpp | 5 +- .../format_types/juce_LADSPAPluginFormat.h | 3 +- .../format_types/juce_VST3PluginFormat.cpp | 4 +- .../format_types/juce_VST3PluginFormat.h | 3 +- .../format_types/juce_VSTPluginFormat.cpp | 6 +- .../format_types/juce_VSTPluginFormat.h | 3 +- 11 files changed, 81 insertions(+), 114 deletions(-) diff --git a/extras/AudioPluginHost/Source/Filters/InternalFilters.cpp b/extras/AudioPluginHost/Source/Filters/InternalFilters.cpp index 0b1f2c8d84..c024e13c9d 100644 --- a/extras/AudioPluginHost/Source/Filters/InternalFilters.cpp +++ b/extras/AudioPluginHost/Source/Filters/InternalFilters.cpp @@ -377,7 +377,7 @@ void InternalPluginFormat::createPluginInstance (const PluginDescription& desc, double /*initialSampleRate*/, int /*initialBufferSize*/, void* userData, - void (*callback) (void*, AudioPluginInstance*, const String&)) + PluginCreationCallback callback) { auto* p = createInstance (desc.name); diff --git a/extras/AudioPluginHost/Source/Filters/InternalFilters.h b/extras/AudioPluginHost/Source/Filters/InternalFilters.h index cdcde6dc65..4432ff08a1 100644 --- a/extras/AudioPluginHost/Source/Filters/InternalFilters.h +++ b/extras/AudioPluginHost/Source/Filters/InternalFilters.h @@ -59,7 +59,7 @@ public: private: //============================================================================== void createPluginInstance (const PluginDescription&, double initialSampleRate, int initialBufferSize, - void* userData, void (*callback) (void*, AudioPluginInstance*, const String&)) override; + void* userData, PluginCreationCallback) override; AudioPluginInstance* createInstance (const String& name); bool requiresUnblockedMessageThreadDuringCreation (const PluginDescription&) const noexcept override; diff --git a/modules/juce_audio_processors/format/juce_AudioPluginFormat.h b/modules/juce_audio_processors/format/juce_AudioPluginFormat.h index be7a257637..f154704a11 100644 --- a/modules/juce_audio_processors/format/juce_AudioPluginFormat.h +++ b/modules/juce_audio_processors/format/juce_AudioPluginFormat.h @@ -151,12 +151,14 @@ protected: AudioPluginFormat() noexcept; + using PluginCreationCallback = void (*) (void*, AudioPluginInstance*, const String&); + /** Implementors must override this function. This is guaranteed to be called on the message thread. You may call the callback on any thread. */ virtual void createPluginInstance (const PluginDescription&, double initialSampleRate, int initialBufferSize, void* userData, - void (*callback) (void*, AudioPluginInstance*, const String&)) = 0; + PluginCreationCallback) = 0; virtual bool requiresUnblockedMessageThreadDuringCreation (const PluginDescription&) const noexcept = 0; diff --git a/modules/juce_audio_processors/format_types/juce_AudioUnitPluginFormat.h b/modules/juce_audio_processors/format_types/juce_AudioUnitPluginFormat.h index 5810e80f08..de59213181 100644 --- a/modules/juce_audio_processors/format_types/juce_AudioUnitPluginFormat.h +++ b/modules/juce_audio_processors/format_types/juce_AudioUnitPluginFormat.h @@ -56,10 +56,8 @@ public: private: //============================================================================== void createPluginInstance (const PluginDescription&, - double initialSampleRate, - int initialBufferSize, - void* userData, - void (*callback) (void*, AudioPluginInstance*, const String&)) override; + double initialSampleRate, int initialBufferSize, + void* userData, PluginCreationCallback) override; bool requiresUnblockedMessageThreadDuringCreation (const PluginDescription&) const noexcept override; diff --git a/modules/juce_audio_processors/format_types/juce_AudioUnitPluginFormat.mm b/modules/juce_audio_processors/format_types/juce_AudioUnitPluginFormat.mm index 6552a81339..c76c228799 100644 --- a/modules/juce_audio_processors/format_types/juce_AudioUnitPluginFormat.mm +++ b/modules/juce_audio_processors/format_types/juce_AudioUnitPluginFormat.mm @@ -341,12 +341,7 @@ public: if (auto* au = pluginInstance.audioUnit) { - AudioUnitGetParameter (au, - paramID, - kAudioUnitScope_Global, - 0, - &value); - + AudioUnitGetParameter (au, paramID, kAudioUnitScope_Global, 0, &value); value = normaliseParamValue (value); } @@ -359,12 +354,8 @@ public: if (auto* au = pluginInstance.audioUnit) { - AudioUnitSetParameter (au, - paramID, - kAudioUnitScope_Global, - 0, - scaleParamValue (newValue), - 0); + AudioUnitSetParameter (au, paramID, kAudioUnitScope_Global, + 0, scaleParamValue (newValue), 0); sendParameterChangeEvent(); } @@ -406,12 +397,12 @@ public: UInt32 propertySize = sizeof (stringValue); - OSStatus err = AudioUnitGetProperty (au, - kAudioUnitProperty_ParameterStringFromValue, - kAudioUnitScope_Global, - 0, - &stringValue, - &propertySize); + auto err = AudioUnitGetProperty (au, + kAudioUnitProperty_ParameterStringFromValue, + kAudioUnitScope_Global, + 0, + &stringValue, + &propertySize); if (! err && stringValue.outString != nullptr) return String::fromCFString (stringValue.outString).substring (0, maximumLength); @@ -441,12 +432,12 @@ public: UInt32 propertySize = sizeof (valueString); - OSStatus err = AudioUnitGetProperty (au, - kAudioUnitProperty_ParameterValueFromString, - kAudioUnitScope_Global, - 0, - &valueString, - &propertySize); + auto err = AudioUnitGetProperty (au, + kAudioUnitProperty_ParameterValueFromString, + kAudioUnitScope_Global, + 0, + &valueString, + &propertySize); if (! err) return normaliseParamValue (valueString.outValue); @@ -456,25 +447,10 @@ public: return Parameter::getValueForText (text); } - bool isAutomatable() const override - { - return automatable; - } - - bool isDiscrete() const override - { - return discrete; - } - - bool isBoolean() const override - { - return isSwitch; - } - - int getNumSteps() const override - { - return numSteps; - } + bool isAutomatable() const override { return automatable; } + bool isDiscrete() const override { return discrete; } + bool isBoolean() const override { return isSwitch; } + int getNumSteps() const override { return numSteps; } StringArray getAllValueStrings() const override { @@ -528,12 +504,6 @@ public: AudioUnitPluginInstance (AudioComponentInstance au) : AudioPluginInstance (getBusesProperties (au)), auComponent (AudioComponentInstanceGetComponent (au)), - wantsMidiMessages (false), - producesMidiMessages (false), - wasPlaying (false), - prepared (false), - isAUv3 (false), - currentBuffer (nullptr), audioUnit (au), #if JUCE_MAC eventListenerRef (0), @@ -735,7 +705,7 @@ public: if (getElementCount (scope) != n && isBusCountWritable (isInput)) { OSStatus err; - UInt32 newCount = static_cast (n); + auto newCount = static_cast (n); layoutHasChanged = true; err = AudioUnitSetProperty (audioUnit, kAudioUnitProperty_ElementCount, scope, 0, &newCount, sizeof (newCount)); @@ -755,7 +725,8 @@ public: { AudioStreamBasicDescription stream; UInt32 dataSize = sizeof (stream); - OSStatus err = AudioUnitGetProperty (audioUnit, kAudioUnitProperty_StreamFormat, scope, static_cast (i), &stream, &dataSize); + auto err = AudioUnitGetProperty (audioUnit, kAudioUnitProperty_StreamFormat, scope, static_cast (i), &stream, &dataSize); + if (err != noErr || dataSize < sizeof (stream)) return false; @@ -788,7 +759,7 @@ public: UInt32 dataSize = minDataSize; AudioChannelLayoutTag actualTag = kAudioChannelLayoutTag_Unknown; - OSStatus err = AudioUnitGetProperty (audioUnit, kAudioUnitProperty_AudioChannelLayout, scope, static_cast (i), &layout, &dataSize); + auto err = AudioUnitGetProperty (audioUnit, kAudioUnitProperty_AudioChannelLayout, scope, static_cast (i), &layout, &dataSize); bool supportsLayouts = (err == noErr && dataSize >= minDataSize); if (supportsLayouts) @@ -1484,7 +1455,10 @@ private: String pluginName, manufacturer, version; String fileOrIdentifier; CriticalSection lock; - bool wantsMidiMessages, producesMidiMessages, wasPlaying, prepared, isAUv3, isMidiEffectPlugin, lastBypassValue = false; + + bool wantsMidiMessages = false, producesMidiMessages = false, + wasPlaying = false, prepared = false, + isAUv3 = false, isMidiEffectPlugin = false; struct AUBuffer { @@ -1521,7 +1495,7 @@ private: if (AudioUnitGetProperty (parent.audioUnit, kAudioUnitProperty_BypassEffect, kAudioUnitScope_Global, 0, &value, &dataSize) == noErr && dataSize == sizeof (UInt32)) - return (value != 0); + return value != 0; } return false; @@ -1599,7 +1573,7 @@ private: OwnedArray outputBufferList; AudioTimeStamp timeStamp; - AudioBuffer* currentBuffer; + AudioBuffer* currentBuffer = nullptr; Array> supportedInLayouts, supportedOutLayouts; int numChannelInfos; @@ -1802,7 +1776,7 @@ private: { if (pktlist != nullptr && pktlist->numPackets) { - const double time = Time::getMillisecondCounterHiRes() * 0.001; + auto time = Time::getMillisecondCounterHiRes() * 0.001; const MIDIPacket* packet = &pktlist->packet[0]; for (UInt32 i = 0; i < pktlist->numPackets; ++i) @@ -1823,27 +1797,27 @@ private: OSStatus getBeatAndTempo (Float64* outCurrentBeat, Float64* outCurrentTempo) const { - AudioPlayHead* const ph = getPlayHead(); - AudioPlayHead::CurrentPositionInfo result; - - if (ph != nullptr && ph->getCurrentPosition (result)) + if (auto* ph = getPlayHead()) { - setIfNotNull (outCurrentBeat, result.ppqPosition); - setIfNotNull (outCurrentTempo, result.bpm); - } - else - { - setIfNotNull (outCurrentBeat, 0); - setIfNotNull (outCurrentTempo, 120.0); + AudioPlayHead::CurrentPositionInfo result; + + if (ph->getCurrentPosition (result)) + { + setIfNotNull (outCurrentBeat, result.ppqPosition); + setIfNotNull (outCurrentTempo, result.bpm); + return noErr; + } } + setIfNotNull (outCurrentBeat, 0); + setIfNotNull (outCurrentTempo, 120.0); return noErr; } OSStatus getMusicalTimeLocation (UInt32* outDeltaSampleOffsetToNextBeat, Float32* outTimeSig_Numerator, UInt32* outTimeSig_Denominator, Float64* outCurrentMeasureDownBeat) const { - if (AudioPlayHead* const ph = getPlayHead()) + if (auto* ph = getPlayHead()) { AudioPlayHead::CurrentPositionInfo result; @@ -1868,7 +1842,7 @@ private: Float64* outCurrentSampleInTimeLine, Boolean* outIsCycling, Float64* outCycleStartBeat, Float64* outCycleEndBeat) { - if (AudioPlayHead* const ph = getPlayHead()) + if (auto* ph = getPlayHead()) { AudioPlayHead::CurrentPositionInfo result; @@ -1905,7 +1879,7 @@ private: UInt32 inNumberFrames, AudioBufferList* ioData) { return static_cast (hostRef) - ->renderGetInput (ioActionFlags, inTimeStamp, inBusNumber, inNumberFrames, ioData); + ->renderGetInput (ioActionFlags, inTimeStamp, inBusNumber, inNumberFrames, ioData); } static OSStatus renderMidiOutputCallback (void* hostRef, const AudioTimeStamp*, UInt32 /*midiOutNum*/, @@ -1948,13 +1922,14 @@ private: #endif UInt64 currentTime = mach_absolute_time(); - static mach_timebase_info_data_t sTimebaseInfo = {0, 0}; + static mach_timebase_info_data_t sTimebaseInfo = { 0, 0 }; if (sTimebaseInfo.denom == 0) mach_timebase_info (&sTimebaseInfo); - double bufferNanos = static_cast (numSamples) * 1.0e9 / sampleRate; - UInt64 bufferTicks = static_cast (std::ceil (bufferNanos * (static_cast (sTimebaseInfo.denom) / static_cast (sTimebaseInfo.numer)))); + auto bufferNanos = static_cast (numSamples) * 1.0e9 / sampleRate; + auto bufferTicks = static_cast (std::ceil (bufferNanos * (static_cast (sTimebaseInfo.denom) + / static_cast (sTimebaseInfo.numer)))); currentTime += bufferTicks; return currentTime; @@ -1964,10 +1939,9 @@ private: { UInt32 countSize; Boolean writable; - OSStatus err; AudioUnitScope scope = (isInput ? kAudioUnitScope_Input : kAudioUnitScope_Output); - err = AudioUnitGetPropertyInfo (audioUnit, kAudioUnitProperty_ElementCount, scope, 0, &countSize, &writable); + auto err = AudioUnitGetPropertyInfo (audioUnit, kAudioUnitProperty_ElementCount, scope, 0, &countSize, &writable); return (err == noErr && writable != 0 && countSize == sizeof (UInt32)); } @@ -1983,7 +1957,7 @@ private: UInt32 count; UInt32 countSize = sizeof (count); - OSStatus err = AudioUnitGetProperty (comp, kAudioUnitProperty_ElementCount, scope, 0, &count, &countSize); + auto err = AudioUnitGetProperty (comp, kAudioUnitProperty_ElementCount, scope, 0, &count, &countSize); jassert (err == noErr); ignoreUnused (err); @@ -2048,7 +2022,7 @@ private: { const bool isInput = (dir == 0); const AudioUnitScope scope = isInput ? kAudioUnitScope_Input : kAudioUnitScope_Output; - const int n = getElementCount (scope); + auto n = getElementCount (scope); for (int busIdx = 0; busIdx < n; ++busIdx) { @@ -2208,7 +2182,7 @@ class AudioUnitPluginWindowCocoa : public AudioProcessorEditor public: AudioUnitPluginWindowCocoa (AudioUnitPluginInstance& p, bool createGenericViewIfNeeded) : AudioProcessorEditor (&p), - plugin (p), waitingForViewCallback (false) + plugin (p) { addAndMakeVisible (wrapper); @@ -2279,9 +2253,9 @@ private: ObjCBlock viewControllerCallback; #endif - bool waitingForViewCallback; + bool waitingForViewCallback = false; - bool createView (const bool createGenericViewIfNeeded) + bool createView (bool createGenericViewIfNeeded) { JUCE_IOS_MAC_VIEW* pluginView = nil; UInt32 dataSize = 0; @@ -2604,10 +2578,8 @@ void AudioUnitPluginFormat::findAllTypesForFile (OwnedArray& } void AudioUnitPluginFormat::createPluginInstance (const PluginDescription& desc, - double rate, - int blockSize, - void* userData, - void (*callback) (void*, AudioPluginInstance*, const String&)) + double rate, int blockSize, + void* userData, PluginCreationCallback callback) { using namespace AudioUnitFormatHelpers; @@ -2645,9 +2617,9 @@ void AudioUnitPluginFormat::createPluginInstance (const PluginDescription& desc, #endif AUAsyncInitializationCallback (double inSampleRate, int inFramesPerBuffer, - void* inUserData, void (*inOriginalCallback) (void*, AudioPluginInstance*, const String&)) - : sampleRate (inSampleRate), framesPerBuffer (inFramesPerBuffer), - passUserData (inUserData), originalCallback (inOriginalCallback) + void* inUserData, PluginCreationCallback inOriginalCallback) + : sampleRate (inSampleRate), framesPerBuffer (inFramesPerBuffer), + passUserData (inUserData), originalCallback (inOriginalCallback) { #if JUCE_SUPPORTS_AUv3 block = CreateObjCBlock (this, &AUAsyncInitializationCallback::completion); @@ -2682,15 +2654,14 @@ void AudioUnitPluginFormat::createPluginInstance (const PluginDescription& desc, double sampleRate; int framesPerBuffer; void* passUserData; - void (*originalCallback) (void*, AudioPluginInstance*, const String&); + PluginCreationCallback originalCallback; #if JUCE_SUPPORTS_AUv3 ObjCBlock block; #endif }; - AUAsyncInitializationCallback* callbackBlock - = new AUAsyncInitializationCallback (rate, blockSize, userData, callback); + auto callbackBlock = new AUAsyncInitializationCallback (rate, blockSize, userData, callback); #if JUCE_SUPPORTS_AUv3 //============================================================================== @@ -2706,7 +2677,7 @@ void AudioUnitPluginFormat::createPluginInstance (const PluginDescription& desc, #endif // JUCE_SUPPORTS_AUv3 AudioComponentInstance audioUnit; - OSStatus err = AudioComponentInstanceNew(auComponent, &audioUnit); + auto err = AudioComponentInstanceNew(auComponent, &audioUnit); callbackBlock->completion (err != noErr ? nullptr : audioUnit, err); } else @@ -2780,12 +2751,12 @@ StringArray AudioUnitPluginFormat::searchPathsForPlugins (const FileSearchPath&, bool AudioUnitPluginFormat::fileMightContainThisPluginType (const String& fileOrIdentifier) { AudioComponentDescription desc; - String name, version, manufacturer; + if (AudioUnitFormatHelpers::getComponentDescFromIdentifier (fileOrIdentifier, desc, name, version, manufacturer)) return AudioComponentFindNext (nullptr, &desc) != nullptr; - const File f (File::createFileWithoutCheckingPath (fileOrIdentifier)); + auto f = File::createFileWithoutCheckingPath (fileOrIdentifier); return (f.hasFileExtension (".component") || f.hasFileExtension (".appex")) && f.isDirectory(); diff --git a/modules/juce_audio_processors/format_types/juce_LADSPAPluginFormat.cpp b/modules/juce_audio_processors/format_types/juce_LADSPAPluginFormat.cpp index 439c06f8ac..9499dc4067 100644 --- a/modules/juce_audio_processors/format_types/juce_LADSPAPluginFormat.cpp +++ b/modules/juce_audio_processors/format_types/juce_LADSPAPluginFormat.cpp @@ -608,8 +608,9 @@ void LADSPAPluginFormat::findAllTypesForFile (OwnedArray& res } } -void LADSPAPluginFormat::createPluginInstance (const PluginDescription& desc, double sampleRate, int blockSize, - void* userData, void (*callback) (void*, AudioPluginInstance*, const String&)) +void LADSPAPluginFormat::createPluginInstance (const PluginDescription& desc, + double sampleRate, int blockSize, + void* userData, PluginCreationCallback callback) { std::unique_ptr result; diff --git a/modules/juce_audio_processors/format_types/juce_LADSPAPluginFormat.h b/modules/juce_audio_processors/format_types/juce_LADSPAPluginFormat.h index dbe205a7a7..ed080d25fc 100644 --- a/modules/juce_audio_processors/format_types/juce_LADSPAPluginFormat.h +++ b/modules/juce_audio_processors/format_types/juce_LADSPAPluginFormat.h @@ -55,8 +55,7 @@ public: private: //============================================================================== void createPluginInstance (const PluginDescription&, double initialSampleRate, - int initialBufferSize, void* userData, - void (*callback) (void*, AudioPluginInstance*, const String&)) override; + int initialBufferSize, void* userData, PluginCreationCallback) override; bool requiresUnblockedMessageThreadDuringCreation (const PluginDescription&) const noexcept override; diff --git a/modules/juce_audio_processors/format_types/juce_VST3PluginFormat.cpp b/modules/juce_audio_processors/format_types/juce_VST3PluginFormat.cpp index b6aabd110b..6111de9495 100644 --- a/modules/juce_audio_processors/format_types/juce_VST3PluginFormat.cpp +++ b/modules/juce_audio_processors/format_types/juce_VST3PluginFormat.cpp @@ -2922,8 +2922,8 @@ void VST3PluginFormat::findAllTypesForFile (OwnedArray& resul VST3Classes::VST3ModuleHandle::getAllDescriptionsForFile (results, fileOrIdentifier); } -void VST3PluginFormat::createPluginInstance (const PluginDescription& description, double, int, void* userData, - void (*callback) (void*, AudioPluginInstance*, const String&)) +void VST3PluginFormat::createPluginInstance (const PluginDescription& description, double, int, + void* userData, PluginCreationCallback callback) { std::unique_ptr result; diff --git a/modules/juce_audio_processors/format_types/juce_VST3PluginFormat.h b/modules/juce_audio_processors/format_types/juce_VST3PluginFormat.h index c4f77b6389..f80363ff1c 100644 --- a/modules/juce_audio_processors/format_types/juce_VST3PluginFormat.h +++ b/modules/juce_audio_processors/format_types/juce_VST3PluginFormat.h @@ -63,8 +63,7 @@ public: private: void createPluginInstance (const PluginDescription&, double initialSampleRate, - int initialBufferSize, void* userData, - void (*callback) (void*, AudioPluginInstance*, const String&)) override; + int initialBufferSize, void* userData, PluginCreationCallback) override; bool requiresUnblockedMessageThreadDuringCreation (const PluginDescription&) const noexcept override; diff --git a/modules/juce_audio_processors/format_types/juce_VSTPluginFormat.cpp b/modules/juce_audio_processors/format_types/juce_VSTPluginFormat.cpp index a52f2f8aaf..3647c0907c 100644 --- a/modules/juce_audio_processors/format_types/juce_VSTPluginFormat.cpp +++ b/modules/juce_audio_processors/format_types/juce_VSTPluginFormat.cpp @@ -3428,10 +3428,8 @@ void VSTPluginFormat::findAllTypesForFile (OwnedArray& result } void VSTPluginFormat::createPluginInstance (const PluginDescription& desc, - double sampleRate, - int blockSize, - void* userData, - void (*callback) (void*, AudioPluginInstance*, const String&)) + double sampleRate, int blockSize, + void* userData, PluginCreationCallback callback) { std::unique_ptr result; diff --git a/modules/juce_audio_processors/format_types/juce_VSTPluginFormat.h b/modules/juce_audio_processors/format_types/juce_VSTPluginFormat.h index 5298dc835d..2c6684c869 100644 --- a/modules/juce_audio_processors/format_types/juce_VSTPluginFormat.h +++ b/modules/juce_audio_processors/format_types/juce_VSTPluginFormat.h @@ -118,8 +118,7 @@ public: private: //============================================================================== void createPluginInstance (const PluginDescription&, double initialSampleRate, - int initialBufferSize, void* userData, - void (*callback) (void*, AudioPluginInstance*, const String&)) override; + int initialBufferSize, void* userData, PluginCreationCallback) override; bool requiresUnblockedMessageThreadDuringCreation (const PluginDescription&) const noexcept override;