AVAdioplayer音频播放器在Uislider崩溃的过程中发挥作用

时间:2016-05-08 08:54:24

标签: xcode swift

所以我正在制作一首播放歌曲的基本音乐应用。它工作正常,直到我手动擦洗歌曲,但当我添加NStimer自动擦除它与播放的歌曲,应用程序崩溃!帮助将不胜感激!

    
    var player:AVAudioPlayer = AVAudioPlayer()


    @IBAction func play(sender: AnyObject) {

        player.play()
    }


    @IBOutlet var volumeSlider: UISlider!

    @IBAction func adjustVolume(sender: AnyObject) {

        player.volume = volumeSlider.value
    }

    @IBOutlet var scrub: UISlider!


    @IBAction func adjustScrub(sender: AnyObject) {

        player.currentTime = NSTimeInterval(scrub.value)
    }

    @IBAction func pause(sender: AnyObject) {

        player.pause()
    }


    @IBAction func stop(sender: AnyObject) {

        player.pause()
        do {

            try player = AVAudioPlayer(contentsOfURL: NSURL(fileURLWithPath: NSBundle.mainBundle().pathForResource("001 JIS GALI MEIN TERA GHAR - KATI PATANG", ofType: "mp3")!))


        }catch{

            //didnt work
        }



    }

    override func viewDidLoad() {
        super.viewDidLoad()

        do {

    try player = AVAudioPlayer(contentsOfURL: NSURL(fileURLWithPath: NSBundle.mainBundle().pathForResource("001 JIS GALI MEIN TERA GHAR - KATI PATANG", ofType: "mp3")!))

            var timer = NSTimer.scheduledTimerWithTimeInterval(0.1, target: self, selector: Selector("updateSlider"), userInfo: nil, repeats: true)

            scrub.maximumValue = Float(player.duration)

        }catch{

            //didnt work
        }

        func updateSlider() {
            scrub.value = Float(player.currentTime)

        }


    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()   

    }    
}

2 个答案:

答案 0 :(得分:0)

很少:为什么要在player方法中重新定义pause()?你已经在viewDidLoad()中做到了。顺便说一句,你在viewDidLoad()里面有一个函数定义,也检查一下。

另一方面,我认为您可能会遇到与您尝试使用方式相关的其他问题。而不是:

do {

            try player = AVAudioPlayer(contentsOfURL: NSURL(fileURLWithPath: NSBundle.mainBundle().pathForResource("001 JIS GALI MEIN TERA GHAR - KATI PATANG", ofType: "mp3")!))

            var timer = NSTimer.scheduledTimerWithTimeInterval(0.1, target: self, selector: Selector("updateSlider"), userInfo: nil, repeats: true)

            scrub.maximumValue = Float(player.duration)

        }catch{

            //didnt work
        }

你必须像

一样使用它
do {
        player = try AVAudioPlayer(contentsOfURL: NSURL(fileURLWithPath: NSBundle.mainBundle().pathForResource("001 JIS GALI MEIN TERA GHAR - KATI PATANG", ofType: "mp3")!))

        var timer = NSTimer.scheduledTimerWithTimeInterval(0.1, target: self, selector: Selector("updateSlider"), userInfo: nil, repeats: true)

        scrub.maximumValue = Float(player.duration)

    } catch let error as NSError {

        print(error)
    }

或者,如果您不想使用整个do - try - catch结构,则可以使用关键字try!。然后你的代码将如下所示:

        player = try! AVAudioPlayer(contentsOfURL: NSURL(fileURLWithPath: NSBundle.mainBundle().pathForResource("001 JIS GALI MEIN TERA GHAR - KATI PATANG", ofType: "mp3")!))

        var timer = NSTimer.scheduledTimerWithTimeInterval(0.1, target: self, selector: Selector("updateSlider"), userInfo: nil, repeats: true)

        scrub.maximumValue = Float(player.duration)

希望这有帮助

答案 1 :(得分:0)

您可以使用JukeBox播放器来传输本地和远程音频文件。它基本上使用AVAudioPlayer播放歌曲,但它可以帮助您管理基本功能,如播放,暂停,滑块跟踪,下一个,上一个。