2010-12-31 20 views
0

私の代理人メソッドは次のようになります。最初の曲が再生された後、この方法に入り、2番目の曲が再生されますが、2番目の曲が再生されると停止します。デリゲートメソッドには入っていません。すべての曲を連続して再生する必要があります。私は確信していません、なぜ。誰かが私を助けることができます。あなたはplayerというローカル変数を定義していないのでavaudioplayerで次の曲を再生する際の問題

- (void)audioPlayerDidFinishPlaying:(AVAudioPlayer *)p successfully:(BOOL)flag 
{ 
if (flag == NO) 
    NSLog(@"Playback finished unsuccessfully"); 
else 
{ 
    //[player stop]; 
    index++; 
    NSLog(@"%d",index); 
    path=[[NSBundle mainBundle] pathForResource:[songlist objectAtIndex:index] ofType:@"mp3"]; 
    [player initWithContentsOfURL:[NSURL fileURLWithPath:path] error:NULL]; 
    [songlabel2 setTitle:[songlist objectAtIndex:index]]; 

    [endtime setText:[NSString stringWithFormat:@"%.2f",[player duration]/100]]; 
    [player play]; 
     } 
} 

答えて

1

、私はplayerは最初の曲を演奏するために使用されたインスタンス変数であると仮定している、とあなたは

player = [[AVAudioPlayer alloc] initWithContentsOfURL:firstSongURL error:&error]; 
でそれを作成しました

またはそれに類似するものがあり、その代理人を設定しました。あなたのaudioPlayerDidFinishPlaying: successfully:方法では、あなたが同じインスタンスに再び-initWithContentsOfURL:error:を送っていることを意味する

[player initWithContentsOfURL:[NSURL fileURLWithPath:path] error:NULL]; 

を持っています。 指定されたオブジェクトに対してイニシャライザを2回コールしないでください。結果は予測できず、メモリリークの可能性があります。 AVAudioPlayerの前のインスタンスを解放する必要があります。

[player release]; 

、その後、あなたが最初の曲でやったように、再び+alloc-initWithContentsOfURL:error:で新しいインスタンスを作成し、適切なデリゲート設定:

player = [[AVAudioPlayer alloc] initWithContentsOfURL:secondSongURL error:&error]; 
player.delegate = self; 
[player play]; 
+0

をおかげでバディ..私はこの明日しようとすると、結果を教えてください。 – Rajashekar

+0

こんにちはBavarious、それは働いた。私はちょうど私がリリースをしなかったデリゲートを設定しました。どうもありがとうございます。私は別の問題を抱えています。一度私はホームボタンを押してアプリが離れて行くと、アプリのアイコンをクリックしたときに2曲同時に再生されます。なぜこれが起こっているのか分かりません。 – Rajashekar

+0

インスタンスを解放して別のインスタンスを作成しないと、メモリが漏れて予測できない副作用が発生する可能性があります。して下さい。 –

関連する問題