//=============================================================================
//	CAAudioChannelLayout::CAAudioChannelLayout
//=============================================================================
CAAudioChannelLayout::CAAudioChannelLayout (UInt32 inNumberChannels, bool inChooseSurround)
{
		// this chooses default layouts based on the number of channels...
	UInt32 theSize = CalculateByteSize (inNumberChannels);

	mLayoutHolder = new ACLRefCounter (theSize);

	AudioChannelLayout* layout = mLayoutHolder->GetLayout();

	layout->mNumberChannelDescriptions = inNumberChannels;

	switch (inNumberChannels)
	{
		case 1:
			layout->mChannelLayoutTag = kAudioChannelLayoutTag_Mono;
			break;
		case 2:
			layout->mChannelLayoutTag = inChooseSurround ? kAudioChannelLayoutTag_Binaural : kAudioChannelLayoutTag_Stereo;
			break;
		case 4:
			layout->mChannelLayoutTag = inChooseSurround ? kAudioChannelLayoutTag_Ambisonic_B_Format : kAudioChannelLayoutTag_AudioUnit_4;
			break;
		case 5:
			layout->mChannelLayoutTag = inChooseSurround ? kAudioChannelLayoutTag_AudioUnit_5_0 : kAudioChannelLayoutTag_AudioUnit_5;
			break;
		case 6:
			layout->mChannelLayoutTag = inChooseSurround ? kAudioChannelLayoutTag_AudioUnit_6_0 : kAudioChannelLayoutTag_AudioUnit_6;
			break;
		case 7:
			layout->mChannelLayoutTag = kAudioChannelLayoutTag_AudioUnit_7_0;
			break;
		case 8:
			layout->mChannelLayoutTag = kAudioChannelLayoutTag_AudioUnit_8;
			break;
		default:
			// here we have a "broken" layout, in the sense that we haven't any idea how to lay this out
			// the layout itself is all set to zeros
			// ### no longer true ###
			SetAllToUnknown(*layout, inNumberChannels);
			break;
	}
}
예제 #2
0
//=============================================================================
//	CAAudioChannelLayout::CAAudioChannelLayout
//=============================================================================
CAAudioChannelLayout::CAAudioChannelLayout (UInt32 inNumberChannels, bool inChooseSurround)
{
		// this chooses default layouts based on the number of channels...
	AudioChannelLayoutTag tag;

	switch (inNumberChannels)
	{
		default:
			// here we have a "broken" layout, in the sense that we haven't any idea how to lay this out
			mLayout = RefCountedLayout::CreateWithNumberChannelDescriptions(inNumberChannels);
			SetAllToUnknown(*mLayout->GetLayout(), inNumberChannels);
			return; // don't fall into the tag case
		case 1:
			tag = kAudioChannelLayoutTag_Mono;
			break;
		case 2:
			tag = inChooseSurround ? kAudioChannelLayoutTag_Binaural : kAudioChannelLayoutTag_Stereo;
			break;
		case 4:
			tag = inChooseSurround ? kAudioChannelLayoutTag_Ambisonic_B_Format : kAudioChannelLayoutTag_AudioUnit_4;
			break;
		case 5:
			tag = inChooseSurround ? kAudioChannelLayoutTag_AudioUnit_5_0 : kAudioChannelLayoutTag_AudioUnit_5;
			break;
		case 6:
			tag = inChooseSurround ? kAudioChannelLayoutTag_AudioUnit_6_0 : kAudioChannelLayoutTag_AudioUnit_6;
			break;
		case 7:
			tag = kAudioChannelLayoutTag_AudioUnit_7_0;
			break;
		case 8:
			tag = kAudioChannelLayoutTag_AudioUnit_8;
			break;
	}

	mLayout = RefCountedLayout::CreateWithLayoutTag(tag);
}