I use the ExtAudioFileRead function to load an audio file into memory. But I found that there is always an error with the -50 code. This means that I am passing the wrong parameters to the function. But I do not know which one is the wrong parameter.
The audio file data format is alac, sampleRate 44100k, has 2 channels.
My code is shown below:
ExtAudioFileRef recordFile; OSStatus error = noErr; error = ExtAudioFileOpenURL((CFURLRef)file, &recordFile); checkError(error, "open file"); SInt64 frameCount; UInt32 size = sizeof(frameCount); error = ExtAudioFileGetProperty(recordFile, kExtAudioFileProperty_FileLengthFrames, &size, &frameCount); checkError(error, "get frameTotlal"); soundStruct *sound = &_sound; sound->frameCount = frameCount; sound->isStereo = true; sound->audioDataLeft = (SInt16 *)calloc(frameCount, sizeof(SInt16)); sound->audioDataRight = (SInt16 *)calloc(frameCount, sizeof(SInt16)); AudioStreamBasicDescription desc; UInt32 descSize = sizeof(desc); error = ExtAudioFileGetProperty(recordFile, kExtAudioFileProperty_FileDataFormat, &descSize, &desc); [self printASBD:desc]; UInt32 channels = desc.mChannelsPerFrame; error = ExtAudioFileSetProperty(recordFile, kExtAudioFileProperty_ClientDataFormat, sizeof(inFormat), &inFormat); AudioBufferList *bufferList; bufferList = (AudioBufferList *)malloc(sizeof(AudioBufferList) + sizeof(AudioBuffer) * (channels - 1)); AudioBuffer emptyBuff = {0}; size_t arrayIndex; for (arrayIndex = 0; arrayIndex < channels; arrayIndex ++) { bufferList->mBuffers[arrayIndex] = emptyBuff; } bufferList->mBuffers[0].mData = sound->audioDataLeft; bufferList->mBuffers[0].mNumberChannels = 1; bufferList->mBuffers[0].mDataByteSize = frameCount * sizeof(SInt16); if (channels == 2) { bufferList->mBuffers[1].mData = sound->audioDataRight; bufferList->mBuffers[1].mNumberChannels = 1; bufferList->mBuffers[1].mDataByteSize = frameCount * sizeof(SInt16); bufferList->mNumberBuffers = 2; } UInt32 count = (UInt32)frameCount; error = ExtAudioFileRead(recordFile, &count, bufferList); checkError(error, "reading");
source share