Delay in playing sounds using AVAudioPlayer

-(IBAction)playSound{ AVAudioPlayer *myExampleSound;

NSString *myExamplePath = [[NSBundle mainBundle] pathForResource:@"myaudiofile" ofType:@"caf"];

myExampleSound =[[AVAudioPlayer alloc] initWithContentsOfURL:[NSURL fileURLWithPath:myExamplePath] error:NULL];

myExampleSound.delegate = self;

[myExampleSound play];


I want to play a beep sound when a button is clicked. I had used the above code. But it is taking some delay in playing the sound.

Anyone please help.

  • Removing shadows from UIWebView
  • How can I convert an NSDictionary to an NSMutableDictionary?
  • Catch an exception for invalid user input in swift
  • Is iAds not available for iPad apps?
  • 360° panorama libraries for ios
  • Current Week Start and End Date
  • 2 Solutions Collect From Internet About “Delay in playing sounds using AVAudioPlayer”

    There are two sources of the delay. The first one is bigger and can be eliminated using the prepareToPlay method of AVAudioPlayer. This means you have to declare myExampleSound as a class variable and initialize it some time before you are going to need it (and of course call the prepareToPlay after initialization):

    - (void) viewDidLoadOrSomethingLikeThat
        NSString *myExamplePath = [[NSBundle mainBundle]
            pathForResource:@"myaudiofile" ofType:@"caf"];
        myExampleSound =[[AVAudioPlayer alloc] initWithContentsOfURL:
            [NSURL fileURLWithPath:myExamplePath] error:NULL];
        myExampleSound.delegate = self;
        [myExampleSound prepareToPlay];
    - (IBAction) playSound {
        [myExampleSound play];

    This should take the lag down to about 20 milliseconds, which is probably fine for your needs. If not, you’ll have to abandon AVAudioPlayer and switch to some other way of playing the sounds (like the Finch sound engine).

    See also my own question about lags in AVAudioPlayer.

    AudioServicesPlaySystemSound is an option. Tutorial here, sample code here.