void	CAAudioFileReader::ReadBuffer(FileReadBuffer *b)
{
	b->SetEmpty();
	CABufferList *ioMemory = b->GetBufferList();
	CABufferList *fileBuffers = GetBufferList();
	fileBuffers->SetFrom(ioMemory);
	UInt32 nFrames = GetBufferSizeFrames();
	SInt64 curFrame = mFile->Tell();
	mFile->Read(nFrames, &fileBuffers->GetModifiableBufferList());
	b->UpdateAfterRead(curFrame, nFrames);
}
Ejemplo n.º 2
0
void	CAAudioFileRecorder::SetFile(const FSRef &parentFSRef, CFStringRef filename, AudioFileTypeID filetype, const CAStreamBasicDescription &dataFormat, const CAAudioChannelLayout *layout)
{
	delete mAudioInputPtrs; mAudioInputPtrs = NULL;
	
	CAStreamBasicDescription fileDataFormat = dataFormat;
	if (fileDataFormat.mSampleRate == 0.)
		fileDataFormat.mSampleRate = mInputDataFormat.mSampleRate;
	
	CAAudioFileWriter::SetFile(parentFSRef, filename, filetype, fileDataFormat, layout);

	const CAStreamBasicDescription &fmt = GetFile().GetClientDataFormat();
	XThrowIfError(AudioUnitSetProperty(
							mInputUnit,
							kAudioUnitProperty_StreamFormat,
							kAudioUnitScope_Output,
							1,
							(void *)&fmt,
							sizeof(AudioStreamBasicDescription)), "set audio input format");

	GetFile().SetIOBufferSizeBytes(GetBufferSizeFrames() * fmt.mBytesPerFrame);

	mAudioInputPtrs = CABufferList::New("audio input ptrs", fmt);
}