AU Validation failed with mono to Stereo ChannelConfig


#1

I used juce-source from SVN.
I changed the ChannelConfiguration from the AudioUnit demo plugin to { 1, 1 }, { 1, 2 }, { 2, 2 }
AU validation fails:
Did i forget something to change?

[code]


     AU Validation Tool
     Version: 1.2.0a11 
     Copyright 2003-2007, Apple, Inc. All Rights Reserved.

     Specify -h (-help) for command options


VALIDATING AUDIO UNIT: ‘aufx’ - ‘JcDm’ - ‘RawM’

Manufacturer String: Raw Material Software
AudioUnit name: Juce Demo Plugin
Component Info: A Demo Plugin demonstrating Juce
Component Version: 1.1.0 (0x10100)
Component’s Bundle Version: 1.0.0

    • PASS

TESTING OPEN TIMES:
COLD:
Time to open AudioUnit: 72.048 ms
WARM:
Time to open AudioUnit: 0.022 ms
FIRST TIME:
Time for initialization: 0.009 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

ERROR: Default Format of unit does not match reported Channel handling capabilities

    • FAIL

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 Supported Number of Channels
PASS
VERIFYING PROPERTY Host Callbacks
PASS

    • PASS

VERIFYING SPECIAL PROPERTIES:

VERIFYING CUSTOM UI
Carbon View Components Available: 1
auvw JcDm RawM - Raw Material Software: Juce Demo Plugin View
PASS

Cocoa Views Available: 0

VERIFYING CLASS INFO
PASS

TESTING HOST CALLBACKS
PASS

    • PASS

PUBLISHED PARAMETER INFO:

# # 1 Global Scope Parameters:

Parameter ID:0
Name: gain
Parameter Type: Generic
Values: Minimum = 0.000000, Default = 0.000000, Maximum = 1.000000
Flags: Readable, Writable
-parameter PASS

Testing that parameters retain value across reset and initialization
PASS

    • PASS

FORMAT TESTS:

Reported Channel Capabilities (explicit):

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

WARNING: Can Initialize Unit to un-supported num channels:InputChan:1, OutputChan:1
WARNING: Can Initialize Unit to un-supported num channels:InputChan:1, OutputChan:2
WARNING: Can Initialize Unit to un-supported num channels:InputChan:2, OutputChan:2
ERROR: Unit now reports it cannot support default channel configuration (it previously reported that it did): in:2, out:2

    • FAIL

RENDER TESTS:
ERROR: Format errors. Cannot perform render tests

    • FAIL

AU VALIDATION FAILED: CORRECT THE ERRORS ABOVE.
--------------------------------------------------[/code]


#2

looks a bit obscure - I’ll have to take a look at that one. You say it works with {1, 1}, {2, 2} ?


#3

yes, {1, 1}, {2, 2} is working
i tried to debug but there a lots of calls that auval does… ( and the Xcode debugger is a little bit painful )


#4

Very strange. I’ll take a look soon.


#5

the problem happens always when there are more then two channel-configurations.

{ 1,2 } { 2,2 } is working too.


#6

this seems to work:

[code] UInt32 SupportedNumChannels (const AUChannelInfo** outInfo)
{
// You need to actually add some configurations to the JucePlugin_PreferredChannelConfigurations
// value in your JucePluginCharacteristics.h file…
jassert (numChannelConfigs > 0);

	static const AUChannelInfo sChannels[numChannelConfigs] = {  JucePlugin_PreferredChannelConfigurations };
	if (outInfo) *outInfo = sChannels;
	return numChannelConfigs;
}[/code]

#7

ah - I assumed it always supplied that array… Thanks, I’ll make that change.


#8

This should work as well, right?

[code] UInt32 SupportedNumChannels (const AUChannelInfo** outInfo)
{
// You need to actually add some configurations to the JucePlugin_PreferredChannelConfigurations
// value in your JucePluginCharacteristics.h file…
jassert (numChannelConfigs > 0);

    if (outInfo != 0)
    {
        *outInfo = channelInfo;

        for (int i = 0; i < numChannelConfigs; ++i)
        {

#if JucePlugin_IsSynth
channelInfo[i].inChannels = 0;
#else
channelInfo[i].inChannels = channelConfigs[i][0];
#endif
channelInfo[i].outChannels = channelConfigs[i][1];
}
}

    return numChannelConfigs;
}

[/code]

You were leaving out the synth-handling stuff, which is actually important.


#9

Yes, that works too!


#10