//============================================================================= // 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; } }
//============================================================================= // 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); }