• 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: Sample Rate Conversion using AudioConverter
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Sample Rate Conversion using AudioConverter


  • Subject: Re: Sample Rate Conversion using AudioConverter
  • From: Tommy Braas <email@hidden>
  • Date: Mon, 9 Jun 2003 14:35:55 -0700

Bill,

You're a very funny guy! ;-)

So, I have set up some code to use the AudioConverterFillComplexBuffer and its callback.

New problems! I am probably setting something up incorrectly (or so I hope...). When the callback is called, the AudioBufferList.mBuffers[0].mData is NULL!

I have included the code below (Objective-C);

The file read method, with format conversion support;

ConversionInfo info;
info.audioFile = self;
info.fileOffset = offset;

UInt32 packetLength = *length/[_streamFormat bytesPerFrame]; // _streamFormat is the destination format, not the source file format

audioBuffer->mNumberChannels = [_streamFormat channelsPerFrame]; // audioBuffer is defined elsewhere
audioBuffer->mDataByteSize = *length;
audioBuffer->mData = outBytes;

bufferList->mNumberBuffers = 1; // bufferList is defined elsewhere
bufferList->mBuffers[0] = *audioBuffer;

packetDescription->mStartOffset = 0; // packetDescription is defined elsewhere
packetDescription->mLength = *length;

osStatus = AudioConverterFillComplexBuffer([converter converter], ReadAudioConverterInputDataProc,
&info,
&packetLength,
bufferList, NULL); // I have tried using both NULL (file is LPCM), and the above packetDescription


The callback;

OSStatus ReadAudioConverterInputDataProc( AudioConverterRef inAudioConverter,
UInt32* ioNumberDataPackets,
AudioBufferList* ioData,
AudioStreamPacketDescription** outDataPacketDescription,
void* inUserData)
{
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
[conversionInfo->audioFile readAudioConversionHandler:ioNumberDataPackets data:ioData packetDescription:outDataPacketDescription userData:inUserData];
[pool release];

return 0;
}

Could someone please tell what I am doing wrong...I am fresh out of ideas!

Thanks,

Tommy Braas


On Friday, Jun 6, 2003, at 18:49 US/Pacific, Bill Stewart wrote:

Ummm... sample rate conversion on imaginary sample values...

No - just because we'd run out of names (and the AudioBufferList is more complex than a void* blob of memory) - you should all be really thankful, we almost had to introduce AudioConverterFillReallyComplexBuffer :-) but we didn't:)

Bill

On Friday, June 6, 2003, at 12:27 PM, Tommy Braas wrote:

Bill and James,

Thank you very much for your answers!

I have one more question;

Does the 'complex' part of the AudioConverterFillComplexBuffer pertain to the buffers being complex (AudioBufferList*), or that it expects the values to be complex? Maybe a dumb question, but since the documentation leaves much to be desired, I feel compelled to ask.

Thanks again,

Tommy Braas


On Friday, Jun 6, 2003, at 11:31 US/Pacific, Bill Stewart wrote:

And we've fixed this in our next release - we'll be returning an error for these invalid uses of convert buffer (something we should have done but missed in Jaguar)

You might also look at the FillComplextBuffer version - if you are working with audio units (the V2 variety) then this takes and returns the data strcuture (AudioBufferList) that is used by these units... (If you're using a V1 unit, then the FillBuffer call is the appropriate one) - and if I'm confusing you - apologies! I'm confused myself sometimes:-)

Bill

On Friday, June 6, 2003, at 07:28 AM, James McCartney wrote:

You should not use AudioConverterConvertBuffer when you have a sample rate conversion. Use AudioConverterFillBuffer or AudioConverterFillComplexBuffer.

Because in a sample rate conversion the output samples depend on samples before and after them from the input, there is some internal buffering that must happen which requires that you use the pull model of these other conversion routines.

AudioConverterConvertBuffer is only for conversions where there is a 1:1 correspondence between input and output such as bit depth, endian swap, int<->float, (de)interleaving...


On Friday, June 6, 2003, at 01:00 AM, Tommy Braas wrote:

I have been trying to figure out how to properly feed an instance of AudioConverter using AudioConverterConvertBuffer(...).


-- --- james mccartney
_______________________________________________
coreaudio-api mailing list | email@hidden
Help/Unsubscribe/Archives: http://www.lists.apple.com/mailman/listinfo/coreaudio-api
Do not post admin requests to the list. They will be ignored.


-- mailto:email@hidden
tel: +1 408 974 4056

_____________________________________________________________________ _____
"Much human ingenuity has gone into finding the ultimate Before.
The current state of knowledge can be summarized thus:
In the beginning, there was nothing, which exploded" - Terry Pratchett
_____________________________________________________________________ _____
_______________________________________________
coreaudio-api mailing list | email@hidden
Help/Unsubscribe/Archives: http://www.lists.apple.com/mailman/listinfo/coreaudio-api
Do not post admin requests to the list. They will be ignored.
_______________________________________________
coreaudio-api mailing list | email@hidden
Help/Unsubscribe/Archives: http://www.lists.apple.com/mailman/listinfo/coreaudio-api
Do not post admin requests to the list. They will be ignored.


--
mailto:email@hidden
tel: +1 408 974 4056

_______________________________________________________________________ ___
"Much human ingenuity has gone into finding the ultimate Before.
The current state of knowledge can be summarized thus:
In the beginning, there was nothing, which exploded" - Terry Pratchett
_______________________________________________________________________ ___
_______________________________________________
coreaudio-api mailing list | email@hidden
Help/Unsubscribe/Archives: http://www.lists.apple.com/mailman/listinfo/coreaudio-api
Do not post admin requests to the list. They will be ignored.
_______________________________________________
coreaudio-api mailing list | email@hidden
Help/Unsubscribe/Archives: http://www.lists.apple.com/mailman/listinfo/coreaudio-api
Do not post admin requests to the list. They will be ignored.

  • Follow-Ups:
    • Re: Sample Rate Conversion using AudioConverter
      • From: Bill Stewart <email@hidden>
    • Re: Sample Rate Conversion using AudioConverter
      • From: James McCartney <email@hidden>
References: 
 >Re: Sample Rate Conversion using AudioConverter (From: Bill Stewart <email@hidden>)

  • Prev by Date: Peak meter?
  • Next by Date: RE: Beginning dsp programming
  • Previous by thread: Re: Sample Rate Conversion using AudioConverter
  • Next by thread: Re: Sample Rate Conversion using AudioConverter
  • Index(es):
    • Date
    • Thread