1
0
Fork 0
mirror of https://github.com/juce-framework/JUCE.git synced 2026-01-10 23:44:24 +00:00

Added a convenient function to get all channel sets with a particular number of channels

This commit is contained in:
hogliux 2016-10-29 17:20:55 +01:00
parent f415b09c7b
commit 7cdcb19d25
3 changed files with 80 additions and 6 deletions

View file

@ -277,3 +277,60 @@ AudioChannelSet AudioChannelSet::namedChannelSet (int numChannels)
return AudioChannelSet();
}
Array<AudioChannelSet> AudioChannelSet::channelSetsWithNumberOfChannels (int numChannels)
{
Array<AudioChannelSet> retval;
if (numChannels != 0)
{
retval.add (AudioChannelSet::discreteChannels (numChannels));
if (numChannels == 1)
{
retval.add (AudioChannelSet::mono());
}
else if (numChannels == 2)
{
retval.add (AudioChannelSet::stereo());
}
else if (numChannels == 3)
{
retval.add (AudioChannelSet::createLCR());
retval.add (AudioChannelSet::createLRS());
}
else if (numChannels == 4)
{
retval.add (AudioChannelSet::quadraphonic());
retval.add (AudioChannelSet::createLCRS());
retval.add (AudioChannelSet::ambisonic());
}
else if (numChannels == 5)
{
retval.add (AudioChannelSet::create5point0());
retval.add (AudioChannelSet::pentagonal());
}
else if (numChannels == 6)
{
retval.add (AudioChannelSet::create5point1());
retval.add (AudioChannelSet::create6point0());
retval.add (AudioChannelSet::create6point0Music());
retval.add (AudioChannelSet::hexagonal());
}
else if (numChannels == 7)
{
retval.add (AudioChannelSet::create7point0());
retval.add (AudioChannelSet::create7point0SDDS());
retval.add (AudioChannelSet::create6point1());
retval.add (AudioChannelSet::create6point1Music());
}
else if (numChannels == 8)
{
retval.add (AudioChannelSet::create7point1());
retval.add (AudioChannelSet::create7point1SDDS());
retval.add (AudioChannelSet::octagonal());
}
}
return retval;
}

View file

@ -251,6 +251,9 @@ public:
function returns an empty set.*/
static AudioChannelSet namedChannelSet (int numChannels);
/** Return an array of channel sets which have a given number of channels */
static Array<AudioChannelSet> channelSetsWithNumberOfChannels (int numChannels);
//==============================================================================
/** Represents different audio channel types. */
enum ChannelType

View file

@ -1157,19 +1157,33 @@ bool AudioProcessor::Bus::isNumberOfChannelsSupported (int channels) const
{
if (channels == 0) return isLayoutSupported(AudioChannelSet::disabled());
return isLayoutSupported (supportedLayoutWithChannels (channels));
const AudioChannelSet set = supportedLayoutWithChannels (channels);
return (! set.isDisabled()) && isLayoutSupported (set);
}
AudioChannelSet AudioProcessor::Bus::supportedLayoutWithChannels (int channels) const
{
if (channels == 0) return AudioChannelSet::disabled();
AudioChannelSet set;
if (! (set = AudioChannelSet::namedChannelSet (channels)).isDisabled() && isLayoutSupported (set))
return set;
{
AudioChannelSet set;
if (! (set = AudioChannelSet::namedChannelSet (channels)).isDisabled() && isLayoutSupported (set))
return set;
if (! (set = AudioChannelSet::discreteChannels (channels)).isDisabled() && isLayoutSupported (set))
return set;
if (! (set = AudioChannelSet::discreteChannels (channels)).isDisabled() && isLayoutSupported (set))
return set;
}
Array<AudioChannelSet> sets = AudioChannelSet::channelSetsWithNumberOfChannels (channels);
const int n = sets.size();
for (int i = 0; i < n; ++i)
{
const AudioChannelSet set = sets.getReference (i);
if (isLayoutSupported (set))
return set;
}
return AudioChannelSet::disabled();
}