2011-08-22 35 views
0

我試圖使用AVAudioPlayer創建一種音頻播放列表。所以,我用下面的代碼:AVAudioPlayer只調用audioPlayerDidFinishPlaying兩次

.H

<AVAudioPlayerDelegate> 
{ 
    AVAudioPlayer *audioPlayer; 
} 

@property (nonatomic, retain) AVAudioPlayer *audioPlayer; 

.M

@synthesize audioPlayer; 

- (void)viewDidLoad 
{ 
audioPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:url error:nil]; 
    audioPlayer.numberOfLoops = 0; 
    audioPlayer.delegate = self; 
    [audioPlayer play]; 
} 

- (void)audioPlayerDidFinishPlaying:(AVAudioPlayer *)player successfully:(BOOL)flag 
{ 
if (flag) 
    { 
     [player release]; 

     currentSong = currentSong + 1; 
     NSURL *url = [NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource:[songs objectAtIndex:currentSong] ofType:@"mp3"]]; 

     artist.text = [artists objectAtIndex:currentSong]; 
     song.text = [songs objectAtIndex:currentSong]; 

     audioPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:url error:nil]; 

     audioPlayer.delegate = self; 
     audioPlayer.numberOfLoops = 0; 

     [audioPlayer initWithContentsOfURL:url error:nil]; 
     [audioPlayer play]; 
    } 
} 

這適用於兩首歌曲,但在此之後有ISN沒有任何音頻。任何想法爲什麼這是?

感謝, 丹尼斯

回答

1

在這一行你INITING音頻播放器:

audioPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:url error:nil]; 

那麼你在這一行再次INITING它(不必要的重複,並可能是一個額外保留):

[audioPlayer initWithContentsOfURL:url error:nil]; 

那麼下一次循環來臨時,即使您使用線路

釋放
[player release]; 

...有一個問題,因爲它仍然在內存中,捆綁硬件編解碼器或浪費資源。嘗試刪除第二個initWithContents…行,因爲它是不必要的。

+0

這就是你厭倦了什麼。乾杯! – Denis

0

1.請保持陣列。
2.一旦創建了audioPlayer的一個實例 - 添加到數組中並調用play並釋放audioPlayer的實例(因爲一旦添加到數組後它將保留)。
3.在audioPlayerDidFinishPlaying中從該數組中移除audioPlayer。

因此,你可以一次播放多個文件