iOS Swift AVAudioPlayer 如何在完成播放后将 currentTime 重置为零

iOS Swift AVAudioPlayer how to reset currentTime to zero when finished playing

我的代码应该在按下按钮时播放 C Major 音阶波形文件。点击单独的停止按钮将停止播放并将 currentTime 重置为零。

@IBAction func onPlayButtonClick(sender: UIButton)
{
    play.enabled = false
    let path = NSBundle.mainBundle().pathForResource("cmajor", ofType: "wav")!
    let url = NSURL(fileURLWithPath:  path)
    do
    {
        scalePlayer = try AVAudioPlayer(contentsOfURL: url)
        scalePlayer.prepareToPlay()
        scalePlayer.enableRate = true
        scalePlayer.rate = 0.75
        scalePlayer.play()
    }
    catch
    {

    }

}

它按预期工作,但如何在文件播放完毕后将 currentTime 设置为零?我在开发者文档中找不到任何内容。

您必须设置一个委托:

scalePlayer.delegate = self

然后你实现这个回调

func audioPlayerDidFinishPlaying(player: AVAudioPlayer, successfully flag: Bool) {
    //set the current time here
    scalePlayer.currentTime = 0
} 

更新

这是一个如何实现它的示例(基于您的代码):

class MyViewController: UIViewController, AVAudioPlayerDelegate {

    @IBOutlet weak var play: UIButton!

    private var scalePlayer: AVAudioPlayer?

    override func viewDidLoad() {
        super.viewDidLoad()

        let path = NSBundle.mainBundle().pathForResource("cmajor", ofType: "wav")!
        let url = NSURL(fileURLWithPath:  path)
        scalePlayer = try? AVAudioPlayer(contentsOfURL: url)

        scalePlayer?.delegate = self
    }

    @IBAction func onPlayButtonClick(sender: UIButton) {
        play.enabled = false
        scalePlayer?.prepareToPlay()
        scalePlayer?.enableRate = true
        scalePlayer?.rate = 0.75
        scalePlayer?.play()
    }

    func audioPlayerDidFinishPlaying(player: AVAudioPlayer, successfully flag: Bool) {
        scalePlayer?.currentTime = 0
    }
}