2011-04-01 113 views
1

這裏是我的代碼停止的AVAudioPlayer

NSString *soundFilePath = [[NSBundle mainBundle] pathForResource:@"95" ofType:@"wav"]; 

NSError *activationError = nil; 
NSError *audioPlayerInitError = nil; 
[[AVAudioSession sharedInstance] setActive: YES error:&activationError]; 

NSURL *newURL = [NSURL fileURLWithPath:soundFilePath]; 
musicPlayer1 = [[AVAudioPlayer alloc] initWithContentsOfURL:newURL error:&audioPlayerInitError]; 

if (musicPlayer1) { 
    [musicPlayer1 stop]; 
    [musicPlayer1 release]; 
    musicPlayer1 = nil; 
} 
else { 

    [musicPlayer1 prepareToPlay]; 
    [musicPlayer1 setVolume:.8]; 
    [musicPlayer1 setNumberOfLoops:-1]; // -1 means play indefintely 
    [musicPlayer1 setDelegate: self]; 
    [musicPlayer1 play]; 
} 

}

我rying啓動和停止使用相同的按鈕AVAudioPlay(musicPlayer1是在頭)。現在,當我觸摸按鈕時,它不會播放任何內容。請幫助?

回答

3

您每次創建一個新的AVAudioPlayer實例。你需要堅持對某個地方的對象的引用,並引用它。一個字段添加到您的視圖控制器類:

@private AVAudioPlayer *currentAudio; 

然後在此方法中,進行以下更改:

if (currentAudio) { 
    [currentAudio stop]; 
    [currentAudio release]; 
    currentAudio = nil; 
} else { 
    // what you already have goes here 
} 
+0

IM假設在頭 – luca590 2011-04-01 15:02:44

+0

也烏爾聲明@private,我有8個的這些我應該實現8個更多的AVAudioPlayers,或者它會更高效地使用全部相同的9 – luca590 2011-04-01 17:10:11

+0

由9個指針使用的內存量是微不足道的,所以不管你有多少個字段。但是,如果您試圖一次運行9個'AVAudioPlayer'實例,則應該分別管理每個實例。 – 2011-04-01 17:42:47