AVAudioPlayer有时会打扰应用程序

时间:2016-06-25 18:28:32

标签: objective-c xcode avfoundation avaudioplayer

我正在制作一个简单的游戏,每次触摸屏幕后,都会在小型UIImageView上发生动画,这种情况非常顺利,应用程序运行顺畅,CADisplayLink作为计时器。

我添加了一个mp3文件,每次触摸后播放1秒钟,因为AVAudioPlayer想象的声音如下:Bip

因此,当我第一次触摸屏幕时,第一次打嗝发生应用程序冻结不到一秒,我可以说它是好的,因为它是第一次声音分配内存。

如果我再次触摸屏幕,如果我在3秒前触摸屏幕,应用程序不会打嗝,但是如果我等待4秒钟以后,应用程序会在每次触摸后开始打嗝。

每次如果我在触摸之间反复触摸时间超过3秒,应用程序就不会打嗝,但在触摸之间4秒后,应用程序会打嗝。

有什么想法来解决打嗝?

如果需要,这是一些代码

@property (nonatomic, strong) AVAudioPlayer *mySound;

- (void)viewDidLoad {

NSString *soundFilePath = [[NSBundle mainBundle] pathForResource:@"bip" ofType:@"mp3"];
NSURL *fileURL = [[NSURL alloc] initFileURLWithPath:soundFilePath];
AVAudioPlayer *newPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:fileURL error:nil];

self.mySound = newPlayer;

[mySound prepareToPlay];
[mySound setDelegate:self];
}

触摸后发生

-(void) touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
UITouch *touch = [[event allTouches] anyObject];
CGPoint location = [touch locationInView:touch.view];
if (location.x < viewWidth/2) {
   [mySound play];
} else {
   [mySound play];
}
}

1 个答案:

答案 0 :(得分:0)

发出非常短暂的无声声音。每隔一秒钟使用你的计时器(与另一个声音播放器)一起播放。 - 你看到这里的想法是什么;我们试图让媒体服务器保持活动状态,以便在我们想要声音效果时准备就绪。既然你说在3秒之前没有问题,这让我觉得3秒后媒体服务器又回到了睡眠状态。我们的目标是保持&#34;发痒&#34;它不会发生。

但是,总的来说,我的印象是AVAudioPlayer不适用于此类事情。您可能应该使用AVAudioEngine,它可以保持运行并且可以无延迟地播放声音。