AVAudioPlayer 重置当前正在播放的声音并从开头开始播放。

18

我在使用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];      
}
3个回答

41

根据您的情况,我建议尝试以下操作:

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

player.currentTime = 0;
[player play];

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


9
就我所见,仅将currentTime设置为零就足够了。使用这里描述的方法,在快速连续几次这样做后,我发现音频会拒绝播放。 - Plumenator

4

如先前所述,如果您希望再次播放声音,则应避免使用stop()来禁用AVAudioPlayer实例,而是仅重置其正在播放的位置。因此,请勿使用stop()或pause(),而是像Plumenator提到的那样,只需发出.currentTime=0。在您的情况下,您只需执行:

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

既然你基本上是复制了Plenumenator的评论,那么你能否通过添加参考代码示例来扩展你的答案呢? - ctietze
1
谢谢,好建议。我已经添加了这个块,这样Plumenator的建议就更清晰了 :-) 谢谢 - Justin Ngan

1

Swift示例:

player.currentTime = 0.0;

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接