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

Posted

技术标签:

【中文标题】AVAudioPlayer 重置当前播放的声音并从头开始播放【英文标题】:AVAudioPlayer resetting currently playing sound and playing it from beginning 【发布时间】: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];      

【问题讨论】:

【参考方案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;

【讨论】:

以上是关于AVAudioPlayer 重置当前播放的声音并从头开始播放的主要内容,如果未能解决你的问题,请参考以下文章

使用 AVAudioPlayer 播放声音时出现问题?

使用 AVAudioPlayer 在后台播放声音序列

AVAudioPlayer- 从声音缓冲区播放

AVAudiorecorder 和 AVAudioPlayer 并不总是播放声音

使用 AVAudioPlayer 播放声音后恢复背景音频

向 AVAudioPlayer 对象发送值以播放不同的声音