当Uislader崩溃时,AVaudioplayer音频播放器进程



所以我正在制作一个播放歌曲的基本音乐应用程序。在我手动擦除歌曲之前,它运行良好,但当我添加NStimer以在播放歌曲时自动擦除时,应用程序崩溃!我们将不胜感激!

var播放器:AVAudioPlayer=AVAudioPayer()@IBAction函数播放(发件人:AnyObject){player.play()}@IBOutlet var volumeSlider:UISlider!@IBAction函数adjustVolume(发送方:AnyObject){player.volume=卷Slider.value}@IBOutlet var磨砂膏:UISlider!@IBAction函数adjustScrub(发件人:AnyObject){player.currentTime=NSTimeInterval(scrub.value)}@IBAction函数暂停(发件人:AnyObject){player.pause()}@IBAction函数停止(发件人:AnyObject){player.pause()做{try-player=AVAudioPlayer(contentsOfURL:NSURL(fileURLWithPath:NSBundle.mainBundle().pathForResource("001 JIS GALI MEIN TERA GHAR-KATI PATANG",类型:"mp3"))}捕获{//不起作用}}重写函数视图DidLoad(){super.viewDidLoad()做{try-player=AVAudioPlayer(contentsOfURL:NSURL(fileURLWithPath:NSBundle.mainBundle().pathForResource("001 JIS GALI MEIN TERA GHAR-KATI PATANG",类型:"mp3"))var timer=NSTimer.scheduledTimerWithTimeInterval(0.1,目标:self,选择器:selector("updateSlider"),userInfo:nil,repeats:true)scrub.maximumValue=浮动(玩家持续时间)}捕获{//不起作用}函数updateSlider(){scrub.value=浮动(player.currentTime)}}重写函数didReceiveMemoryWarning(){super.didReceiveMemoryWarning()}}

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

另一方面,我认为你可能会遇到另一个与你使用try的方式有关的问题。代替:

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)

希望这能帮助

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

最新更新