Logic Pro Fails to Validate Arpeggiator Example

I’m using Projucer to build the arpeggiator au with xcode 7.3.1, set to build a universal binary. It’s failing to validate. The Apple au validator output is included at the end of this post.

It’s building succesfully and I’m copying the Arpeggiator.component into the /Library/Audio/Plug-Ins/Components folder, and Logic is finding it.

Other plugins such as the GainPlugin do validate okay.

I’m using Logic Pro 9.1.8 32 bit.

Also, Live version 9.6.1 crashes when I try to load the Arpeggiator.vst

The following is the AU error report:

validating Audio Unit Arpeggiator by ROLI Ltd.:

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’ - ‘Arpg’ - ‘ROLI’

Manufacturer String: ROLI Ltd.
AudioUnit Name: Arpeggiator
Component Version: 1.0.0 (0x10000)
Component’s Bundle Version: 1.0.0

    • PASS

TESTING OPEN TIMES:
COLD:
JUCE v4.2.1
Time to open AudioUnit: 50.535 ms
WARM:
Time to open AudioUnit: 0.016 ms
FIRST TIME:
2016-05-27 10:15:56.490 auvaltool[18844:3837861] 10:15:56.490 WARNING: 140: This application, or a library it uses, is using the deprecated Carbon Component Manager for hosting Audio Units. Support for this will be removed in a future release. Also, this makes the host incompatible with version 3 audio units. Please transition to the API’s in AudioComponent.h.
Time for initialization: 0.800 ms

    • PASS

VERIFYING DEFAULT SCOPE FORMATS:
Input Scope Bus Configuration:
Default Bus Count:0

Output Scope Bus Configuration:
Default Bus Count:0

    • PASS

VERIFYING REQUIRED PROPERTIES:

    • PASS

VERIFYING RECOMMENDED PROPERTIES:
VERIFYING PROPERTY: Latency
ca_require: inScope == kAudioUnitScope_Global InvalidScope …/…/…/…/…/modules/juce_audio_plugin_client/AU/CoreAudioUtilityClasses/AUBase.cpp:410
ca_require: inScope == kAudioUnitScope_Global InvalidScope …/…/…/…/…/modules/juce_audio_plugin_client/AU/CoreAudioUtilityClasses/AUBase.cpp:410
ca_require: inScope == kAudioUnitScope_Global InvalidScope …/…/…/…/…/modules/juce_audio_plugin_client/AU/CoreAudioUtilityClasses/AUBase.cpp:410
ca_require: inScope == kAudioUnitScope_Global InvalidScope …/…/…/…/…/modules/juce_audio_plugin_client/AU/CoreAudioUtilityClasses/AUBase.cpp:410
PASS
VERIFYING PROPERTY: Tail Time
ca_require: inScope == kAudioUnitScope_Global InvalidScope …/…/…/…/…/modules/juce_audio_plugin_client/AU/CoreAudioUtilityClasses/AUBase.cpp:416
ca_require: inScope == kAudioUnitScope_Global InvalidScope …/…/…/…/…/modules/juce_audio_plugin_client/AU/CoreAudioUtilityClasses/AUBase.cpp:416
ca_require: inScope == kAudioUnitScope_Global InvalidScope …/…/…/…/…/modules/juce_audio_plugin_client/AU/CoreAudioUtilityClasses/AUBase.cpp:416
ca_require: inScope == kAudioUnitScope_Global InvalidScope …/…/…/…/…/modules/juce_audio_plugin_client/AU/CoreAudioUtilityClasses/AUBase.cpp:416
PASS
VERIFYING PROPERTY: Bypass Effect
PASS

    • PASS

VERIFYING OPTIONAL PROPERTIES:

    • PASS

VERIFYING SPECIAL PROPERTIES:

VERIFYING CUSTOM UI
Carbon View Components Available: 1
auvw Arpg ROLI - ROLI Ltd.: Arpeggiator View
PASS

Cocoa Views Available: 1
JUCE_AUCocoaViewClass_dfb8bae737959819
PASS

HAS FACTORY PRESETS

VERIFYING CLASS INFO
PASS

TESTING HOST CALLBACKS
PASS

    • PASS

PUBLISHED PARAMETER INFO:

# # 1 Global Scope Parameters:

    • PASS

FORMAT TESTS:

Reported Channel Capabilities (explicit):
[0, 0]

No Input, Output Chans:
0-1 0-2 0-4 0-5 0-6 0-7 0-8 0-0
X
ca_require: GetElement(inScope, inElement) != NULL InvalidElement …/…/…/…/…/modules/juce_audio_plugin_client/AU/CoreAudioUtilityClasses/AUBase.cpp:562
ca_require: GetElement(inScope, inElement) != NULL InvalidElement …/…/…/…/…/modules/juce_audio_plugin_client/AU/CoreAudioUtilityClasses/AUBase.cpp:562
ca_require: GetElement(inScope, inElement) != NULL InvalidElement …/…/…/…/…/modules/juce_audio_plugin_client/AU/CoreAudioUtilityClasses/AUBase.cpp:562
ca_require: GetElement(inScope, inElement) != NULL InvalidElement …/…/…/…/…/modules/juce_audio_plugin_client/AU/CoreAudioUtilityClasses/AUBase.cpp:562
ca_require: GetElement(inScope, inElement) != NULL InvalidElement …/…/…/…/…/modules/juce_audio_plugin_client/AU/CoreAudioUtilityClasses/AUBase.cpp:562
ca_require: GetElement(inScope, inElement) != NULL InvalidElement …/…/…/…/…/modules/juce_audio_plugin_client/AU/CoreAudioUtilityClasses/AUBase.cpp:562
ca_require: GetElement(inScope, inElement) != NULL InvalidElement …/…/…/…/…/modules/juce_audio_plugin_client/AU/CoreAudioUtilityClasses/AUBase.cpp:562
ca_require: GetElement(inScope, inElement) != NULL InvalidElement …/…/…/…/…/modules/juce_audio_plugin_client/AU/CoreAudioUtilityClasses/AUBase.cpp:562
ca_require: GetElement(inScope, inElement) != NULL InvalidElement …/…/…/…/…/modules/juce_audio_plugin_client/AU/CoreAudioUtilityClasses/AUBase.cpp:562
ca_require: GetElement(inScope, inElement) != NULL InvalidElement …/…/…/…/…/modules/juce_audio_plugin_client/AU/CoreAudioUtilityClasses/AUBase.cpp:562
ca_require: GetElement(inScope, inElement) != NULL InvalidElement …/…/…/…/…/modules/juce_audio_plugin_client/AU/CoreAudioUtilityClasses/AUBase.cpp:562
ca_require: GetElement(inScope, inElement) != NULL InvalidElement …/…/…/…/…/modules/juce_audio_plugin_client/AU/CoreAudioUtilityClasses/AUBase.cpp:562
ca_require: GetElement(inScope, inElement) != NULL InvalidElement …/…/…/…/…/modules/juce_audio_plugin_client/AU/CoreAudioUtilityClasses/AUBase.cpp:562
ca_require: GetElement(inScope, inElement) != NULL InvalidElement …/…/…/…/…/modules/juce_audio_plugin_client/AU/CoreAudioUtilityClasses/AUBase.cpp:562
ca_require: GetElement(inScope, inElement) != NULL InvalidElement …/…/…/…/…/modules/juce_audio_plugin_client/AU/CoreAudioUtilityClasses/AUBase.cpp:562
ca_require: GetElement(inScope, inElement) != NULL InvalidElement …/…/…/…/…/modules/juce_audio_plugin_client/AU/CoreAudioUtilityClasses/AUBase.cpp:562
ca_require: GetElement(inScope, inElement) != NULL InvalidElement …/…/…/…/…/modules/juce_audio_plugin_client/AU/CoreAudioUtilityClasses/AUBase.cpp:562
ca_require: GetElement(inScope, inElement) != NULL InvalidElement …/…/…/…/…/modules/juce_audio_plugin_client/AU/CoreAudioUtilityClasses/AUBase.cpp:562
ca_require: GetElement(inScope, inElement) != NULL InvalidElement …/…/…/…/…/modules/juce_audio_plugin_client/AU/CoreAudioUtilityClasses/AUBase.cpp:562
ca_require: GetElement(inScope, inElement) != NULL InvalidElement …/…/…/…/…/modules/juce_audio_plugin_client/AU/CoreAudioUtilityClasses/AUBase.cpp:562
ca_require: GetElement(inScope, inElement) != NULL InvalidElement …/…/…/…/…/modules/juce_audio_plugin_client/AU/CoreAudioUtilityClasses/AUBase.cpp:562
ca_require: GetElement(inScope, inElement) != NULL InvalidElement …/…/…/…/…/modules/juce_audio_plugin_client/AU/CoreAudioUtilityClasses/AUBase.cpp:562
ca_require: GetElement(inScope, inElement) != NULL InvalidElement …/…/…/…/…/modules/juce_audio_plugin_client/AU/CoreAudioUtilityClasses/AUBase.cpp:562
ca_require: GetElement(inScope, inElement) != NULL InvalidElement …/…/…/…/…/modules/juce_audio_plugin_client/AU/CoreAudioUtilityClasses/AUBase.cpp:562
ca_require: GetElement(inScope, inElement) != NULL InvalidElement …/…/…/…/…/modules/juce_audio_plugin_client/AU/CoreAudioUtilityClasses/AUBase.cpp:562
ca_require: GetElement(inScope, inElement) != NULL InvalidElement …/…/…/…/…/modules/juce_audio_plugin_client/AU/CoreAudioUtilityClasses/AUBase.cpp:562
ca_require: GetElement(inScope, inElement) != NULL InvalidElement …/…/…/…/…/modules/juce_audio_plugin_client/AU/CoreAudioUtilityClasses/AUBase.cpp:562
ca_require: GetElement(inScope, inElement) != NULL InvalidElement …/…/…/…/…/modules/juce_audio_plugin_client/AU/CoreAudioUtilityClasses/AUBase.cpp:562
ca_require: GetElement(inScope, inElement) != NULL InvalidElement …/…/…/…/…/modules/juce_audio_plugin_client/AU/CoreAudioUtilityClasses/AUBase.cpp:562
ca_require: GetElement(inScope, inElement) != NULL InvalidElement …/…/…/…/…/modules/juce_audio_plugin_client/AU/CoreAudioUtilityClasses/AUBase.cpp:562
ca_require: GetElement(inScope, inElement) != NULL InvalidElement …/…/…/…/…/modules/juce_audio_plugin_client/AU/CoreAudioUtilityClasses/AUBase.cpp:562
ca_require: GetElement(inScope, inElement) != NULL InvalidElement …/…/…/…/…/modules/juce_audio_plugin_client/AU/CoreAudioUtilityClasses/AUBase.cpp:562
ca_require: GetElement(inScope, inElement) != NULL InvalidElement …/…/…/…/…/modules/juce_audio_plugin_client/AU/CoreAudioUtilityClasses/AUBase.cpp:562
ca_require: GetElement(inScope, inElement) != NULL InvalidElement …/…/…/…/…/modules/juce_audio_plugin_client/AU/CoreAudioUtilityClasses/AUBase.cpp:562
ca_require: GetElement(inScope, inElement) != NULL InvalidElement …/…/…/…/…/modules/juce_audio_plugin_client/AU/CoreAudioUtilityClasses/AUBase.cpp:562
ca_require: GetElement(inScope, inElement) != NULL InvalidElement …/…/…/…/…/modules/juce_audio_plugin_client/AU/CoreAudioUtilityClasses/AUBase.cpp:562
ca_require: GetElement(inScope, inElement) != NULL InvalidElement …/…/…/…/…/modules/juce_audio_plugin_client/AU/CoreAudioUtilityClasses/AUBase.cpp:562
ca_require: GetElement(inScope, inElement) != NULL InvalidElement …/…/…/…/…/modules/juce_audio_plugin_client/AU/CoreAudioUtilityClasses/AUBase.cpp:562
ca_require: GetElement(inScope, inElement) != NULL InvalidElement …/…/…/…/…/modules/juce_audio_plugin_client/AU/CoreAudioUtilityClasses/AUBase.cpp:562
ca_require: GetElement(inScope, inElement) != NULL InvalidElement …/…/…/…/…/modules/juce_audio_plugin_client/AU/CoreAudioUtilityClasses/AUBase.cpp:562
ca_require: GetElement(inScope, inElement) != NULL InvalidElement …/…/…/…/…/modules/juce_audio_plugin_client/AU/CoreAudioUtilityClasses/AUBase.cpp:562
ca_require: GetElement(inScope, inElement) != NULL InvalidElement …/…/…/…/…/modules/juce_audio_plugin_client/AU/CoreAudioUtilityClasses/AUBase.cpp:562
ca_require: GetElement(inScope, inElement) != NULL InvalidElement …/…/…/…/…/modules/juce_audio_plugin_client/AU/CoreAudioUtilityClasses/AUBase.cpp:562
ca_require: GetElement(inScope, inElement) != NULL InvalidElement …/…/…/…/…/modules/juce_audio_plugin_client/AU/CoreAudioUtilityClasses/AUBase.cpp:562
ca_require: GetElement(inScope, inElement) != NULL InvalidElement …/…/…/…/…/modules/juce_audio_plugin_client/AU/CoreAudioUtilityClasses/AUBase.cpp:562
ca_require: GetElement(inScope, inElement) != NULL InvalidElement …/…/…/…/…/modules/juce_audio_plugin_client/AU/CoreAudioUtilityClasses/AUBase.cpp:562
ca_require: GetElement(inScope, inElement) != NULL InvalidElement …/…/…/…/…/modules/juce_audio_plugin_client/AU/CoreAudioUtilityClasses/AUBase.cpp:562
ca_require: GetElement(inScope, inElement) != NULL InvalidElement …/…/…/…/…/modules/juce_audio_plugin_client/AU/CoreAudioUtilityClasses/AUBase.cpp:562
ca_require: GetElement(inScope, inElement) != NULL InvalidElement …/…/…/…/…/modules/juce_audio_plugin_client/AU/CoreAudioUtilityClasses/AUBase.cpp:562
ca_require: GetElement(inScope, inElement) != NULL InvalidElement …/…/…/…/…/modules/juce_audio_plugin_client/AU/CoreAudioUtilityClasses/AUBase.cpp:562
ca_require: GetElement(inScope, inElement) != NULL InvalidElement …/…/…/…/…/modules/juce_audio_plugin_client/AU/CoreAudioUtilityClasses/AUBase.cpp:562
ca_require: GetElement(inScope, inElement) != NULL InvalidElement …/…/…/…/…/modules/juce_audio_plugin_client/AU/CoreAudioUtilityClasses/AUBase.cpp:562

    • PASS

RENDER TESTS:

ca_require: GetElement(inScope, inElement) != NULL InvalidElement …/…/…/…/…/modules/juce_audio_plugin_client/AU/CoreAudioUtilityClasses/AUBase.cpp:562
ERROR: -10877 IN CALL Get Output Format

    • FAIL

AU VALIDATION FAILED: CORRECT THE ERRORS ABOVE.

validation result: failed validation

I posted this question three days ago. I’m trying to decide whether to use Juce for a midi plugin. I’ll state the problem more briefly: The arpeggiator example in the most recent version of Projucer crashes when run in Ableton and fails to validate in Logic Pro. Unless I’m doing something wrong this seems to be a bug.

Briefly, the Apple AU validator reports the following error:

RENDER TESTS:

ca_require: GetElement(inScope, inElement) != NULL InvalidElement …/…/…/…/…/modules/juce_audio_plugin_client/AU/CoreAudioUtilityClasses/AUBase.cpp:562
ERROR: -10877 IN CALL Get Output Format

    • FAIL

AU VALIDATION FAILED: CORRECT THE ERRORS ABOVE.

validation result: failed validation

For complete details see my first posting.

Sorry, yesterday was a holiday here in the UK, and Fabian, who does most of the plugin nitty-gritty stuff here is away at the moment…

I’m a bit rusty on host-specific quirks nowadays, but could this just be the fact that the Arpeggiator example is a midi-only plugin and auval is expecting it to have an audio output?

I tried adding {2,2} to Plugin Channel Configurations and that didn’t help.

Then I noticed that “Plugin wants MIDI input” and “Plugin produces MIDI output” were not checked. I checked them and the VST no longer crashes Ableton Live, and opens fine.

The AU still does not validate in Logic Pro but I don’t really need to make an AU anyway. I’m not in expert on AU’s but I’m not sure if it’s possible to produce a pure MIDI processing AU.

I did not test, but in the projucer project, try setting the “Plugin Main AU Type” to kAudioUnitType_MIDIProcessor.
I think that the default is “kAudioUnitType_Effect” when you check “is an effect” but when the plugin accept midi it should be set kAudioUnitType_MusicEffect, or kAudioUnitType_MIDIProcessor if it does not process audio

1 Like

When you check “Is an effect” the Plugin Main AU Type is blank. I tried changing it to kAudioUnitType_MIDIProcessor but it still doesn’t validate.

I tried " kAudioUnitType_MIDIProcessor" and AU validation fails and also gives the warning:

WARNING: Error from retrieving Component Version for resource: -36
FIRST TIME:
2016-05-31 11:00:10.552 auvaltool[5434:812152] 11:00:10.552 WARNING: 140: This application, or a library it uses, is using the deprecated Carbon Component Manager for hosting Audio Units. Support for this will be removed in a future release. Also, this makes the host incompatible with version 3 audio units. Please transition to the API’s in AudioComponent.h.
Time for initialization: 0.121 ms

Note that during these tests my the Projucer “Build AudioUnit” setting has been checked, not “Build AudioUnit v3”. Is it possible that a pure MIDI processor needs to be an AU v3?

I just tried building with “AudioUnit v3” checked. I get a compiler warning that “To compile AudioUnitv3 and/or Standalone plug-ins, you need to add the juce_audio_utils module!” But I don’t see a juce_audio_utils module in the Projucer modules list.

For now I’ll go ahead and work on a VST and later add AU support when I have more time to figure out the AU stuff.

I’ll have a look. This used to work out of the box.

This should be fixed on the latest commit on the develop branch. Unfortunately, it is a bug in the Projucer, so you will need to re-build the Projucer, re-save your .jucer file with the new Projucer and then rebuild your project.

1 Like

Thanks for looking into this. I got it to work with the manual edits mentioned in the previous posts but it will be good to have it work in the official example.

It should work without any edits on the develop branch (after re-building the Projucer)

1 Like

Hi, I rebuilt Projucer and now Live isn’t crashing. But seems to me that Arpeggiator thinks he’s an audio-plugin. I cannot insert it in front of an Instrument like I would Live’s built in Arpeggiator. I’m only building VST and VST3 and have “Plugin is a midi effect plugin” checked. Any tips? Thanks.

It’s not possible to create a pure midi processing plugin that’s a VST. i.e. All VST plugins are “audio plugins” although they may be configured to also receive midi, process it and output the result as midi. In Ableton Live midi processing plugins like the arpeggiator are Max4Live objects, not VSTs.

However you can configure a VST plugin to process midi by putting it in its own track. Then set that track to receive midi from your controller, and use the “Midi To” setting of that track to route midi output to another track that contains your synth.

1 Like

Was not aware of that, thank you. It works great now.