使用AVAudioPlayer延迟播放声音

时间:2010-03-31 04:22:08

标签: iphone objective-c cocoa-touch 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];

}

单击按钮时我想发出哔哔声。我使用了上面的代码。但播放声音需要一些延迟。

任何人都请帮忙。

2 个答案:

答案 0 :(得分:8)

延迟有两个来源。第一个更大,可以使用prepareToPlay AVAudioPlayer方法消除。这意味着您必须将myExampleSound声明为类变量并在需要之前将其初始化一段时间(当然,在初始化后调用prepareToPlay):

- (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];
}

这应该延迟到大约20毫秒,这可能适合您的需要。如果没有,您将不得不放弃AVAudioPlayer并切换到播放声音的其他方式(例如Finch sound engine)。

另见我自己关于lags in AVAudioPlayer的问题。

答案 1 :(得分:1)

AudioServicesPlaySystemSound是一个选项。教程here,示例代码here