From 88e028f3e4d866f50e05ce01634330fbcfc354c5 Mon Sep 17 00:00:00 2001 From: Sophia Poirier <2997196+sophiapoirier@users.noreply.github.com> Date: Sun, 27 Feb 2022 10:41:27 -0800 Subject: [PATCH] mark (nearly) all plugin SDK base class method overrides as final (pushing further-inheriting code to stick with virtual DfxPlugin methods to extend functionality in a cross-plugin-format fashion) --- dfx-library/dfxplugin.h | 184 ++++++++++++++++++------------------ dfxgui/dfxguicontrol.h | 6 +- turntablist/turntablist.cpp | 124 +++++++++++------------- turntablist/turntablist.h | 19 ++-- 4 files changed, 158 insertions(+), 175 deletions(-) diff --git a/dfx-library/dfxplugin.h b/dfx-library/dfxplugin.h index fac829b5..2398c2b8 100644 --- a/dfx-library/dfxplugin.h +++ b/dfx-library/dfxplugin.h @@ -878,44 +878,44 @@ class DfxPlugin : public TARGET_API_BASE_CLASS public: #ifdef TARGET_API_AUDIOUNIT - void PostConstructor() override; - void PreDestructor() override; - OSStatus Initialize() override; - void Cleanup() override; - OSStatus Reset(AudioUnitScope inScope, AudioUnitElement inElement) override; + void PostConstructor() final; + void PreDestructor() final; + OSStatus Initialize() final; + void Cleanup() final; + OSStatus Reset(AudioUnitScope inScope, AudioUnitElement inElement) final; #if TARGET_PLUGIN_IS_INSTRUMENT OSStatus Render(AudioUnitRenderActionFlags& ioActionFlags, - AudioTimeStamp const& inTimeStamp, UInt32 inFramesToProcess) override; + AudioTimeStamp const& inTimeStamp, UInt32 inFramesToProcess) final; #else OSStatus ProcessBufferLists(AudioUnitRenderActionFlags& ioActionFlags, AudioBufferList const& inBuffer, AudioBufferList& outBuffer, - UInt32 inFramesToProcess) override; + UInt32 inFramesToProcess) final; #endif #if TARGET_PLUGIN_USES_DSPCORE - std::unique_ptr NewKernel() override; + std::unique_ptr NewKernel() final; #endif OSStatus GetPropertyInfo(AudioUnitPropertyID inPropertyID, AudioUnitScope inScope, AudioUnitElement inElement, - UInt32& outDataSize, bool& outWritable) override; + UInt32& outDataSize, bool& outWritable) final; OSStatus GetProperty(AudioUnitPropertyID inPropertyID, AudioUnitScope inScope, AudioUnitElement inElement, - void* outData) override; + void* outData) final; OSStatus SetProperty(AudioUnitPropertyID inPropertyID, AudioUnitScope inScope, AudioUnitElement inElement, - void const* inData, UInt32 inDataSize) override; + void const* inData, UInt32 inDataSize) final; void PropertyChanged(AudioUnitPropertyID inPropertyID, - AudioUnitScope inScope, AudioUnitElement inElement) override; + AudioUnitScope inScope, AudioUnitElement inElement) final; - UInt32 SupportedNumChannels(AUChannelInfo const** outInfo) override; - Float64 GetLatency() override; - Float64 GetTailTime() override; - bool SupportsTail() override + UInt32 SupportedNumChannels(AUChannelInfo const** outInfo) final; + Float64 GetLatency() final; + Float64 GetTailTime() final; + bool SupportsTail() final { return true; } - CFURLRef CopyIconLocation() override; + CFURLRef CopyIconLocation() final; OSStatus GetParameterInfo(AudioUnitScope inScope, AudioUnitParameterID inParameterID, @@ -926,35 +926,35 @@ class DfxPlugin : public TARGET_API_BASE_CLASS UInt32 inDesiredNameLength, CFStringRef* outClumpName) override; OSStatus SetParameter(AudioUnitParameterID inParameterID, AudioUnitScope inScope, AudioUnitElement inElement, - Float32 inValue, UInt32 inBufferOffsetInFrames) override; + Float32 inValue, UInt32 inBufferOffsetInFrames) final; OSStatus ChangeStreamFormat(AudioUnitScope inScope, AudioUnitElement inElement, AudioStreamBasicDescription const& inPrevFormat, - AudioStreamBasicDescription const& inNewFormat) override; + AudioStreamBasicDescription const& inNewFormat) final; OSStatus SaveState(CFPropertyListRef* outData) override; OSStatus RestoreState(CFPropertyListRef inData) override; - OSStatus GetPresets(CFArrayRef* outData) const override; - OSStatus NewFactoryPresetSet(AUPreset const& inNewFactoryPreset) override; + OSStatus GetPresets(CFArrayRef* outData) const final; + OSStatus NewFactoryPresetSet(AUPreset const& inNewFactoryPreset) final; #if TARGET_PLUGIN_USES_MIDI - OSStatus HandleNoteOn(UInt8 inChannel, UInt8 inNoteNumber, UInt8 inVelocity, UInt32 inStartFrame) override; - OSStatus HandleNoteOff(UInt8 inChannel, UInt8 inNoteNumber, UInt8 inVelocity, UInt32 inStartFrame) override; - OSStatus HandleAllNotesOff(UInt8 inChannel) override; - OSStatus HandleControlChange(UInt8 inChannel, UInt8 inController, UInt8 inValue, UInt32 inStartFrame) override; - OSStatus HandlePitchWheel(UInt8 inChannel, UInt8 inPitchLSB, UInt8 inPitchMSB, UInt32 inStartFrame) override; - OSStatus HandleChannelPressure(UInt8 inChannel, UInt8 inValue, UInt32 inStartFrame) override; - OSStatus HandleProgramChange(UInt8 inChannel, UInt8 inProgramNum) override; - OSStatus HandlePolyPressure(UInt8 inChannel, UInt8 inKey, UInt8 inValue, UInt32 inStartFrame) override + OSStatus HandleNoteOn(UInt8 inChannel, UInt8 inNoteNumber, UInt8 inVelocity, UInt32 inStartFrame) final; + OSStatus HandleNoteOff(UInt8 inChannel, UInt8 inNoteNumber, UInt8 inVelocity, UInt32 inStartFrame) final; + OSStatus HandleAllNotesOff(UInt8 inChannel) final; + OSStatus HandleControlChange(UInt8 inChannel, UInt8 inController, UInt8 inValue, UInt32 inStartFrame) final; + OSStatus HandlePitchWheel(UInt8 inChannel, UInt8 inPitchLSB, UInt8 inPitchMSB, UInt32 inStartFrame) final; + OSStatus HandleChannelPressure(UInt8 inChannel, UInt8 inValue, UInt32 inStartFrame) final; + OSStatus HandleProgramChange(UInt8 inChannel, UInt8 inProgramNum) final; + OSStatus HandlePolyPressure(UInt8 inChannel, UInt8 inKey, UInt8 inValue, UInt32 inStartFrame) final { return noErr; } - OSStatus HandleResetAllControllers(UInt8 inChannel) override + OSStatus HandleResetAllControllers(UInt8 inChannel) final { return noErr; } - OSStatus HandleAllSoundOff(UInt8 inChannel) override + OSStatus HandleAllSoundOff(UInt8 inChannel) final { return noErr; } @@ -962,9 +962,9 @@ class DfxPlugin : public TARGET_API_BASE_CLASS #if TARGET_PLUGIN_IS_INSTRUMENT OSStatus StartNote(MusicDeviceInstrumentID inInstrument, MusicDeviceGroupID inGroupID, NoteInstanceID* outNoteInstanceID, - UInt32 inOffsetSampleFrame, MusicDeviceNoteParams const& inParams) override; + UInt32 inOffsetSampleFrame, MusicDeviceNoteParams const& inParams) final; OSStatus StopNote(MusicDeviceGroupID inGroupID, - NoteInstanceID inNoteInstanceID, UInt32 inOffsetSampleFrame) override; + NoteInstanceID inNoteInstanceID, UInt32 inOffsetSampleFrame) final; // this is a convenience function swiped from AUEffectBase, but not included in MusicDeviceBase Float64 GetSampleRate() @@ -972,11 +972,11 @@ class DfxPlugin : public TARGET_API_BASE_CLASS return Output(0).GetStreamFormat().mSampleRate; } // this is handled by AUEffectBase, but not in MusicDeviceBase - bool StreamFormatWritable(AudioUnitScope inScope, AudioUnitElement inElement) override + bool StreamFormatWritable(AudioUnitScope inScope, AudioUnitElement inElement) final { return !IsInitialized(); } - bool CanScheduleParameters() const override + [[nodiscard]] bool CanScheduleParameters() const final { return true; } @@ -986,60 +986,60 @@ class DfxPlugin : public TARGET_API_BASE_CLASS #ifdef TARGET_API_VST - void close() override; + void close() final; - void processReplacing(float** inputs, float** outputs, VstInt32 sampleFrames) override; + void processReplacing(float** inputs, float** outputs, VstInt32 sampleFrames) final; - void suspend() override; - void resume() override; - void setSampleRate(float newRate) override; + void suspend() final; + void resume() final; + void setSampleRate(float newRate) final; // Note typo (getGet) from VST SDK. - VstInt32 getGetTailSize() override; - bool getInputProperties(VstInt32 index, VstPinProperties* properties) override; - bool getOutputProperties(VstInt32 index, VstPinProperties* properties) override; + VstInt32 getGetTailSize() final; + bool getInputProperties(VstInt32 index, VstPinProperties* properties) final; + bool getOutputProperties(VstInt32 index, VstPinProperties* properties) final; - void setProgram(VstInt32 inProgramNum) override; - void setProgramName(char* inName) override; - void getProgramName(char* outText) override; - bool getProgramNameIndexed(VstInt32 inCategory, VstInt32 inIndex, char* outText) override; + void setProgram(VstInt32 inProgramNum) final; + void setProgramName(char* inName) final; + void getProgramName(char* outText) final; + bool getProgramNameIndexed(VstInt32 inCategory, VstInt32 inIndex, char* outText) final; - void setParameter(VstInt32 index, float value) override; - float getParameter(VstInt32 index) override; - void getParameterName(VstInt32 index, char* name) override; - void getParameterDisplay(VstInt32 index, char* text) override; - void getParameterLabel(VstInt32 index, char* label) override; - bool getParameterProperties(VstInt32 index, VstParameterProperties* properties) override; + void setParameter(VstInt32 index, float value) final; + float getParameter(VstInt32 index) final; + void getParameterName(VstInt32 index, char* name) final; + void getParameterDisplay(VstInt32 index, char* text) final; + void getParameterLabel(VstInt32 index, char* label) final; + bool getParameterProperties(VstInt32 index, VstParameterProperties* properties) final; - bool getEffectName(char* outText) override; - VstInt32 getVendorVersion() override; - bool getVendorString(char* outText) override; - bool getProductString(char* outText) override; + bool getEffectName(char* outText) final; + VstInt32 getVendorVersion() final; + bool getVendorString(char* outText) final; + bool getProductString(char* outText) final; - VstInt32 canDo(char* text) override; + VstInt32 canDo(char* text) final; #if TARGET_PLUGIN_USES_MIDI - VstInt32 processEvents(VstEvents* events) override; - VstInt32 setChunk(void* data, VstInt32 byteSize, bool isPreset) override; - VstInt32 getChunk(void** data, bool isPreset) override; + VstInt32 processEvents(VstEvents* events) final; + VstInt32 setChunk(void* data, VstInt32 byteSize, bool isPreset) final; + VstInt32 getChunk(void** data, bool isPreset) final; #endif #endif // end of VST API methods #ifdef TARGET_API_RTAS - void Free() override; - ComponentResult ResetPlugInState() override; - ComponentResult Prime(Boolean inPriming) override; - void UpdateControlValueInAlgorithm(long inParameterIndex) override; - ComponentResult IsControlAutomatable(long inControlIndex, short* outItIs) override; - ComponentResult GetControlNameOfLength(long inParameterIndex, char* outName, long inNameLength, OSType inControllerType, FicBoolean* outReverseHighlight) override; - ComponentResult GetValueString(long inParameterIndex, long inValue, StringPtr outValueString, long inMaxLength) override; - ComponentResult SetChunk(OSType inChunkID, SFicPlugInChunk* chunk) override; - void DoTokenIdle() override; - CPlugInView* CreateCPlugInView() override; + void Free() final; + ComponentResult ResetPlugInState() final; + ComponentResult Prime(Boolean inPriming) final; + void UpdateControlValueInAlgorithm(long inParameterIndex) final; + ComponentResult IsControlAutomatable(long inControlIndex, short* outItIs) final; + ComponentResult GetControlNameOfLength(long inParameterIndex, char* outName, long inNameLength, OSType inControllerType, FicBoolean* outReverseHighlight) final; + ComponentResult GetValueString(long inParameterIndex, long inValue, StringPtr outValueString, long inMaxLength) final; + ComponentResult SetChunk(OSType inChunkID, SFicPlugInChunk* chunk) final; + void DoTokenIdle() final; + CPlugInView* CreateCPlugInView() final; #ifdef TARGET_API_AUDIOSUITE - void SetViewOrigin(Point anOrigin) override; + void SetViewOrigin(Point anOrigin) final; #endif // AU->RTAS glue convenience functions @@ -1048,31 +1048,31 @@ class DfxPlugin : public TARGET_API_BASE_CLASS bool GetParameter_b_FromRTAS(long inParameterID); #if TARGET_PLUGIN_HAS_GUI - void SetViewPort(GrafPtr inPort) override; - void GetViewRect(Rect* outViewRect) override; - long SetControlValue(long inControlIndex, long inValue) override; - long GetControlValue(long inControlIndex, long* aValue) override; - long GetControlDefaultValue(long inControlIndex, long* outValue) override; + void SetViewPort(GrafPtr inPort) final; + void GetViewRect(Rect* outViewRect) final; + long SetControlValue(long inControlIndex, long inValue) final; + long GetControlValue(long inControlIndex, long* aValue) final; + long GetControlDefaultValue(long inControlIndex, long* outValue) final; ComponentResult UpdateControlGraphic(long inControlIndex, long inValue); ComponentResult SetControlHighliteInfo(long inControlIndex, short inIsHighlighted, short inColor); ComponentResult ChooseControl(Point inLocalCoord, long* outControlIndex); - void setEditor(void* inEditor) override + void setEditor(void* inEditor) final { mCustomUI_p = static_cast(inEditor); } - int ProcessTouchControl(long inControlIndex) override; - int ProcessReleaseControl(long inControlIndex) override; - void ProcessDoIdle() override; - void* ProcessGetModuleHandle() override + int ProcessTouchControl(long inControlIndex) final; + int ProcessReleaseControl(long inControlIndex) final; + void ProcessDoIdle() final; + void* ProcessGetModuleHandle() final { return mModuleHandle_p; } - short ProcessUseResourceFile() override + short ProcessUseResourceFile() final { return fProcessType->GetProcessGroup()->UseResourceFile(); } - void ProcessRestoreResourceFile(short resFile) override + void ProcessRestoreResourceFile(short resFile) final { fProcessType->GetProcessGroup()->RestoreResourceFile(resFile); } @@ -1086,11 +1086,11 @@ class DfxPlugin : public TARGET_API_BASE_CLASS protected: #ifdef TARGET_API_RTAS - void EffectInit() override; + void EffectInit() final; #ifdef TARGET_API_AUDIOSUITE - UInt32 ProcessAudio(bool inIsGlobalBypassed) override; + UInt32 ProcessAudio(bool inIsGlobalBypassed) final; #endif - void RenderAudio(float** inAudioStreams, float** outAudioStreams, long inNumFramesToProcess) override; + void RenderAudio(float** inAudioStreams, float** outAudioStreams, long inNumFramesToProcess) final; #endif }; static_assert(std::has_virtual_destructor_v); @@ -1224,12 +1224,12 @@ class DfxPluginCore } #ifdef TARGET_API_AUDIOUNIT - void Process(Float32 const* inStream, Float32* outStream, UInt32 inNumFrames, bool& ioSilence) override + void Process(Float32 const* inStream, Float32* outStream, UInt32 inNumFrames, bool& ioSilence) final { process(inStream, outStream, inNumFrames); ioSilence = false; // TODO: allow DSP cores to communicate their output silence status } - void Reset() override + void Reset() final { reset(); } @@ -1263,7 +1263,7 @@ static_assert(std::has_virtual_destructor_v); //----------------------------------------------------------------------------- //----------------------------------------------------------------------------- -class DfxEffectGroup : public CEffectGroup +class DfxEffectGroup final : public CEffectGroup { public: DfxEffectGroup(); @@ -1286,7 +1286,7 @@ class DfxEffectGroup : public CEffectGroup //----------------------------------------------------------------------------- -class CPluginControl_DfxCurved : virtual public CPluginControl_Continuous +class CPluginControl_DfxCurved final : virtual public CPluginControl_Continuous { public: CPluginControl_DfxCurved(OSType id, char const* name, double min, double max, @@ -1310,7 +1310,7 @@ class CPluginControl_DfxCurved : virtual public CPluginControl_Continuous //----------------------------------------------------------------------------- -class CPluginControl_DfxCurvedFrequency : public CPluginControl_Frequency, public CPluginControl_DfxCurved +class CPluginControl_DfxCurvedFrequency final : public CPluginControl_Frequency, public CPluginControl_DfxCurved { public: CPluginControl_DfxCurvedFrequency(OSType id, char const* name, double min, double max, diff --git a/dfxgui/dfxguicontrol.h b/dfxgui/dfxguicontrol.h index 6beef164..ee92aed3 100644 --- a/dfxgui/dfxguicontrol.h +++ b/dfxgui/dfxguicontrol.h @@ -1,7 +1,7 @@ /*------------------------------------------------------------------------ Destroy FX Library is a collection of foundation code for creating audio processing plug-ins. -Copyright (C) 2003-2021 Sophia Poirier +Copyright (C) 2003-2022 Sophia Poirier This file is part of the Destroy FX Library (version 1.0). @@ -211,11 +211,11 @@ class DGMultiControl : /*public IDGMultiControl,*/ public DGControl public: using DGControl::DGControl; - std::vector getChildren() override + std::vector getChildren() final { return {mChildren.cbegin(), mChildren.cend()}; } - std::vector getChildren() const override + std::vector getChildren() const final { return {mChildren.cbegin(), mChildren.cend()}; } diff --git a/turntablist/turntablist.cpp b/turntablist/turntablist.cpp index 725d5aa6..c654c8e3 100644 --- a/turntablist/turntablist.cpp +++ b/turntablist/turntablist.cpp @@ -326,7 +326,7 @@ OSStatus Turntablist::SaveState(CFPropertyListRef* outData) CFDictionarySetValue(dict, kTurntablistPreset_AudioFileAliasKey, aliasCFData.get()); } } - DisposeHandle((Handle)aliasHandle); + DisposeHandle(reinterpret_cast(aliasHandle)); } } @@ -418,7 +418,7 @@ OSStatus Turntablist::RestoreState(CFPropertyListRef inData) } } } - DisposeHandle((Handle)aliasHandle); + DisposeHandle(reinterpret_cast(aliasHandle)); } } } @@ -464,121 +464,107 @@ OSStatus Turntablist::PostNotification_AudioFileNotFound(CFStringRef inFileName) } //----------------------------------------------------------------------------- -OSStatus Turntablist::GetPropertyInfo(AudioUnitPropertyID inPropertyID, - AudioUnitScope inScope, AudioUnitElement inElement, - UInt32& outDataSize, bool& outWritable) +long Turntablist::dfx_GetPropertyInfo(dfx::PropertyID inPropertyID, + dfx::Scope inScope, unsigned long inItemIndex, + size_t& outDataSize, dfx::PropertyFlags& outFlags) { - OSStatus status = noErr; - switch (inPropertyID) { case kTurntablistProperty_Play: outDataSize = sizeof(Boolean); - outWritable = true; - break; + outFlags = dfx::kPropertyFlag_Readable | dfx::kPropertyFlag_Writable; + return dfx::kStatus_NoError; case kTurntablistProperty_AudioFile: - if (FSIsFSRefValid(&m_fsAudioFile)) + { + if (!FSIsFSRefValid(&m_fsAudioFile)) { - AliasHandle alias = nullptr; - Size aliasSize = 0; - status = createAudioFileAlias(&alias, &aliasSize); - if (status == noErr) - { - outDataSize = aliasSize; - outWritable = true; - DisposeHandle((Handle)alias); - } + return errFSBadFSRef; } - else + AliasHandle alias = nullptr; + Size aliasSize = 0; + auto const status = createAudioFileAlias(&alias, &aliasSize); + if (status != noErr) { - status = errFSBadFSRef; + return status; } - break; + outDataSize = aliasSize; + outFlags = dfx::kPropertyFlag_Readable | dfx::kPropertyFlag_Writable; + DisposeHandle(reinterpret_cast(alias)); + return dfx::kStatus_NoError; + } default: - status = DfxPlugin::GetPropertyInfo(inPropertyID, inScope, inElement, outDataSize, outWritable); - break; + return DfxPlugin::dfx_GetPropertyInfo(inPropertyID, inScope, inItemIndex, outDataSize, outFlags); } - - return status; } //----------------------------------------------------------------------------- -OSStatus Turntablist::GetProperty(AudioUnitPropertyID inPropertyID, - AudioUnitScope inScope, AudioUnitElement inElement, +long Turntablist::dfx_GetProperty(dfx::PropertyID inPropertyID, + dfx::Scope inScope, unsigned long inItemIndex, void* outData) { - OSStatus status = noErr; - switch (inPropertyID) { case kTurntablistProperty_Play: *static_cast(outData) = m_bPlay; - break; + return dfx::kStatus_NoError; case kTurntablistProperty_AudioFile: - if (FSIsFSRefValid(&m_fsAudioFile)) + { + if (!FSIsFSRefValid(&m_fsAudioFile)) { - AliasHandle alias = nullptr; - Size aliasSize = 0; - status = createAudioFileAlias(&alias, &aliasSize); - if (status == noErr) - { - memcpy(outData, *alias, aliasSize); - DisposeHandle((Handle)alias); - } + return errFSBadFSRef; } - else + AliasHandle alias = nullptr; + Size aliasSize = 0; + auto const status = createAudioFileAlias(&alias, &aliasSize); + if (status != noErr) { - status = errFSBadFSRef; + return status; } - break; + memcpy(outData, *alias, aliasSize); + DisposeHandle(reinterpret_cast(alias)); + return dfx::kStatus_NoError; + } default: - status = DfxPlugin::GetProperty(inPropertyID, inScope, inElement, outData); - break; + return DfxPlugin::dfx_GetProperty(inPropertyID, inScope, inItemIndex, outData); } - - return status; } //----------------------------------------------------------------------------- -OSStatus Turntablist::SetProperty(AudioUnitPropertyID inPropertyID, - AudioUnitScope inScope, AudioUnitElement inElement, - void const* inData, UInt32 inDataSize) +long Turntablist::dfx_SetProperty(dfx::PropertyID inPropertyID, + dfx::Scope inScope, unsigned long inItemIndex, + void const* inData, size_t inDataSize) { - OSStatus status = noErr; - switch (inPropertyID) { case kTurntablistProperty_Play: m_bPlay = *static_cast(inData); playNote(m_bPlay); - break; + return dfx::kStatus_NoError; case kTurntablistProperty_AudioFile: + { + AliasHandle alias = nullptr; + auto status = PtrToHand(inData, (Handle*)(&alias), inDataSize); + if (status != noErr) { - AliasHandle alias = nullptr; - status = PtrToHand(inData, (Handle*)(&alias), inDataSize); - if ((status == noErr) && alias) - { - status = resolveAudioFileAlias(alias); - DisposeHandle((Handle)alias); - } - else - { - status = memFullErr; - } + return status; } - break; + if (!alias) + { + return memFullErr; + } + status = resolveAudioFileAlias(alias); + DisposeHandle(reinterpret_cast(alias)); + return status; + } default: - status = DfxPlugin::SetProperty(inPropertyID, inScope, inElement, inData, inDataSize); - break; + return DfxPlugin::dfx_SetProperty(inPropertyID, inScope, inItemIndex, inData, inDataSize); } - - return status; } //----------------------------------------------------------------------------------------- diff --git a/turntablist/turntablist.h b/turntablist/turntablist.h index fa7efdc5..3c16066c 100644 --- a/turntablist/turntablist.h +++ b/turntablist/turntablist.h @@ -1,5 +1,5 @@ /*------------------------------------------------------------------------ -Copyright (c) 2004 bioroid media development & Copyright (C) 2004-2021 Sophia Poirier +Copyright (c) 2004 bioroid media development & Copyright (C) 2004-2022 Sophia Poirier All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. @@ -142,19 +142,16 @@ class Turntablist final : public DfxPlugin void processaudio(float const* const* inAudio, float* const* outAudio, unsigned long inNumFrames) override; void processparameters() override; + long dfx_GetPropertyInfo(dfx::PropertyID inPropertyID, dfx::Scope inScope, unsigned long inItemIndex, + size_t& outDataSize, dfx::PropertyFlags& outFlags) override; + long dfx_GetProperty(dfx::PropertyID inPropertyID, dfx::Scope inScope, unsigned long inItemIndex, + void* outData) override; + long dfx_SetProperty(dfx::PropertyID inPropertyID, dfx::Scope inScope, unsigned long inItemIndex, + void const* inData, size_t inDataSize) override; + OSStatus SaveState(CFPropertyListRef* outData) override; OSStatus RestoreState(CFPropertyListRef inData) override; - OSStatus GetPropertyInfo(AudioUnitPropertyID inPropertyID, - AudioUnitScope inScope, AudioUnitElement inElement, - UInt32& outDataSize, bool& outWritable) override; - OSStatus GetProperty(AudioUnitPropertyID inPropertyID, - AudioUnitScope inScope, AudioUnitElement inElement, - void* outData) override; - OSStatus SetProperty(AudioUnitPropertyID inPropertyID, - AudioUnitScope inScope, AudioUnitElement inElement, - void const* inData, UInt32 inDataSize) override; - OSStatus GetParameterInfo(AudioUnitScope inScope, AudioUnitParameterID inParameterID, AudioUnitParameterInfo& outParameterInfo) override;