How to get array of float audio data from AudioQueueRef in iOS? How to get array of float audio data from AudioQueueRef in iOS? objective-c objective-c

How to get array of float audio data from AudioQueueRef in iOS?


  // so you don't have to hunt them all down when you decide to switch to float:   #define AUDIO_DATA_TYPE_FORMAT SInt16  // the actual sample-grabbing code:  int sampleCount = inBuffer->mAudioDataBytesCapacity / sizeof(AUDIO_DATA_TYPE_FORMAT);  AUDIO_DATA_TYPE_FORMAT *samples = (AUDIO_DATA_TYPE_FORMAT*)inBuffer->mAudioData;

Then you have your (in this case SInt16) array samples which you can access from samples[0] to samples[sampleCount-1].


The above solution did not work for me, I was getting the wrong sample data itself.(an endian issue) If incase someone is getting wrong sample data in future, I hope this helps you :

-(void)feedSamplesToEngine:(UInt32)audioDataBytesCapacity audioData:(void *)audioData { int sampleCount = audioDataBytesCapacity / sizeof(SAMPLE_TYPE);

SAMPLE_TYPE *samples = (SAMPLE_TYPE*)audioData;//SAMPLE_TYPE *sample_le = (SAMPLE_TYPE *)malloc(sizeof(SAMPLE_TYPE)*sampleCount );//for swapping endiansstd::string shorts;double power = pow(2,10);for(int i = 0; i < sampleCount; i++){    SAMPLE_TYPE sample_le =  (0xff00 & (samples[i] << 8)) | (0x00ff & (samples[i] >> 8)) ; //Endianess issue    char dataInterim[30];    sprintf(dataInterim,"%f ", sample_le/power); // normalize it.    shorts.append(dataInterim);}