Delay in playing sounds using AVAudioPlayer

前端 未结 2 851
一整个雨季
一整个雨季 2020-12-18 10:22
-(IBAction)playSound{ AVAudioPlayer *myExampleSound;

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

myExampleS         


        
2条回答
  •  囚心锁ツ
    2020-12-18 10:49

    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.

提交回复
热议问题