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);}