• 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: Convert to float and more
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Convert to float and more


  • Subject: Re: Convert to float and more
  • From: Bill Stewart <email@hidden>
  • Date: Wed, 4 Jun 2003 21:29:27 -0700

And I might add...

The PublicUtility directory in the SDK has an extremely useful class CAStreamBasicDescription that takes only a couple of lines to assemble these kinds of stream descs and will save you hours of debugging (its also got a very good print function so you can see what you are creating)

Bill

On Wednesday, June 4, 2003, at 01:46 PM, john wrote:

Hi Peter,

The other people on the list have pointed you in a good direction. I
also found that the AudioConverter is much faster than doing the simple
division/multiplication. Plus, it's incredibly easy to use. Below is a
snippet of code to use it.

I also agree with Jeff Moore's suggestion to not load the entire audio
file into an NSData object. Using NSFileHandle and NSFileManager are
quite easy (as is all of Cocoa!), so you may want to read and convert
the audio data from the file as you need it.

Code snip:

- (void)convertNative: (NSMutableData*)nativeBuffer toFloat:
(NSMutableData*)floatBuffer
{
AudioConverterRef theAudioConverter;
AudioStreamBasicDescription sourceFormat, destinationFormat;
unsigned long theSourceSize = [nativeBuffer length];
unsigned long theDestSize = (theSourceSize * 2);
unsigned long theResult = 0;

// make sure we have the right length for the destination buffer
[floatBuffer setLength: theDestSize];

// fill out our source description
sourceFormat.mSampleRate = 44100.0;
sourceFormat.mFormatID = kAudioFormatLinearPCM;
sourceFormat.mFormatFlags = kAudioFormatFlagIsBigEndian |
kLinearPCMFormatFlagIsSignedInteger;
sourceFormat.mBytesPerPacket = 4;
sourceFormat.mFramesPerPacket = 1;
sourceFormat.mBytesPerFrame = 4;
sourceFormat.mChannelsPerFrame = 2;
sourceFormat.mBitsPerChannel = 16;
// now fill out the destination description
destinationFormat.mSampleRate = 44100.0;
destinationFormat.mFormatID = kAudioFormatLinearPCM;
destinationFormat.mFormatFlags = kAudioFormatFlagIsBigEndian |
kAudioFormatFlagIsFloat;
destinationFormat.mBytesPerPacket = 8;
destinationFormat.mFramesPerPacket = 1;
destinationFormat.mBytesPerFrame = 8;
destinationFormat.mChannelsPerFrame = 2;
destinationFormat.mBitsPerChannel = 32;

// create our converter
theResult = AudioConverterNew(&sourceFormat, &destinationFormat,
&theAudioConverter);
// if we have an error
if (!theResult)
{ // now convert the data
theResult = AudioConverterConvertBuffer(theAudioConverter,
theSourceSize, (void*)[nativeBuffer bytes], &theDestSize,
(void*)[floatBuffer mutableBytes]);
// now get rid of it
AudioConverterDispose(theAudioConverter);
}
}


Hope this helps!

-- John


Hi

I have a few questions.

Im working on a Cocoa sound editing app.

When i import a file i just copy the sound bytes into a NSData and keep
it in the original format.

All my drawing and DSP code use floats, so if the original sound format
is 16bit i do a lot of sample/32768.

I was thinking of converting the samples to float when importing the
file, but that will double the data size, so i still need to decide
what's best.

I tried to search the archives for the fastest way to convert from int
to float and back. but did not find much,
someone mentioned there might be a altivec snippet for converting?

I also looked at CASampleTools.cpp ( but to be honest i don't
understand C++).

When i play a file through the defaultAudioOutput, and the stream
format is not float, is there another conversion to float within
coreaudio?

I also want to import/export MP3 and other compressed formats what is
the best way to do that?


Thanks

Peter Mark
_______________________________________________
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.
  • Prev by Date: Re: virtual midi source and Audio MIDI Setup.app
  • Next by Date: High Pass Filter example?
  • Previous by thread: Re: Convert to float and more
  • Next by thread: Re: Convert to float and more
  • Index(es):
    • Date
    • Thread