My custom AU can be opened in AU Lab but not in GarageBand or Ableton.
-
- KVRer
- Topic Starter
- 4 posts since 30 Nov, 2012
I created a filter AU in Xcode as a project for a signals class I'm taking,and I can open it just fine in AU Lab from my components folder, but I cant seem to open it in a DAW. Can anyone help me get to the bottom of this? Could it be a setting like the manufacturer code? If anybody has an idea help would be much appreciated and I can supply any information you might need.
-
- KVRer
- Topic Starter
- 4 posts since 30 Nov, 2012
AUTO-ADMIN: Non-MP3, WAV, OGG, SoundCloud, YouTube, Vimeo, Twitter and Facebook links in this post have been protected automatically. Once the member reaches 5 posts the links will function as normal.
I hadn't but I read your reply and tried it. The first time it failed because the manufacturer code needed one uppercase letter. I corrected this and reran auval and this time it passed but I still can't open it up in a DAW. When i execute auval -a the AU shows up at the top of the list.Here is the printout from the "auval -v TYPE SUBT MANF" command. Any ideas?
Code: Select all (#)
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
AU Validation Tool
Version: 1.6.1a1
Copyright 2003-2011, Apple, Inc. All Rights Reserved.
Specify -h (-help) for command options
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
--------------------------------------------------
VALIDATING AUDIO UNIT: 'aufx' - 'FILT' - 'Bnka'
--------------------------------------------------
Manufacturer String: Ben and Karen Audio
AudioUnit Name: Filter
Component Version: 1.0.0 (0x10000)
* * PASS
--------------------------------------------------
TESTING OPEN TIMES:
COLD:
Time to open AudioUnit: 8.500 ms
WARM:
Time to open AudioUnit: 0.017 ms
FIRST TIME:
Time for initialization: 0.011 ms
* * PASS
--------------------------------------------------
VERIFYING DEFAULT SCOPE FORMATS:
Input Scope Bus Configuration:
Default Bus Count:1
Default Format: AudioStreamBasicDescription: 2 ch, 44100 Hz, 'lpcm' (0x00000029) 32-bit little-endian float, deinterleaved
Output Scope Bus Configuration:
Default Bus Count:1
Default Format: AudioStreamBasicDescription: 2 ch, 44100 Hz, 'lpcm' (0x00000029) 32-bit little-endian float, deinterleaved
* * PASS
--------------------------------------------------
VERIFYING REQUIRED PROPERTIES:
VERIFYING PROPERTY: Sample Rate
PASS
VERIFYING PROPERTY: Stream Format
PASS
VERIFYING PROPERTY: Maximum Frames Per Slice
PASS
VERIFYING PROPERTY: Last Render Error
PASS
* * PASS
--------------------------------------------------
VERIFYING RECOMMENDED PROPERTIES:
VERIFYING PROPERTY: Latency
PASS
VERIFYING PROPERTY: Tail Time
PASS
VERIFYING PROPERTY: Bypass Effect
PASS
* * PASS
--------------------------------------------------
VERIFYING OPTIONAL PROPERTIES:
VERIFYING PROPERTY Host Callbacks
PASS
* * PASS
--------------------------------------------------
VERIFYING SPECIAL PROPERTIES:
VERIFYING CUSTOM UI
Carbon View Components Available: 0
Cocoa Views Available: 1
AppleDemoFilter_ViewFactory
PASS
HAS FACTORY PRESETS
ID: 0 Name: Preset One
ID: 1 Name: Preset Two
VERIFYING CLASS INFO
PASS
TESTING HOST CALLBACKS
PASS
* * PASS
--------------------------------------------------
PUBLISHED PARAMETER INFO:
# # # 3 Global Scope Parameters:
Parameter ID:0
Name: cutoff frequency
Parameter Type: Hertz
Values: Minimum = 12.000000, Default = 1000.000000, Maximum = 22050.000000
Flags: Display Logarithmic, High Resolution, Readable, Writable
-parameter PASS
Parameter ID:1
Name: resonance
Parameter Type: Decibels
Values: Minimum = -20.000000, Default = 0.000000, Maximum = 20.000000
Flags: High Resolution, Readable, Writable
-parameter PASS
Parameter ID:2
Name: filter choice
Parameter Type: Decibels
Values: Minimum = 0.000000, Default = 0.000000, Maximum = 3.000000
Flags: Readable, Writable
-parameter PASS
Testing that parameters retain value across reset and initialization
PASS
* * PASS
--------------------------------------------------
FORMAT TESTS:
Reported Channel Capabilities (implicit):
[-1, -1]
Input/Output Channel Handling:
1-1 1-2 1-4 1-5 1-6 1-7 1-8 2-2 2-4 2-5 2-6 2-7 2-8 4-4 4-5 5-5 6-6 7-7 8-8
X X X X X X X
* * PASS
--------------------------------------------------
RENDER TESTS:
Input Format: AudioStreamBasicDescription: 2 ch, 44100 Hz, 'lpcm' (0x00000029) 32-bit little-endian float, deinterleaved
Output Format: AudioStreamBasicDescription: 2 ch, 44100 Hz, 'lpcm' (0x00000029) 32-bit little-endian float, deinterleaved
Render Test at 512 frames
Slicing Render Test at 64 frames
PASS
Render Test at 64 frames, sample rate: 22050 Hz
Render Test at 137 frames, sample rate: 96000 Hz
Render Test at 4096 frames, sample rate: 48000 Hz
Render Test at 4096 frames, sample rate: 192000 Hz
Render Test at 4096 frames, sample rate: 11025 Hz
Render Test at 512 frames, sample rate: 44100 Hz
PASS
1 Channel Test:
Render Test at 512 frames
PASS
Checking connection semantics:
Connection format:
AudioStreamBasicDescription: 2 ch, 44100 Hz, 'lpcm' (0x00000029) 32-bit little-endian float, deinterleaved
PASS
Bad Max Frames - Render should fail
PASS
Checking parameter setting
Using AudioUnitSetParameter
Using AudioUnitScheduleParameter
PASS
Test MIDI
PASS
* * PASS
--------------------------------------------------
AU VALIDATION SUCCEEDED.
--------------------------------------------------
Code: Select all (#)
-
- KVRist
- 231 posts since 15 Apr, 2012 from Toronto, ON
Just to make sure ('cause you never know), launch Abelton, go to Preferences, then File/Folder tab. Look in the plug-ins section and make sure Use Audio Units is turned on. Even if it is, hit Rescan and see if that helps.
Alternatively, if you have Logic, launch it, go to Preferences, then Audio Units Manager and see if it's in the list. Sometimes an AU will pass auval validation but not Logic's (and by extension, not GarageBand). You can try validating it again in Logic and it will output an error report for you if it doesn't pass.
Other than that, things you could try:
- installing the component in the MacintoshHD/Library/Audio/Plug-Ins/Components/ directory (or alternatively your home path's audio library directory.. whichever location you don't have it installed in now in other words).
- checking the permissions on the the directory it's located in (unlikely, but I've heard of this being a problem before).
- check your build settings. It's a good idea to build for 32-bit/64-bit still even though most up-to-date audio apps/DAWs are running in 64-bit, but that can depend on your machine of course.
Alternatively, if you have Logic, launch it, go to Preferences, then Audio Units Manager and see if it's in the list. Sometimes an AU will pass auval validation but not Logic's (and by extension, not GarageBand). You can try validating it again in Logic and it will output an error report for you if it doesn't pass.
Other than that, things you could try:
- installing the component in the MacintoshHD/Library/Audio/Plug-Ins/Components/ directory (or alternatively your home path's audio library directory.. whichever location you don't have it installed in now in other words).
- checking the permissions on the the directory it's located in (unlikely, but I've heard of this being a problem before).
- check your build settings. It's a good idea to build for 32-bit/64-bit still even though most up-to-date audio apps/DAWs are running in 64-bit, but that can depend on your machine of course.
-
- KVRer
- Topic Starter
- 4 posts since 30 Nov, 2012
Thanks for the response but I've done all of that multiple times. I've been trouble shooting for a while to no avail. I'm not one to ask questions on forums because I can usually figure it out myself but this one has me stumped. If you have any more ideas though I'd really appreciate the help. Thanks again.
-
- KVRist
- 231 posts since 15 Apr, 2012 from Toronto, ON
Do you know about the FilterDemo that Apple has available on its dev site? Download that and look at the code and build settings and see if anything is off or missing in your AU. Additionally, build the FilterDemo and see if it loads up in GarageBand and Abelton.
Also, are you aware of the new component entry requirement?
This needs to go in your plug-in's .cpp file.
The only other thing I can think of is doing a google search on "audio unit cache" or something similar related to your problem. I remember reading something about someone having to clear out the .plist cache that the component manager reads.
If you need additional reference, here is a small AU I put together a few months ago that you can either look at or clone from Github: https://github.com/cfloisand/au-combfilter
Also, are you aware of the new component entry requirement?
Code: Select all
// old component entry no longer required
// COMPONENT_ENTRY(<yourpluginclass>)
// new AUPlugIn macro
AUDIOCOMPONENT_ENTRY(AUBaseFactory, <yourpluginclass>)
The only other thing I can think of is doing a google search on "audio unit cache" or something similar related to your problem. I remember reading something about someone having to clear out the .plist cache that the component manager reads.
If you need additional reference, here is a small AU I put together a few months ago that you can either look at or clone from Github: https://github.com/cfloisand/au-combfilter
-
- KVRer
- Topic Starter
- 4 posts since 30 Nov, 2012
Thanks! My AU is actually a modified version of the FilterDemo just with additional bandpass and high pass filters added. I'll go back through to see if i changed any of the build settings. That AUDIOCOMPONENT_ENTRY is there though. Ill also look into your other two pieces of advice when I get a chance. Thanks for the help!
-
- KVRer
- 9 posts since 7 Jan, 2009 from Paris, France
Sorry if I resurrect an old thread, but...any luck with this? I am in the same situation.
What I have found out is that, while the old way of opening the audio units as Components relies on compiling (rezzing) the .r files containing the manufacturer type, subtype..etc.. strings, the new behavior is based on the AudioComponent entry in the plist file.
Auval seems to be able to open those plug-ins that have either one, or both of the previous scenarios in place. If the -comp (open as a component) argument is given to it, auval will try to open a plugin with the old component mode. In this case my component built on 10.8 is not found. Basically my audio unit is found just through the AudioComponent dictionary, and I think that Live still uses the old school, component method, so it doesn't find it.
Either I am doing something wrong with Xcode 4.5, but I don't think so, or the Core Audio SDK that I have downloaded is just able to generate "new school" plugins.I have found this guy who's also having the same problem:
http://46424.com/question/92624#.URfF4LSIDnM
Right now I have tried to compile (against all the possible Base SDKs) using the old Core Audio SDK files (COMPONENT_ENTRY), and still no luck using -comp or with ableton Live. Is problem somewhere else?
Staying in topic, another weird thing I will need to do in order to use a Carbon View will be to define CA_USE_AUDIO_PLUGIN_ONLY to 0 (used in ComponentBase.h and other file). This new seems the only way to let me use VIEW_COMPONENT_ENTRY in order to export the entry point for the Carbon view. I'd like someone who has already gotten through this to share his experience... if I dont find a solution soon, tomorrow I will try with the core audio newsletter...
What I have found out is that, while the old way of opening the audio units as Components relies on compiling (rezzing) the .r files containing the manufacturer type, subtype..etc.. strings, the new behavior is based on the AudioComponent entry in the plist file.
Auval seems to be able to open those plug-ins that have either one, or both of the previous scenarios in place. If the -comp (open as a component) argument is given to it, auval will try to open a plugin with the old component mode. In this case my component built on 10.8 is not found. Basically my audio unit is found just through the AudioComponent dictionary, and I think that Live still uses the old school, component method, so it doesn't find it.
Either I am doing something wrong with Xcode 4.5, but I don't think so, or the Core Audio SDK that I have downloaded is just able to generate "new school" plugins.I have found this guy who's also having the same problem:
http://46424.com/question/92624#.URfF4LSIDnM
Right now I have tried to compile (against all the possible Base SDKs) using the old Core Audio SDK files (COMPONENT_ENTRY), and still no luck using -comp or with ableton Live. Is problem somewhere else?
Staying in topic, another weird thing I will need to do in order to use a Carbon View will be to define CA_USE_AUDIO_PLUGIN_ONLY to 0 (used in ComponentBase.h and other file). This new seems the only way to let me use VIEW_COMPONENT_ENTRY in order to export the entry point for the Carbon view. I'd like someone who has already gotten through this to share his experience... if I dont find a solution soon, tomorrow I will try with the core audio newsletter...
-
- KVRer
- 20 posts since 14 Dec, 2012
Now, I've never implemented this stuff so I could be wrong, but as I understand it hosts only communicate with audio units through the audio unit API defined in the AudioUnit Framework (see AudioComponent.h and AUComponent.h) - meaning that OS X actually implements the mechanics of connecting host programs and .component bundles. While a new implementation of these mechanics was added in 10.7 using the AudioComponent dictionary in the .component bundle's info.plist file, this didn't actually require any changes from the host's point of view - a host still just calls things like AudioComponentGetNext() to look through a list of available AU's (as returned by OS X) and AudioComponentInstanceNew() to make a new instance of a particular AU. The only thing that changed is how OS X implements these functions in v10.7+, meaning that the method used to find and load an AU (component manager resource file or AudioComponent dictionary) depends only on the version of OS X (and thus the AudioUnit Framework) you are currently running, and has nothing to do with which host or which version of a host program you are using.
The only thing I can recommend (and this may not have been the issue with the original post as the auval output suggests they were OK on this) is to make sure you respect Apple's magical "Maufacturer: Plug-in name" formatting for your component .rsrc file's Name ID (usually defined using a #define NAME "Manufacturer: Plug-in name" macro in your .r resource file), and probably the Name field of the AudioComponent dictionary as well. Auval and the default AU GUI both parse this string into two parts based on the ":" - Manufacturer string and audio unit name. While this may seem harmless / unimportant, some hosts sort their AU listing by parsing this string into these two parts, and won't display your AU if the string doesn't parse correctly and both parts aren't found (Live 8.3.4, 32-bit does this, for example) .
If you have that formatted correctly, I'm not sure what more to suggest at the moment...
The only thing I can recommend (and this may not have been the issue with the original post as the auval output suggests they were OK on this) is to make sure you respect Apple's magical "Maufacturer: Plug-in name" formatting for your component .rsrc file's Name ID (usually defined using a #define NAME "Manufacturer: Plug-in name" macro in your .r resource file), and probably the Name field of the AudioComponent dictionary as well. Auval and the default AU GUI both parse this string into two parts based on the ":" - Manufacturer string and audio unit name. While this may seem harmless / unimportant, some hosts sort their AU listing by parsing this string into these two parts, and won't display your AU if the string doesn't parse correctly and both parts aren't found (Live 8.3.4, 32-bit does this, for example) .
If you have that formatted correctly, I'm not sure what more to suggest at the moment...
-
- KVRer
- 20 posts since 14 Dec, 2012
Also, I'm still on 10.6 so I don't have the 10.7+ AudioUnit frameworks and don't know if the actual API itself changed at some point, which would mess with what I just said.
Maybe you can post an auval output? I'm curious about this sort of thing because it can be such a headache and it's good to know about the possible hang-ups.
Maybe you can post an auval output? I'm curious about this sort of thing because it can be such a headache and it's good to know about the possible hang-ups.
-
- KVRian
- 628 posts since 18 May, 2010
In case anyone stumbles on this thread: if you build Apple's AudioUnitInstrumentExample a.k.a. SinSynth with XCode 4.3 or higher and AULab sees it, auval accepts it, but Logic doesn't see it, it's because you've got to include the .r file in the final product. Just click on SinSynth.r and add it to the targets. I did get some Rez compilation errors, but they can be fixed by changing a path or copying the required bits from the included .r.
You've also got to define X86_64 in your .r (or in the Build Settings), otherwise AULab and auval think it is 64 bit, but Logic will think it is 32 bit.
The reason seems to be that Logic 9 looks in the resources of the plugin, while AULab and auval are more modern and look in the plist's AudioComponent entry. They also call different entry points (but this is taken care of by the AUDIOUNIT_COMPONENT macro).
Apple's documentation sucked a bit, so I got most of this from various websites.
Good luck with future versions...
You've also got to define X86_64 in your .r (or in the Build Settings), otherwise AULab and auval think it is 64 bit, but Logic will think it is 32 bit.
The reason seems to be that Logic 9 looks in the resources of the plugin, while AULab and auval are more modern and look in the plist's AudioComponent entry. They also call different entry points (but this is taken care of by the AUDIOUNIT_COMPONENT macro).
Apple's documentation sucked a bit, so I got most of this from various websites.
Good luck with future versions...
-
- KVRer
- 20 posts since 14 Dec, 2012
Interesting. So does this necessarily mean that Logic 9 is interacting with the component manager directly and not using the AudioComponent API calls?
Logic 9 was released at about the same time as OS X 10.6, when the AudioComponent API was introduced. I suppose it's possible they didn't update Logic to use it at the time, but that's a bit surprising to me. In any case, it's good to be aware that some hosts may still be relying on the component manager API, which means that they require audio units to be registered with the component manager in order for them to be found and used, regardless of the version of OS X that is running.
According to the Audio Unit Programming Guide, the component manager automatically registers AUs in the typical system folder - I imagine it does this by examining the .rsrc carbon resource file in each .component bundle, thus explaining why this file is necessary for the audio unit to show up. This resource file publishes the old entry point, which has been kept compatible with the component manager.
Logic 9 was released at about the same time as OS X 10.6, when the AudioComponent API was introduced. I suppose it's possible they didn't update Logic to use it at the time, but that's a bit surprising to me. In any case, it's good to be aware that some hosts may still be relying on the component manager API, which means that they require audio units to be registered with the component manager in order for them to be found and used, regardless of the version of OS X that is running.
According to the Audio Unit Programming Guide, the component manager automatically registers AUs in the typical system folder - I imagine it does this by examining the .rsrc carbon resource file in each .component bundle, thus explaining why this file is necessary for the audio unit to show up. This resource file publishes the old entry point, which has been kept compatible with the component manager.
-
- KVRer
- 25 posts since 12 Jan, 2008
I don't know of any hosts that use the new calls other than AU Lab.Conjecture wrote:Interesting. So does this necessarily mean that Logic 9 is interacting with the component manager directly and not using the AudioComponent API calls?
The docs aren't totally clear on this, but the old calls *will not* find new style plug ins. If the host used the new calls, they would still see old style plug ins, though.
-
- KVRer
- 20 posts since 14 Dec, 2012
I've never checked, so that's a surprise to me. I would have thought hosts would have updated to use the "new" API by now - it's not that new anymore... although if plug-in developers continue to support the component manager, I guess hosts don't gain much by updating.
-
guillaumegales guillaumegales https://www.kvraudio.com/forum/memberlist.php?mode=viewprofile&u=306931
- KVRer
- 1 posts since 13 Jun, 2013
Hi, I get the Rez compilation errors too but I can't find the path to be changed. Is that the CarbonCore headers ? I can't find them in OS X 10.8 Or maybe I'm doing something wrong :/
Thanks for your help.
Thanks for your help.
FLWrd wrote:In case anyone stumbles on this thread: if you build Apple's AudioUnitInstrumentExample a.k.a. SinSynth with XCode 4.3 or higher and AULab sees it, auval accepts it, but Logic doesn't see it, it's because you've got to include the .r file in the final product. Just click on SinSynth.r and add it to the targets. I did get some Rez compilation errors, but they can be fixed by changing a path or copying the required bits from the included .r.
You've also got to define X86_64 in your .r (or in the Build Settings), otherwise AULab and auval think it is 64 bit, but Logic will think it is 32 bit.
The reason seems to be that Logic 9 looks in the resources of the plugin, while AULab and auval are more modern and look in the plist's AudioComponent entry. They also call different entry points (but this is taken care of by the AUDIOUNIT_COMPONENT macro).
Apple's documentation sucked a bit, so I got most of this from various websites.
Good luck with future versions...