【问题标题】:AVAudioPlayer hiccups the app sometimesAVAudioPlayer 有时会打嗝应用程序
【发布时间】:2016-06-25 18:28:32
【问题描述】:

我正在开发一个简单的游戏,每次触摸屏幕后,都会在一个小的 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];
}
}

【问题讨论】:

  • 您能显示按钮中的任何其他代码吗?
  • 我没有使用任何按钮,只是触摸屏幕上的任何位置。我为你编辑了我的问题。

标签: objective-c xcode avfoundation avaudioplayer


【解决方案1】:

发出很短的静音声音。使用您的计时器每隔一秒左右播放一次(使用另一个声音播放器)。 ——你看这里的想法是什么;我们正在尝试保持媒体服务器处于活动状态,以便在我们想要音效时它可以运行。既然你说 3 秒前没有问题,那让我觉得 3 秒后媒体服务器又回到了睡眠状态。我们的目标是继续“挠痒痒”,这样就不会发生。

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

【讨论】:

  • 马特 我做到了,但没有解决,但不知道我是否做对了。我没有每 1 秒触发一次 if 语句,但我有一个每秒触发一次的 if 语句并将 [mySound prepareToPlay] 放入其中但未解决。马特我在模拟器上测试了这个应用程序,问题并不明显,但是当我在我的手机(6s+)上测试它时,问题和以前一样。
  • 非常感谢马特 :)) 这刚刚解决了它。那么你能告诉我媒体服务器的这个版本是由 ARC 引起的吗?我想制作一个 1 分钟的静音循环声音以使其保持活力,您认为这是否是提高整体性能的好方法,因为它每分钟调用一次并且干扰另一个进程的机会较小?
  • @FarhadAnsari 嘿,你最后用了什么?我也面临同样的问题。
猜你喜欢
  • 1970-01-01
  • 2012-01-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-02-04
  • 1970-01-01
  • 1970-01-01
  • 2023-04-05
相关资源
最近更新 更多