diff options
author | Damien Zammit <damien@zamaudio.com> | 2019-01-26 18:17:47 +1000 |
---|---|---|
committer | Filipe Coelho <falktx@falktx.com> | 2019-01-26 09:17:47 +0100 |
commit | 3a75e272d8f91bd28978ed24c4f1f8916cb519d6 (patch) | |
tree | da788ac9de535a7fe29e47f73e80046b1afd8d0e | |
parent | 0b3dd4d835fff40b16896e3d20367bfcde840c83 (diff) |
AU fixes (#116)
* Fix AU dsp processing (N in / N out should be working)
* Add missing flags
* Remove -arch flags : let the user set them in CXXFLAGS etc
-rw-r--r-- | Makefile.plugins.mk | 9 | ||||
-rw-r--r-- | distrho/src/DistrhoPluginAU.cpp | 76 |
2 files changed, 37 insertions, 48 deletions
diff --git a/Makefile.plugins.mk b/Makefile.plugins.mk index 50a1abcb..4fb5c3e2 100644 --- a/Makefile.plugins.mk +++ b/Makefile.plugins.mk @@ -72,12 +72,15 @@ AU_BUILD_FLAGS = \ -Wno-deprecated-declarations \ -Wno-four-char-constants \ -Wno-overloaded-virtual \ - -Wno-unused-parameter + -Wno-unused-parameter \ + -DTARGET_OS_MAC AU_LINK_FLAGS = \ - -bundle -arch x86_64 -arch i386 \ + -bundle \ -framework AudioToolbox \ -framework AudioUnit \ + -framework CoreAudio \ + -framework CoreServices \ -exported_symbols_list $(DPF_PATH)/distrho/src/DistrhoPluginAU.exp # not needed yet @@ -86,8 +89,6 @@ AU_LINK_FLAGS = \ # -I$(DPF_PATH)/distrho/src/CoreAudio106/AudioUnits/AUPublic/AUViewBase # -I$(DPF_PATH)/distrho/src/CoreAudio106/AudioUnits/AUPublic/OtherBases -# -framework CoreAudio -# -framework CoreServices # --------------------------------------------------------------------------------------------------------------------- # Handle UI stuff, disable UI support automatically diff --git a/distrho/src/DistrhoPluginAU.cpp b/distrho/src/DistrhoPluginAU.cpp index ddb523c7..015d01ac 100644 --- a/distrho/src/DistrhoPluginAU.cpp +++ b/distrho/src/DistrhoPluginAU.cpp @@ -52,6 +52,8 @@ public: { CreateElements(); + maxch = GetNumberOfChannels(); + AUElement* const globals = Globals(); DISTRHO_SAFE_ASSERT_RETURN(globals != nullptr,); @@ -68,11 +70,6 @@ public: { } - AUKernelBase* NewKernel() override - { - return new PluginKernel(this, fPlugin); - } - OSStatus GetParameterValueStrings(AudioUnitScope inScope, AudioUnitParameterID inParameterID, CFArrayRef* outStrings) override @@ -87,31 +84,26 @@ public: { DISTRHO_SAFE_ASSERT_RETURN(inScope == kAudioUnitScope_Global, kAudioUnitErr_InvalidParameter); + outParameterInfo.flags = kAudioUnitParameterFlag_IsReadable | kAudioUnitParameterFlag_IsWritable; + // Name { const String& name = fPlugin.getParameterName(inParameterID); CFStringRef cfname = CFStringCreateWithCString(kCFAllocatorDefault, name.buffer(), kCFStringEncodingUTF8); - AUBase::FillInParameterName(outParameterInfo, cfname, true); // FIXME true or false?? + AUBase::FillInParameterName(outParameterInfo, cfname, false); } // Hints { const uint32_t hints(fPlugin.getParameterHints(inParameterID)); - outParameterInfo.flags = 0x0; - // other interesting bits: // kAudioUnitParameterFlag_OmitFromPresets for outputs? // kAudioUnitParameterFlag_MeterReadOnly for outputs? // kAudioUnitParameterFlag_CanRamp for log? // kAudioUnitParameterFlag_IsHighResolution ?? - if (hints & kParameterIsOutput) - outParameterInfo.flags = kAudioUnitParameterFlag_IsReadable; - else - outParameterInfo.flags = kAudioUnitParameterFlag_IsWritable; - if ((hints & kParameterIsAutomable) == 0x0) outParameterInfo.flags |= kAudioUnitParameterFlag_NonRealTime; @@ -172,6 +164,12 @@ public: return AUEffectBase::GetProperty (inID, inScope, inElement, outData); } + void SetParameter(AudioUnitParameterID paramID, + AudioUnitParameterValue value) override + { + fPlugin.setParameterValue(paramID, (float)value); + } + bool SupportsTail() override { return false; @@ -182,43 +180,33 @@ public: return fPlugin.getVersion(); } - // ------------------------------------------------------------------- - -private: - LastValuesInit fLastValuesInit; - PluginExporter fPlugin; - - // most of the real work happens here - class PluginKernel : public AUKernelBase + OSStatus ProcessBufferLists(AudioUnitRenderActionFlags &ioActionFlags, + const AudioBufferList &inBuffer, + AudioBufferList &outBuffer, + UInt32 inFramesToProcess) override { - public: - PluginKernel(AUEffectBase* const inAudioUnit, PluginExporter& plugin) - : AUKernelBase(inAudioUnit), - fPlugin(plugin) {} - - // *Required* overides for the process method for this effect - // processes one channel of interleaved samples - void Process(const Float32* const inSourceP, - Float32* const inDestP, - UInt32 inFramesToProcess, - UInt32 inNumChannels, - bool& ioSilence) - { - DISTRHO_SAFE_ASSERT_RETURN(inNumChannels == DISTRHO_PLUGIN_NUM_INPUTS,); + UInt32 i; + float *srcBuffer[maxch]; + float *destBuffer[maxch]; - // FIXME - // fPlugin.run(inSourceP, inDestP, inFramesToProcess); + for (i = 0; i < maxch; i++) { + srcBuffer[i] = (Float32 *)inBuffer.mBuffers[i].mData; + destBuffer[i] = (Float32 *)outBuffer.mBuffers[i].mData; } - void Reset() override - { - } + fPlugin.run((const float **)srcBuffer, (float **)destBuffer, inFramesToProcess); - private: - PluginExporter& fPlugin; + ioActionFlags &= ~kAudioUnitRenderAction_OutputIsSilence; - DISTRHO_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR(PluginKernel) - }; + return noErr; + } + + // ------------------------------------------------------------------- + +private: + LastValuesInit fLastValuesInit; + PluginExporter fPlugin; + UInt32 maxch; DISTRHO_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR(PluginAU) }; |