Strange - Vanilla AU not passing auval

A completely vanilla project builds, and the VST and VST3 work as expected (and pass all tests in pluginval). The AU, however, won’t load into pluginval. Has anyone else experienced this?

Here is the error from auval…

Last login: Sat Jun 30 13:18:05 on ttys000
Anos-iMac:~ anoesisaudio$ cd $HOME/Library/Audio/Plug-ins/Components
Anos-iMac:Components anoesisaudio$ ls
Van.component
Anos-iMac:Components anoesisaudio$ auval -v aufx Ystx Anoe

    AU Validation Tool
    Version: 1.6.1a1 
    Copyright 2003-2013, Apple Inc. All Rights Reserved.
    Specify -h (-help) for command options

--------------------------------------------------
VALIDATING AUDIO UNIT: 'aufx' - 'Ystx' - 'Anoe'
--------------------------------------------------
ERROR: Cannot get Component's Name strings
ERROR: Error from retrieving Component Version: -50

* * FAIL
--------------------------------------------------
TESTING OPEN TIMES:
FATAL ERROR: didn't find the component

Code:

PluginProcessor.h

/* PluginProcessor.h */
#pragma once
#include "../JuceLibraryCode/JuceHeader.h"

//===========================================================
/**
*/
class VanAudioProcessor  : public AudioProcessor
{
public:
    //===========================================================
    VanAudioProcessor();
    ~VanAudioProcessor();

    //===========================================================
    void prepareToPlay (double sampleRate, int samplesPerBlock) override;
    void releaseResources() override;

   #ifndef JucePlugin_PreferredChannelConfigurations
    bool isBusesLayoutSupported (const BusesLayout& layouts) const override;
   #endif

    void processBlock (AudioBuffer<float>&, MidiBuffer&) override;

    //===========================================================
    AudioProcessorEditor* createEditor() override;
    bool hasEditor() const override;

    //===========================================================
    const String getName() const override;

    bool acceptsMidi() const override;
    bool producesMidi() const override;
    bool isMidiEffect() const override;
    double getTailLengthSeconds() const override;

        //===========================================================
    int getNumPrograms() override;
    int getCurrentProgram() override;
    void setCurrentProgram (int index) override;
    const String getProgramName (int index) override;
    void changeProgramName (int index, const String& newName) override;

    //===========================================================
    void getStateInformation (MemoryBlock& destData) override;
    void setStateInformation (const void* data, int sizeInBytes) override;

private:
    //===========================================================
    JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (VanAudioProcessor)
};

PluginProcessor.cpp

/* PluginProcessor.cpp */

#include "PluginProcessor.h"
#include "PluginEditor.h"
//===========================================================
VanAudioProcessor::VanAudioProcessor()
#ifndef JucePlugin_PreferredChannelConfigurations
     : AudioProcessor (BusesProperties()
                     #if ! JucePlugin_IsMidiEffect
                      #if ! JucePlugin_IsSynth
                       .withInput  ("Input",  AudioChannelSet::stereo(), true)
                      #endif
                       .withOutput ("Output", AudioChannelSet::stereo(), true)
                     #endif
                       )
#endif
{
}

VanAudioProcessor::~VanAudioProcessor()
{
}

//===========================================================
const String VanAudioProcessor::getName() const
{
    return JucePlugin_Name;
}

bool VanAudioProcessor::acceptsMidi() const
{
   #if JucePlugin_WantsMidiInput
    return true;
   #else
    return false;
   #endif
}

bool VanAudioProcessor::producesMidi() const
{
   #if JucePlugin_ProducesMidiOutput
    return true;
   #else
    return false;
   #endif
}

bool VanAudioProcessor::isMidiEffect() const
{
   #if JucePlugin_IsMidiEffect
    return true;
   #else
    return false;
   #endif
}

double VanAudioProcessor::getTailLengthSeconds() const
{
    return 0.0;
}

int VanAudioProcessor::getNumPrograms()
{
    return 1;   // NB: some hosts don't cope very well if you tell them there are 0 programs,
                // so this should be at least 1, even if you're not really implementing programs.
}

int VanAudioProcessor::getCurrentProgram()
{
    return 0;
}

void VanAudioProcessor::setCurrentProgram (int index)
{
}

const String VanAudioProcessor::getProgramName (int index)
{
    return {};
}

void VanAudioProcessor::changeProgramName (int index, const String& newName)
{
}

//===========================================================
void VanAudioProcessor::prepareToPlay (double sampleRate, int samplesPerBlock)
{
}

void VanAudioProcessor::releaseResources()
{
}

#ifndef JucePlugin_PreferredChannelConfigurations
bool VanAudioProcessor::isBusesLayoutSupported (const BusesLayout& layouts) const
{
  #if JucePlugin_IsMidiEffect
    ignoreUnused (layouts);
    return true;
  #else
    // This is the place where you check if the layout is supported.
    // In this template code we only support mono or stereo.
    if (layouts.getMainOutputChannelSet() != AudioChannelSet::mono()
     && layouts.getMainOutputChannelSet() != AudioChannelSet::stereo())
        return false;

    // This checks if the input layout matches the output layout
   #if ! JucePlugin_IsSynth
    if (layouts.getMainOutputChannelSet() != layouts.getMainInputChannelSet())
        return false;
   #endif

    return true;
  #endif
}
#endif

void VanAudioProcessor::processBlock (AudioBuffer<float>& buffer, MidiBuffer& midiMessages)
{
    ScopedNoDenormals noDenormals;
    auto totalNumInputChannels  = getTotalNumInputChannels();
    auto totalNumOutputChannels = getTotalNumOutputChannels();

    for (auto i = totalNumInputChannels; i < totalNumOutputChannels; ++i)
        buffer.clear (i, 0, buffer.getNumSamples());

    for (int channel = 0; channel < totalNumInputChannels; ++channel)
    {
        auto* channelData = buffer.getWritePointer (channel);

        // ..do something to the data...
    }
}

//===========================================================
bool VanAudioProcessor::hasEditor() const
{
    return true; // (change this to false if you choose to not supply an editor)
}

AudioProcessorEditor* VanAudioProcessor::createEditor()
{
    return new VanAudioProcessorEditor (*this);
}

//===========================================================
void VanAudioProcessor::getStateInformation (MemoryBlock& destData)
{
}

void VanAudioProcessor::setStateInformation (const void* data, int sizeInBytes)
{
}

//===========================================================
// This creates new instances of the plugin..
AudioProcessor* JUCE_CALLTYPE createPluginFilter()
{
    return new VanAudioProcessor();
}

PluginEditor.h

/*  PluginEditor.h */

#pragma once

#include "../JuceLibraryCode/JuceHeader.h"
#include "PluginProcessor.h"

//===========================================================
/**
*/
class VanAudioProcessorEditor  : public AudioProcessorEditor
{
public:
    VanAudioProcessorEditor (VanAudioProcessor&);
    ~VanAudioProcessorEditor();

    //===========================================================
    void paint (Graphics&) override;
    void resized() override;

private:
    // This reference is provided as a quick way for your editor to
    // access the processor object that created it.
    VanAudioProcessor& processor;

    JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (VanAudioProcessorEditor)
};

PluginEditor.cpp

/* PluginEditor.cpp */

#include "PluginProcessor.h"
#include "PluginEditor.h"
//===========================================================
VanAudioProcessorEditor::VanAudioProcessorEditor (VanAudioProcessor& p)
    : AudioProcessorEditor (&p), processor (p)
{
    // Make sure that before the constructor has finished, you've set the
    // editor's size to whatever you need it to be.
    setSize (400, 300);
}

VanAudioProcessorEditor::~VanAudioProcessorEditor()
{
}

//===========================================================
void VanAudioProcessorEditor::paint (Graphics& g)
{
    // (Our component is opaque, so we must completely fill the background with a solid colour)
    g.fillAll (getLookAndFeel().findColour (ResizableWindow::backgroundColourId));

    g.setColour (Colours::white);
    g.setFont (15.0f);
    g.drawFittedText ("Hello World!", getLocalBounds(), Justification::centred, 1);
}

void VanAudioProcessorEditor::resized()
{
    // This is generally where you'll want to lay out the positions of any
    // subcomponents in your editor..
}

This error message is telling, that auval couldn’t load the plugin at all, so it could be any reason. You will get the same message when you search for phantasy names as well.

I think you are suffering from the same problem described in this thread:

So does the problem persist, if you restart the system? If not there is nothing you can do than send prayers to apple to fix that…

1 Like

Restarting did work. I had been avoiding worry about AU for a bit due to this problem. For some reason, I was thinking that Apple had fixed this :roll_eyes:, so it would be good to try. Guess not. Perhaps in OSX11…

Thank you Daniel.

BTW - to fix, I followed the advice in another thread and did this…somewhat crazy…step. Now it works. :slightly_smiling_face:

(build)
auval -v aufx iUp2 Tdip
mv Test1.component Test19.component
mv Test19.component Test1.component
3 Likes

2y later … just ran into the same issue, on osx 10.15.6.
the mv trick did work for me, i owe you a beer now :slight_smile:

There is a more solid workaround now known, found by @olilarkin (at least that’s where I got it from):

killall -9 AudioComponentRegistrar

Worked always for me without mv and restart

3 Likes

Thanks. This should be the accepted answer!