0

我有一个应用程序可以跨不同的 ViewController 播放和控制音乐。为此,我在应用程序委托的 DidFinishLaunchingMethod 中创建了两个 AVAudioPLayer 实例:

NSString *path = [[NSBundle mainBundle] pathForResource:@"minnie1" ofType:@"mp3"];
NSURL *path1 = [[NSURL alloc] initFileURLWithPath:path];
menuLoop =[[AVAudioPlayer alloc] initWithContentsOfURL:path1 error:NULL];
[menuLoop setDelegate:self];  
menuLoop.numberOfLoops = -1;
[menuLoop play];


NSString *path2 = [[NSBundle mainBundle] pathForResource:@"minnie2" ofType:@"mp3"];
NSURL *path3 = [[NSURL alloc] initFileURLWithPath:path2];
gameLoop=[[AVAudioPlayer alloc] initWithContentsOfURL:path3 error:NULL];
gameLoop.numberOfLoops = -1;
[gameLoop setDelegate:self];
[gameLoop prepareToPlay];

在此之后,我在各种视图控制器中调用它,以使用如下代码停止或重新启动:

- (IBAction)playGameLoop{

NSLog(@"Begin playGameLoop");
FPAppDelegate *app = (FPAppDelegate *)[[UIApplication sharedApplication] delegate];

if ([FPAVManager audioEnabled] == NO){
    //DO NOTHING   
}
else {
    if (app.gameLoop.playing ==YES ) {
        //DO NOTHING
    }
    else {  [app.gameLoop play];
    NSLog(@"End playGameLoop");
    }
    }

音频文件第一次播放良好,并在被要求停止时停止。但是,在 iOS4 设备上,它们不会在再次调用时开始重播。

谢谢!

4

1 回答 1

0

从文档:

调用此方法 [stop] 或让声音完成播放,
撤消调用 play 或 prepareToPlay 时执行的设置
方法。

stop 方法不会重置 currentTime 属性的值
为 0。也就是说,如果你在播放过程中调用 stop 然后调用
播放时,播放会从中断处继续。

在您循环播放声音的地方,我希望能够先调用stop然后调用play。但我对自己遇到这种情况有模糊的回忆。我发现调用pause,而不是stop,是一个更好的解决方案。特别是因为我可以再次打电话play恢复比赛。至少在我的经验中,打电话stop似乎总是需要在打电话prepareToPlay之前再次打电话。play

iOS4.x 和 iOS5 之间的 API 实现也可能有一些变化。您应该检查开发人员网站上的 API 差异以确定。

于 2012-04-27T18:02:21.450 回答