【问题标题】:AVAudioPlayer resetting currently playing sound and playing it from beginningAVAudioPlayer 重置当前播放的声音并从头开始播放
【发布时间】:2010-11-12 18:24:23
【问题描述】:

我在使用 AVAudioPlayer 时遇到问题,我想重置当前正在播放的播放器并让它再次播放。

我尝试了以下方法,但没有成功:

声音播放一次,但第二次我选择停止声音的按钮,第三次再次启动声音。

//Stop the player and restart it
if (player.playing) {
    NSLog(@"Reset sound: %@", selectedSound);
    [player stop];
    [player play];
} else {
    NSLog(@"playSound: %@", selectedSound);
    [player play];      
}

我也尝试过使用 player.currentTime = 0,这表示将重置播放器,但不起作用,我还尝试重置 currentTime = 0,然后调用不起作用的 play。

//Stop the player and restart it
if (player.playing) {
    NSLog(@"Reset sound: %@", selectedSound);
    player.currentTime = 0;
    [player play];
} else {
    NSLog(@"playSound: %@", selectedSound);
    [player play];      
}

【问题讨论】:

    标签: iphone audio core-audio avaudioplayer


    【解决方案1】:

    对于您的情况,我会尝试以下方法

    //Pause the player and restart it
    if (player.playing) {
        NSLog(@"Reset sound: %@", selectedSound);
        [player pause];
    }
    
    player.currentTime = 0;
    [player play];
    

    如果您要立即再次播放声音,我建议您暂停而不是停止。调用 stop "停止播放并撤消播放所需的设置。"

    【讨论】:

    • FWIW,我已经看到只需将 currentTime 设置为零就足够了。使用此处描述的方法,我看到音频在连续执行几次后拒绝播放。
    【解决方案2】:

    如前所述,如果您希望再次播放声音,您应该避免通过停止来禁用 AVAudioPlayer 实例,而只需重置它正在播放的位置。所以,不要使用 stop() 或 pause() 但正如 Plumenator 提到的,只需发出 .currentTime=0。因此,在您的情况下,您只需这样做:

    if (player.isPlaying) { 
       player.currentTime = 0
    } else {
       player.play()
    }
    

    【讨论】:

    • 由于您基本上复制了 Plenumenator 的评论,您能否通过添加参考代码示例来扩展您的答案?
    • 谢谢,一个很好的建议。我已经添加了该块,以便更清楚 Plumenator 的建议:-) 谢谢
    【解决方案3】:

    Swift 示例:

    player.currentTime = 0.0;
    

    【讨论】:

      猜你喜欢
      • 2011-04-20
      • 2015-12-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-08-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多