• Open Menu Close Menu
  • Apple
  • Shopping Bag
  • Apple
  • Mac
  • iPad
  • iPhone
  • Watch
  • TV
  • Music
  • Support
  • Search apple.com
  • Shopping Bag

Lists

Open Menu Close Menu
  • Terms and Conditions
  • Lists hosted on this site
  • Email the Postmaster
  • Tips for posting to public mailing lists
RE: Audio Units - newbie questions
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

RE: Audio Units - newbie questions


  • Subject: RE: Audio Units - newbie questions
  • From: "Muon Software Ltd - Dave" <email@hidden>
  • Date: Wed, 12 Oct 2005 11:57:39 +0100
  • Importance: Normal

Olivier - that looks startlingly similar to my current code - the code which
Bill says won't work :-)


ComponentResult CMuonTachyon::Render( AudioUnitRenderActionFlags
&ioActionFlags,
							 const AudioTimeStamp  &inTimeStamp,
										   UInt32  nFrames )
{
	ComponentResult result = noErr;

	//prepare the output busses
	int nNumBusses=Outputs().GetNumberOfElements();

	int i=0;
	for (i=0;i<nNumBusses;i++)
	{
		GetOutput(i)->PrepareBuffer(nFrames);
	}

	if (nFrames>(UInt32)m_nBlockSize)
	{
		//is this likely to happen?
		m_nBlockSize=(int)GetMaxFramesPerSlice();

		getLock();

				m_ptrSynth->reset((int)m_fSampleRate,m_nBlockSize);

		releaseLock();
	}


	//populate our list of buffers
	if (nNumBusses==1)
	{
		//got a single output buss
		AUOutputElement* ptrOutput = GetOutput(0);
		AudioBufferList& bufferList = ptrOutput->GetBufferList();

		//find out how many buffers this bus contains
		UInt32 nBuffers=bufferList.mNumberBuffers;

		if (nBuffers==1)
		{
			//bus contains a single (mono) buffer

			memset((float*)bufferList.mBuffers[0].mData,0,nFrames*sizeof(float));

			for (i=0;i<kNumOutputs;i++)
			{
				//use the same buffer pointer for all our outputs
				m_ptrAudioBuffers[i]=(float*)bufferList.mBuffers[0].mData;
			}
		}
		else if (nBuffers==2)
		{
			//bus is stereo

			memset((float*)bufferList.mBuffers[0].mData,0,nFrames*sizeof(float));
			memset((float*)bufferList.mBuffers[1].mData,0,nFrames*sizeof(float));

			for (i=0;i<kNumOutputs;i+=2)
			{
				//use the pair of buffer pointers for all our buffers
				m_ptrAudioBuffers[i]=(float*)bufferList.mBuffers[0].mData;
				m_ptrAudioBuffers[i+1]=(float*)bufferList.mBuffers[1].mData;
			}
		}
		else
		{
			return kAudioUnitErr_FormatNotSupported;
		}
	}
	else if (nNumBusses==kNumOutputs/2)
	{
		//looks like we have multiple output busses

		int nOutputIndex=0;

		for (i=0;i<nNumBusses;i++)
		{
			AUOutputElement* ptrOutput = GetOutput(i);
			AudioBufferList& bufferList = ptrOutput->GetBufferList();

			//find out how many buffers this bus contains
			UInt32 nBuffers=bufferList.mNumberBuffers;

			if (nBuffers==1)
			{
				//bus contains a single (mono) buffer

				memset((float*)bufferList.mBuffers[0].mData,0,nFrames*sizeof(float));

				m_ptrAudioBuffers[nOutputIndex]=(float*)bufferList.mBuffers[0].mData;
				m_ptrAudioBuffers[nOutputIndex+1]=(float*)bufferList.mBuffers[0].mData;
				nOutputIndex+=2;
			}
			else if (nBuffers==2)
			{
				//bus is stereo

				memset((float*)bufferList.mBuffers[0].mData,0,nFrames*sizeof(float));
				memset((float*)bufferList.mBuffers[1].mData,0,nFrames*sizeof(float));

				m_ptrAudioBuffers[nOutputIndex]=(float*)bufferList.mBuffers[0].mData;
				m_ptrAudioBuffers[nOutputIndex+1]=(float*)bufferList.mBuffers[1].mData;
				nOutputIndex+=2;
			}
			else
			{
				return kAudioUnitErr_FormatNotSupported;
			}
		}
	}
	else
	{
		//this configuration isn't supported
		result = kAudioUnitErr_FormatNotSupported;
	}

	if (result==noErr)
	{
		if (m_bInitialised==false || m_ptrSynth->queryState()==false)
		{
			//accumulating mode...
			m_ptrSynth->generate_empty(false,(int)nFrames, m_ptrAudioBuffers);
		}
		else
		{
			getLock();

				updateTempo();

				//accumulating mode...
				m_ptrSynth->generate_synth(false, (int)nFrames, m_ptrAudioBuffers);

				//update the editor with any MIDI-driven parameter changes
				processParameterChanges();

			releaseLock();
		}
	}

	return result;
};

 _______________________________________________
Do not post admin requests to the list. They will be ignored.
Coreaudio-api mailing list      (email@hidden)
Help/Unsubscribe/Update your Subscription:

This email sent to email@hidden

  • Follow-Ups:
    • Re: Audio Units - newbie questions
      • From: Olivier Tristan <email@hidden>
References: 
 >Re: Audio Units - newbie questions (From: Olivier Tristan <email@hidden>)

  • Prev by Date: Re: Audio Units - newbie questions
  • Next by Date: Re: Audio Units - newbie questions
  • Previous by thread: Re: Audio Units - newbie questions
  • Next by thread: Re: Audio Units - newbie questions
  • Index(es):
    • Date
    • Thread