查看AVAudioPlayer
,您可以设置和重复使用它。但更重要的是,当您设置它时,您可以告诉它“准备播放”,这会将声音预加载到内存中。因此,当您真正告诉播放器播放时,它会立即播放。我很方便,最近为某些东西编写了这个方法,它创建并返回一个AVAudioPlayer
对象:
+(AVAudioPlayer *)playerForFile:(NSString *)fileName
{
NSString *filePath = [[NSBundle mainBundle] pathForResource:fileName ofType:@"caf"];
NSURL *url = [NSURL fileURLWithPath:filePath];
NSData *soundData = [NSData dataWithContentsOfURL:url];
NSError *error = nil;
AVAudioPlayer *player = [[[AVAudioPlayer alloc] initWithData:soundData error:&error] autorelease];
如果(错误)
NSLog(@"为 %@ 创建播放器时出错:%@", fileName, [error localDescription]);
return (error ? nil : player);
}
在您的应用程序中的某处,您可能会像这样设置一个播放器对象:
AVAudioPlayer *buzzSoundPlayer = [MyClass playerForFile:@"buzz"];
if (buzzSoundPlayer) {
[buzzsoundPlayer prepareToPlay];
}
当您想播放声音时:
[buzzSoundPlayer setCurrentTime:0];
[buzzSoundPlayer play];
您必须将当前时间设置为0,即声音文件的开头,每次播放它,因为当声音播放完毕时,“当前时间”在结尾。因此,后续播放它的请求将不会播放任何内容。所以我们将当前时间设置回开始。
您也可以为您的播放器设置一个delegate
,并在声音播放完毕时通过委托方法得到通知。或者,您可以在那里将当前时间重置为 0。
您可以在 Apple 的文档中阅读有关AVAudioPlayer
、 和的所有内容。AVFoundation