audiofftaiff

Using Core Audio to extract floats from AIFF


Is there a way using Core Audio on OS X to extract a set of frames in an AIFF file into an array of 32-bit floats suitable for performing an FFT on?


Solution

  • Yes. The easiest way to do it is to use the ExtAudioFile API. There's a great example in Apple's ConvertFile sample code. Have a look at UseExtAF.cpp.

    For a sample rate of 44.1 kHz, the AudioStreamBasicDescription for 32-bit floating point LPCM would look like this:

    AudioStreamBasicDescription fmt;
    fmt.mSampleRate = 44100;
    fmt.mFormatID = kAudioFormatLinearPCM;
    fmt.mFormatFlags = kLinearPCMFormatFlagIsFloat;
    fmt.mBitsPerChannel = sizeof(Float32) * 8;
    fmt.mChannelsPerFrame = 1; // set this to 2 for stereo
    fmt.mBytesPerFrame = fmt.mChannelsPerFrame * sizeof(Float32);
    fmt.mFramesPerPacket = 1;
    fmt.mBytesPerPacket = fmt.mFramesPerPacket * fmt.mBytesPerFrame;