*Christian

Sent from my iPhone

> On 23 May 2015, at 13:51, Christian Rober <[email protected]> wrote:
> 
> Glad its working now.  :)
> 
> One last thing: Since you inherit off of AUEffectBase and not just AUBase, 
> SetParameter will call AUEffectBase's implementation, which is just a wrapper 
> around the Globals->SetParameter() call (check out AUEffectBase.h).  I had 
> missed this detail originally, as I no longer use AUEffectBase and had 
> forgotten about it's interface.  In AUBase, there is just the 5 parameter 
> virtual SetParameter method.  AudioUnits inheriting off of AUBase can 
> override that directly and need to explicitly specify calls to 
> Globals()->SetParameter.
> 
> Note: AUEffectBase declares a "using" declaration with respect to 
> AUBase::SetParameter.  This is what allows a derived class to call both 
> versions.  Without the using declaration, AUEffectBase's override would hide 
> AUBase's function.
> 
> I think this explains both my initial analysis and the behavior you are 
> seeing.  I just wanted to share this with the general audience, in case 
> someone in the future gets confused by the method overloading of 
> SetParameter, though it is probably covered elsewhere in the list history.
> 
> --Christian
> 
>> On Sat, May 23, 2015 at 7:53 AM, Farhan Mannan <[email protected]> wrote:
>> Thank you very much Christian.
>> 
>> Correctly setting kNumberOfParameters to 1 now allows the Audio Unit to get 
>> to the "render” stage of AUVal without crashing - haha.
>> 
>> Will check out SetParameter - in the example TremoloUnit it is used with two 
>> arguments like so:
>> 
>>      SetParameter (
>>              kParameter_Frequency, 
>>              kDefaultValue_Tremolo_Freq 
>>      );
>>         
>>      SetParameter (
>>              kParameter_Depth, 
>>              kDefaultValue_Tremolo_Depth 
>>      );
>>         
>>      SetParameter (
>>              kParameter_Waveform, 
>>              kDefaultValue_Tremolo_Waveform 
>>      );
>> 
>>> On 23 May 2015, at 04:04, Christian Rober <[email protected]> wrote:
>>> 
>>> Without testing it, your constructor seems to be throwing an exception 
>>> (Open is a dispatched call to your constructor that catches any exceptions 
>>> and returns them as normal OSStatus errors, see ComponentBase.cpp).  The 
>>> exception looks like it wraps an invalid parameter error (10878, seen in 
>>> AUComponent.h).
>>> 
>>> I think this exception is being thrown in your call to SetParameter.  My 
>>> first thought is that your kNumberOfParameters is set to 0.  With no 
>>> parameters reserved, trying to set one will throw that exact 
>>> error/exception above.
>>> 
>>> The other part of this is that you are accidentally calling SetParameter on 
>>> AUBase/YourClass and not the global scope.  Though, from the code you 
>>> shared, I don't even know how a 2 parameter SetParameter call to the base 
>>> class would even compile.
>>> 
>>> I imagine the constructor body should look more like this:
>>> 
>>> Hardgainer::Hardgainer (AudioUnit component) : AUEffectBase (component) {
>>>     CreateElements ();
>>>     Globals () -> UseIndexedParameters (kNumberOfParameters); // <-- Should 
>>> be non-zero
>>>     Globals () -> SetParameter (
>>>                                                     kParameter_Gain,
>>>                                                     kDefaultValue_Gain
>>>                                                     ); // <-- Need more 
>>> arguments if calling AUBase::SetParameter.
>>>     ….
>>> 
>>> Note: The indexed parameter gets created in global scope by setting it on 
>>> the global element first.  Only after this initial global setting can it be 
>>> safely used by the AU.
>>> 
>>> --Christian
>>> 
>>> 
>>>> On Fri, May 22, 2015 at 7:38 PM, Farhan Mannan <[email protected]> 
>>>> wrote:
>>>> I have used the current audio unit tutorial (1) with a bit of tinkering to 
>>>> create an Xcode project (2) that successfully builds a component but I 
>>>> can’t get it to validate. AUVal gives me error -10878. (3)
>>>> 
>>>> I started in Xcode from the 'OS X > System Plug-in > Generic C++ plugin’ 
>>>> template and copied all the methods in the tutorial for making the sample 
>>>> audio unit (TremoloUnit) as well as a couple of methods that were in the 
>>>> downloadable sample audio unit that seemed necessary to get it to build - 
>>>> essentially trying to mimic the mythical audio unit template that the 
>>>> guide refers to, but which is no longer available in Xcode and has been 
>>>> unavailable for some time.
>>>> 
>>>> I think I have ended up implementing a version of every method in the 
>>>> sample audio unit so I’m now stuck as to why it doesn’t validate. I 
>>>> understand that the DSP code may be totally useless (it’s only meant to be 
>>>> a gain plugin) but the thing won’t even open.
>>>> 
>>>> Any suggestions?
>>>> 
>>>> Even if this project isn’t salvageable in its current form, is there 
>>>> another way I can go about starting to write audio units?
>>>> 
>>>> (1) 
>>>> https://developer.apple.com/library/mac/documentation/MusicAudio/Conceptual/AudioUnitProgrammingGuide/TheAudioUnit/TheAudioUnit.html#//apple_ref/doc/uid/TP40003278-CH12-SW1
>>>> 
>>>> (2) https://github.com/farhanmannan/hardgainer
>>>> 
>>>> (3) https://gist.github.com/farhanmannan/d5a83910d0b2f18840c1
>>>> 
>>>>  _______________________________________________
>>>> Do not post admin requests to the list. They will be ignored.
>>>> Coreaudio-api mailing list      ([email protected])
>>>> Help/Unsubscribe/Update your Subscription:
>>>> https://lists.apple.com/mailman/options/coreaudio-api/recapitch%40gmail.com
>>>> 
>>>> This email sent to [email protected]
> 
 _______________________________________________
Do not post admin requests to the list. They will be ignored.
Coreaudio-api mailing list      ([email protected])
Help/Unsubscribe/Update your Subscription:
https://lists.apple.com/mailman/options/coreaudio-api/archive%40mail-archive.com

This email sent to [email protected]

Reply via email to