Search code examples
core-audioaudiounitios8.1

ExtAudioFileRead crash with code -40


My app plays music in background. I have audio key on in Background modes, my audio session looks like:

AVAudioSession *audioSession = [AVAudioSession sharedInstance];
NSError *err = NULL;
[audioSession setCategory:AVAudioSessionCategoryPlayback error:&err];
if( err ){
    NSLog(@"There was an error creating the audio session");
}
[audioSession setMode:AVAudioSessionModeDefault error:&err];
if( err ){
    NSLog(@"There was an error setting mote to the audio session");
}
[[AVAudioSession sharedInstance] setActive:YES error:&err];
if( err ){
    NSLog(@"There was an error setting mote to the audio session");
}

I'm playing via AUGraph which is configured with 2 nodes: Remote I/O and Mixer:

AudioComponentDescription outputcd;
outputcd.componentFlags        = 0;
outputcd.componentFlagsMask    = 0;
outputcd.componentManufacturer = kAudioUnitManufacturer_Apple;
outputcd.componentSubType      = kAudioUnitSubType_RemoteIO;
outputcd.componentType         = kAudioUnitType_Output;

// Multichannel mixer unit
AudioComponentDescription MixerUnitDescription;
MixerUnitDescription.componentType          = kAudioUnitType_Mixer;
MixerUnitDescription.componentSubType       = kAudioUnitSubType_AU3DMixerEmbedded;
MixerUnitDescription.componentManufacturer  = kAudioUnitManufacturer_Apple;
MixerUnitDescription.componentFlags         = 0;
MixerUnitDescription.componentFlagsMask     = 0;

Also according to Technical QA I added

UInt32 maxFPS = 4096;
AudioUnitSetProperty(_mixerUnit, kAudioUnitProperty_MaximumFramesPerSlice,kAudioUnitScope_Global, 0, &maxFPS,sizeof(maxFPS));

But still no luck, my app keeps crashing on ExtAudioFileRead in Render callback function approx 10 seconds as i lock iPhone. Any suggestions? Important to mention this bug is not reproduced on ios 7.


Solution

  • The issue was with Data Protection enabled in app capabilities. So as device was locked, files got encrypted and could not be played in background. Hence the crash. Changing encryption properties for audio files fixes this issue.