support AudioUnit Generators without global Channel Info
This commit is contained in:
parent
10e183f518
commit
e070701f14
@ -348,6 +348,42 @@ int CAAudioUnit::GetChannelInfo (AUChannelInfo** chaninfo, UInt32& cnt)
|
|||||||
{
|
{
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
else if (Comp().Desc().IsGenerator() || Comp().Desc().IsMusicDevice()) {
|
||||||
|
// directly query Bus Formats
|
||||||
|
// Note that that these may refer to different subBusses
|
||||||
|
// (eg. Kick, Snare,.. on a Drummachine)
|
||||||
|
// eventually the Bus-Name for each configuration should be exposed
|
||||||
|
// for the User to select..
|
||||||
|
|
||||||
|
UInt32 elCountIn, elCountOut, elCount;
|
||||||
|
|
||||||
|
if (GetElementCount (kAudioUnitScope_Input, elCountIn)) return 1;
|
||||||
|
if (GetElementCount (kAudioUnitScope_Output, elCountOut)) return 1;
|
||||||
|
|
||||||
|
elCount = std::max(elCountIn, elCountOut);
|
||||||
|
|
||||||
|
*chaninfo = (AUChannelInfo*) malloc (sizeof (AUChannelInfo) * elCount);
|
||||||
|
|
||||||
|
for (unsigned int i = 0; i < elCountIn; ++i) {
|
||||||
|
UInt32 numChans;
|
||||||
|
if (NumberChannels (kAudioUnitScope_Input, i, numChans)) return 1;
|
||||||
|
(*chaninfo)[i].inChannels = numChans;
|
||||||
|
}
|
||||||
|
for (unsigned int i = elCountIn; i < elCount; ++i) {
|
||||||
|
(*chaninfo)[i].inChannels = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
for (unsigned int i = 0; i < elCountOut; ++i) {
|
||||||
|
UInt32 numChans;
|
||||||
|
if (NumberChannels (kAudioUnitScope_Output, i, numChans)) return 1;
|
||||||
|
(*chaninfo)[i].outChannels = numChans;
|
||||||
|
}
|
||||||
|
for (unsigned int i = elCountOut; i < elCount; ++i) {
|
||||||
|
(*chaninfo)[i].outChannels = 0;
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
// the au should either really tell us about this
|
// the au should either really tell us about this
|
||||||
|
@ -1037,7 +1037,11 @@ AUPlugin::can_support_io_configuration (const ChanCount& in, ChanCount& out)
|
|||||||
//configurations in most cases. so first lets see
|
//configurations in most cases. so first lets see
|
||||||
//if there's a configuration that keeps out==in
|
//if there's a configuration that keeps out==in
|
||||||
|
|
||||||
|
if (in.n_midi() > 0 && audio_in == 0) {
|
||||||
|
audio_out = -1;
|
||||||
|
} else {
|
||||||
audio_out = audio_in;
|
audio_out = audio_in;
|
||||||
|
}
|
||||||
|
|
||||||
for (vector<pair<int,int> >::iterator i = io_configs.begin(); i != io_configs.end(); ++i) {
|
for (vector<pair<int,int> >::iterator i = io_configs.begin(); i != io_configs.end(); ++i) {
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user