//_____________________________________________________________________________ // UInt32 AUPannerBase::GetAudioChannelLayout( AudioUnitScope inScope, AudioUnitElement inElement, AudioChannelLayout * outLayoutPtr, Boolean & outWritable) { SetDefaultChannelLayoutsIfNone(); outWritable = true; CAAudioChannelLayout* caacl = NULL; switch (inScope) { case kAudioUnitScope_Input: caacl = &mInputLayout; break; case kAudioUnitScope_Output: caacl = &mOutputLayout; break; default: COMPONENT_THROW(kAudioUnitErr_InvalidScope); } if (inElement != 0) COMPONENT_THROW(kAudioUnitErr_InvalidElement); UInt32 size = caacl->IsValid() ? caacl->Size() : 0; if (size > 0 && outLayoutPtr) memcpy(outLayoutPtr, &caacl->Layout(), size); return size; }
//============================================================================= // CAAudioChannelLayout::operator!= //============================================================================= bool CAAudioChannelLayout::operator!= (const CAAudioChannelLayout &c) const { if (mLayout == c.mLayout) return false; return !(Layout() == c.Layout()); }
OSStatus CAAudioUnit::SetChannelLayout (AudioUnitScope inScope, AudioUnitElement inEl, CAAudioChannelLayout &inLayout) { OSStatus result = AudioUnitSetProperty (AU(), kAudioUnitProperty_AudioChannelLayout, inScope, inEl, inLayout, inLayout.Size()); return result; }
// _______________________________________________________________________________________ // void CAAudioFile::SetConverterChannelLayout(bool output, const CAAudioChannelLayout &layout) { LOG_FUNCTION("CAAudioFile::SetConverterChannelLayout", "%p", this); OSStatus err; if (layout.IsValid()) { #if VERBOSE_CHANNELMAP printf("Setting converter's %s channel layout: %s\n", output ? "output" : "input", CAChannelLayouts::ConstantToString(mFileChannelLayout.Tag())); #endif if (output) { err = AudioConverterSetProperty(mConverter, kAudioConverterOutputChannelLayout, layout.Size(), &layout.Layout()); XThrowIf(err && err != kAudioConverterErr_OperationNotSupported, err, "couldn't set converter's output channel layout"); } else { err = AudioConverterSetProperty(mConverter, kAudioConverterInputChannelLayout, layout.Size(), &layout.Layout()); XThrowIf(err && err != kAudioConverterErr_OperationNotSupported, err, "couldn't set converter's input channel layout"); } if (mMode == kPreparingToWrite) FileFormatChanged(); } }
//============================================================================= // CAAudioChannelLayout::operator== //============================================================================= bool CAAudioChannelLayout::operator== (const CAAudioChannelLayout &c) const { if (mLayout == c.mLayout) return true; return Layout() == c.Layout(); }
void CAAudioFileConverter::OpenOutputFile(const CAStreamBasicDescription &srcFormat, const CAStreamBasicDescription &destFormat, FSRef &destFSRef, CAAudioChannelLayout &destFileLayout) { const ConversionParameters ¶ms = mParams; // output file if (params.output.filePath == NULL) { GenerateOutputFileName(params.input.filePath, srcFormat, destFormat, params.output.fileType, mOutName); } else strcpy(mOutName, params.output.filePath); // deal with pre-existing output file if (FSPathMakeRef((UInt8 *)mOutName, &destFSRef, NULL) == noErr) { XThrowIf(!(params.flags & kOpt_OverwriteOutputFile), 1, "overwrite output file"); // not allowed to overwrite // output file exists - delete it XThrowIfError(FSDeleteObject(&destFSRef), "delete output file"); } // get FSRef/CFStringRef for output file FSRef outFolderFSRef; CFStringRef outFileName; XThrowIfError(PosixPathToParentFSRefAndName(mOutName, outFolderFSRef, outFileName), "locate output audio file"); // create the output file mDestFile.CreateNew(outFolderFSRef, outFileName, params.output.fileType, destFormat, &destFileLayout.Layout()); CFRelease(outFileName); }