2012-04-25 84 views
1

在項目中,我從iPhone手機的話筒多條記錄,我循環使用此代碼打破了多個環

-(IBAction)loop1{ 
NSError *error; 
audioPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:temporaryRecFile error:&error]; 
    audioPlayer.numberOfLoops = 100; 

[audioPlayer play]; 

} 

,並停止使用此代碼

-(IBAction)loopstop1{ 

audioPlayer.numberOfLoops = 0; 

[audioPlayer stop]; 

} 

當不止一個記錄正在循環,但是這種停止方法只會停止最後一次設置爲循環的記錄,我想知道是否有任何突破所有音頻循環,或打破這些特定的循環,因爲我只是設法停止最後一次錄音已經循環。

感謝任何幫助或建議

+0

在每個環路店的stop方法你爲什麼只存儲引用的一個球員,而不是全部?你必須給所有玩家「停止」,而不僅僅是最後一個。 – 2012-04-25 14:33:07

+0

在您的代碼中,每次調用循環時,都會創建另一個對象audioPlayer對象。使用ARC,舊對象如果仍在播放,則會一直存在,直到完成。你停止方法不解決。而不是孤立你的對象,你需要跟蹤它們,例如''[audioPlayers_ addObject:newPlayer];'然後用類似'[audioPlayers_ makeObjectsPerformSelector:@selector(stop :)]''來阻止它們。希望這有助於 – 2012-04-25 14:41:20

+0

謝謝!沒有意識到我創造了不止一個球員。 – user1343858 2012-04-25 15:18:52

回答

1

我會做什麼:

  1. 創建NSMutableArray舉行audioPlayer小號
  2. 添加您AVAudioPlayer對象的數組

    AVAudioPlayer* newLoop = [[AVAudioPlayer alloc] initWithContentsOfURL:temporaryRecFile 
                       error:&error]; 
    newLoop.numberOfLoops = 100; 
    
    [loopsArray addObject:newLoop]; 
    
  3. 傳遞一個索引給每個啓動/停止函數,知道啓動/停止哪個audioPlayer


提示:要停止所有的人,只需要調用在loopsArray