0

さまざまなViewControllerで音楽を再生および制御するアプリがあります。これを行うために、アプリ デリゲートの DidFinishLaunchingMethod で AVAudioPLayer の 2 つのインスタンスを作成しました。

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

この後、次のようなコードを使用して停止または再起動するために、さまざまなviewControllerで呼び出します。

- (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

ドキュメントから:

このメソッドを [停止] するか、サウンドの再生を終了させます。
play または prepareToPlay の呼び出し時に実行されたセットアップを元に戻します
メソッド。

stop メソッドは currentTime プロパティの値をリセットしません
つまり、再生中に stop を呼び出してから呼び出すと、
再生すると、中断したところから再生が再開されます。

サウンドをループしている場所では、 を呼び出してから を呼び出すことができると期待していstopますplay。しかし、私は自分でこれに遭遇したことをぼんやりと覚えています。pauseではなくを呼び出すstop方が良い解決策であることがわかりました。特に、playプレイを再開するためにもう一度電話をかけることができたからです。少なくとも私の経験では、電話をかけるには、電話をかける前にもう一度電話をかけるstop必要があるように見えました。prepareToPlayplay

iOS4.x と iOS5 の間でも、API 実装にいくつかの変更があった可能性があります。開発者の Web サイトで API 差分を確認してください。

于 2012-04-27T18:02:21.450 に答える