【问题标题】:AVAudioPlayer Number Of Loops only taking effect after being played through onceAVAudioPlayer Number Of Loops 只有播放一次才生效
【发布时间】:2013-11-26 04:13:26
【问题描述】:

我对这个奇怪的事件有点难过:

我有一个 UIButton,一旦点击它就会为音频播放器设置一个循环,或者将其重置为 0(无循环)。这是方法 -

-(void)changeLoopValueForPlay:(int)tag toValue:(bool)value{
    AVAudioPlayer *av =  [self.playerArray objectAtIndex:tag];
    if(value){
        [av setNumberOfLoops:100];
        [av prepareToPlay];
    }
    else{
        [av setNumberOfLoops:0];
    }
}

现在由于某种原因,循环只会在播放器播放完音频后才会生效,这意味着循环值不会立即生效,但播放器的“numberOfLoops”值实际上设置为100 当我在播放前检查它的值时。我假设这与播放器的初始化或加载有关,但我不会在这两个播放之间重新初始化它(一个没有循环,另一个有)。知道为什么会这样吗?如果您想查看任何其他代码,请告诉我。

【问题讨论】:

    标签: objective-c avaudioplayer


    【解决方案1】:

    这解决了问题,但我觉得这是一种变通方法,而不是直接解决方案。我所做的只是创建一个新的 AVAudioPlayer,将 numberOfLoops 值设置为我想要的任何值,然后用现有播放器替换该播放器,而不是更改现有播放器的值。

    【讨论】:

      【解决方案2】:

      我通过完全放弃 numberOfLoops 并改用我自己的逻辑来解决此问题。

      首先,设置AVAudioPlayer的代理:

      self.audioPlayer.delegate = self;
      

      接下来,实现委托的-audioPlayerDidFinishPlaying:successfully:

      - (void)audioPlayerDidFinishPlaying:(AVAudioPlayer*)player successfully:(BOOL)flag
      {
          if(flag && <#(bool)i_want_to_repeat_playing#>)
          {
              [self.audioPlayer play];
          }
      }
      

      只需将&lt;#(bool)i_want_to_repeat_playing#&gt; 替换为您想要的逻辑,例如,检查计数器是否已达到某个阈值。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-08-30
        • 1970-01-01
        • 1970-01-01
        • 2016-08-20
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多