在 Swift 中重复播放声音文件?

Posted

技术标签:

【中文标题】在 Swift 中重复播放声音文件?【英文标题】:Play a sound file on repeat in Swift? 【发布时间】:2019-11-25 11:53:54 【问题描述】:

我已经通过使用以下代码按下按钮成功播放声音。但是,我想按下一个按钮,让声音循环/无限播放。这是如何实现的?我也想实现暂停/播放功能。提前致谢。

@IBAction func keyPressed(_ sender: UIB`utton) 

            playSound(soundName: sender.currentTitle!)

    


    func playSound(soundName: String)  //
        let url = Bundle.main.url(forResource: soundName, withExtension: "wav")
        player = try! AVAudioPlayer(contentsOf: url!)
        player.play()

     // End of Play Sound

【问题讨论】:

【参考方案1】:

默认情况下AVAudioPlayer会从头到尾播放它的音频然后停止,但是我们可以通过设置它的numberOfLoops属性来控制让它循环的次数。例如,要让你的音频总共播放 3 次,你可以这样写:

 player.numberOfLoops = 3

如果你想要无限循环然后使用

 player.numberOfLoops =  -1  

例如

  func playSound(soundName: String)  //
        let url = Bundle.main.url(forResource: soundName, withExtension: "wav")
        player = try! AVAudioPlayer(contentsOf: url!)
        player.numberOfLoops =  -1 // set your count here 
        player.play()

     // End of Play Sound

【讨论】:

【参考方案2】:

你可以留住玩家。然后在播放器的完成委托回调中,再次开始播放。或者随时停止播放器,因为您保留了对它的引用。

【讨论】:

【参考方案3】:

var audioPlayer: AVAudioPlayer?

    func startBackgroundMusic() 
        if let bundle = Bundle.main.path(forResource: "Guru_Nanak_Sahib_Ji", ofType: "mp3") 
            let backgroundMusic = NSURL(fileURLWithPath: bundle)
            do 
                audioPlayer = try AVAudioPlayer(contentsOf:backgroundMusic as URL)
                guard let audioPlayer = audioPlayer else  return 
                audioPlayer.numberOfLoops = -1 // for infinite times
                audioPlayer.prepareToPlay()
                audioPlayer.play()
             catch 
                print(error)
            
        
    

【讨论】:

不循环

以上是关于在 Swift 中重复播放声音文件?的主要内容,如果未能解决你的问题,请参考以下文章

Swift AVAudioPlayer 不播放声音

使用 Xcode 和 Swift 在 pageControler 中播放声音文件

如何在 Swift 2 中播放声音文件

在 Swift 3 中从数组中播放随机声音

从字符串数组 Swift 播放声音

在其他 swift 文件中调用时,AVAudioPlayer 不会播放声音