views:

249

answers:

3

Everybody knows the standard procedure to keep your app alive, after the user pressed the lock button (silent sound). If I start a sound with AVAudioPlayer (before the iphone is locked), the sound plays till it's end (after locking). The app is still running. If I try to start another sound while the iPhone is locked, it will never get played. All the other things work as well but the sound doesn't.

How can I play a sound while the iphone is locked?

A: 

If the problem is that your app is doing to sleep after the screen locks, then this question is already answered here and here on SO

progrmr
The question isn't answered yet. IdleTimer isn't an option and the audio session is configured quite the same as in your example. The problem is, if the phone is locked, i can't initiate a new sound. I can play a sound (code execution works) but you can't hear it.
Joe Mallik
@Joe you should be able to play sounds when the screen is locked, you don't need to disable the idle timer, but you have to keep playing sound. My [app](http://clocksmith.mggm.net) plays a silent sound every 10 seconds to prevent deep sleep. To verify your problem, let your app run on the device until it stops working, then attach your phone to xcode via usb and look at the console log in the organizer, you'll see the OS shutting everything down and putting the system to sleep. The only way (before OS 4) is to keep playing sounds every 10 seconds or so.
progrmr
Look at [this log](http://bit.ly/axF0He), if this is what is happening to your app, then you need to play sounds more often to keep it alive.
progrmr
Yes, I did it your way (play a silent sound), but I want to play another unplayed sound later. This sound is inaudible. It's not the problem to keep the app alive.
Joe Mallik
Perhaps I misunderstood the question then... I thought the app was going to deep sleep and thus the sound was not playing. Can you see log entries on the console to verify the app is still running and tries to play a sound but you hear nothing? Is that the problem?
progrmr
A: 

I'm not sure where your problem is, but have you set up the audio category to allow mixing?

const UInt32 categoryProp = kAudioSessionCategory_MediaPlayback;
AudioSessionSetProperty(kAudioSessionProperty_AudioCategory, sizeof(categoryProp), &categoryProp);

UInt32 category = kAudioSessionCategory_MediaPlayback;
AudioSessionSetProperty(kAudioSessionProperty_AudioCategory, sizeof(category), &category);

const UInt32 setProperty_YES = 1;
AudioSessionSetProperty(kAudioSessionProperty_OverrideCategoryMixWithOthers, sizeof(setProperty_YES), &setProperty_YES);
progrmr
A: 

Now all works fine! I missed a log statement. It seems I flooded the audio buffer!

Thanks to all who tried to help me fixing this.

Joe Mallik