summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDamien Zammit <damien@zamaudio.com>2019-01-26 18:17:47 +1000
committerFilipe Coelho <falktx@falktx.com>2019-01-26 09:17:47 +0100
commit3a75e272d8f91bd28978ed24c4f1f8916cb519d6 (patch)
treeda788ac9de535a7fe29e47f73e80046b1afd8d0e
parent0b3dd4d835fff40b16896e3d20367bfcde840c83 (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.mk9
-rw-r--r--distrho/src/DistrhoPluginAU.cpp76
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)
};