2012-04-25 75 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