Search code examples
iosswiftmp3avaudioplayeravplayer

Pause mp3 file in swift 2.0


I have a problem: I want to create an pause button and when I choose a new song => current song will be stop and play new song. I am very new in swift so I hope you can help me with full code. thank you a lot

this is my code:

import UIKit
import AVFoundation
class ChiTietViewController: UIViewController {
var thamsoTruyen:NSUserDefaults!


override func viewDidLoad() {
    super.viewDidLoad()
    self.view.backgroundColor = UIColor(patternImage: UIImage(named: "nen.jpg")!)
    thamsoTruyen = NSUserDefaults()
    var myplayer:AVPlayer!
    var playeritem: AVPlayerItem!
    var row:Int = thamsoTruyen.objectForKey("number") as! Int
    var url:NSURL = NSURL(string:"http://ozz4u.com/danhsach.php?cot=mp3")!
    var ds:NSString!
    do{
        ds = try NSString(contentsOfURL: url, encoding: NSUTF8StringEncoding)
    } catch{
    }
    var chuoi:[String] = ds.componentsSeparatedByString("#") as [String]

    var error:NSError? = nil
    var u:NSURL = NSURL(string: chuoi[row])!
    playeritem = AVPlayerItem(URL: u)
    myplayer = AVPlayer(playerItem: playeritem)
    let playerlayer = AVPlayerLayer(player: myplayer)
    playerlayer.frame = CGRectMake(0, 0, 10, 15)
    self.view.layer.addSublayer(playerlayer)
    myplayer.play()

}

override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()

}

Solution

  • There is many errors in your code with the fundamentals so I would suggest that you read some more tutorials, especially the swift basic documentation.

    I highlighted them for you and to be honest I dont think its a good idea to continue what you are doing until you get a bit more comfortable with the swift basics.

    import UIKit
    import AVFoundation
    class ChiTietViewController: UIViewController {
    
      //var thamsoTruyen:NSUserDefaults!  //BAD CODE, ALSO BAD NAMING
      let localDefaults = NSUserDefaults.standardUserDefaults()
    
    
           override func viewDidLoad() {
           super.viewDidLoad()
    
           self.view.backgroundColor = UIColor(patternImage: UIImage(named: "nen.jpg")!)
    //thamsoTruyen = NSUserDefaults() // BAD CODE, Delete. Also not calling standardUserDefaults.
    //var my player:AVPlayer! // BAD CODE, Make no sense so delete. This would make only sense if you put it above "ViewDidLoad" so you can use it across your whole class.
    //var playeritem: AVPlayerItem! // See above
    
     var row:Int = thamsoTruyen.objectForKey("number") as! Int // BAD CODE, You are not checking if the object exists but are forcing it to be an Int, which can cause a nil crash. Also you might as well use IntegerForKey when your value is an INT. 
    
    var row = localDefaults.integerForKey("number)" // Better option than above
    
    var url:NSURL = NSURL(string:"http://ozz4u.com/danhsach.php?cot=mp3")!
    var ds:NSString! // Make this optional?
    do{
        ds = try NSString(contentsOfURL: url, encoding: NSUTF8StringEncoding)
    } catch{
    
       // NOT CATCHING ERROR HERE, DANGEROUS 
    }
    var chuoi:[String] = ds.componentsSeparatedByString("#") as [String]
    
    var error:NSError? = nil
    var u:NSURL = NSURL(string: chuoi[row])! // Force unwrapping so you better make sure the array exists.
    
    let playeritem = AVPlayerItem(URL: u)
    let myplayer = AVPlayer(playerItem: playeritem)
    let playerlayer = AVPlayerLayer(player: myplayer)
    playerlayer.frame = CGRectMake(0, 0, 10, 15)
    self.view.layer.addSublayer(playerlayer)
    myplayer.play()
    
    }
    

    Now if you are still looking for an answer to your question check my helper on gitHub, it is very simple and shows you how to pause songs etc.

    https://github.com/crashoverride777/Swift2-Music-Helper