-3

I have displayed all Songs of the iTunes Music Library in a table view. Now I would like to play the selected song in the table view as soon as the user taps on it.

Here's my Code:

import UIKit
import MediaPlayer

class ViewController: UIViewController, UITableViewDelegate, UITableViewDataSource {
    @IBOutlet var table: UITableView!

    //Create an array with some elements for the table view rows
    var myMusicPlayer = MPMusicPlayerController()
    var allSongsArray: [MPMediaItem]!
    let songsQuery = MPMediaQuery.songsQuery()
    var abcArray = ["A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z", "#"]

    //Define the amount of sections in table view
    func numberOfSectionsInTableView(tableView: UITableView) -> Int {
        return abcArray.count
    }

    //Assign the amount of elements in the array to the amount of rows in one section
    func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
       return allSongsArray.count
    }

    //Set up each element in abcArray as title for section
    func tableView(tableView: UITableView, titleForHeaderInSection section: Int) -> String? {
        return self.abcArray[section] as String
    }

    //Set up the Index Search
    func sectionIndexTitlesForTableView(tableView: UITableView) -> [String]? {
        return abcArray
    }

    //Assign each element in the array a row in table view
    func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {

        var cell = tableView.dequeueReusableCellWithIdentifier("cell")
        var items = allSongsArray[indexPath.row]

        cell?.textLabel?.text = items.title
        cell?.detailTextLabel?.text = items.artist
        var imageSize = CGSizeMake(100, 100)
        cell?.imageView?.image = items.artwork?.imageWithSize(imageSize)

        return cell!
    }

    override func viewDidLoad() {
        super.viewDidLoad()

        self.allSongsArray = songsQuery.items! as [MPMediaItem]
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }
}
rmaddy
  • 314,917
  • 42
  • 532
  • 579
Ruwen
  • 1
  • 4
  • What's your question? What issue are you having? Have you attempted any code to play the song or handle the row selection? – rmaddy Mar 08 '16 at 18:03
  • Actually I don't know, which piece of code fits to play the song...? – Ruwen Mar 08 '16 at 18:05

1 Answers1

0

Use this reference

import UIKit
import AVFoundation



class ViewController: UIViewController,UITableViewDelegate,UITableViewDataSource {

    var player:AVAudioPlayer?

    var audio = ["song1","song2","song3","song4"]
    override func viewDidLoad() {
        super.viewDidLoad()
        let table:UITableView = UITableView()
        let frame = bounds()
        table.frame = CGRectMake(0.0, 64.0, frame.size.width, frame.size.height - 64.0)
        table.delegate = self
        table.dataSource = self
        table.registerClass(UITableViewCell.self, forCellReuseIdentifier: "cell")
        self.view .addSubview(table)

        // Do any additional setup after loading the view, typically from a nib.
    }

    func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {

        return audio.count
    }

    func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {

        let cell:UITableViewCell = tableView.dequeueReusableCellWithIdentifier("cell")! as UITableViewCell
        cell.textLabel?.text = self.audio[indexPath.row]
        return cell
    }

    func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {

//        let details = PlayerViewController(nibName:"PlayerViewController",bundle: nil)
//        details.song = self.audio[indexPath.row] as String?
//        self.navigationController!.pushViewController(details, animated: true)

        player = setupAudioPlayerWithFile(audio[indexPath.row], type: "mp3")
        player?.play()

    }


    func setupAudioPlayerWithFile(file:NSString, type:NSString) -> AVAudioPlayer?  {
        //1
        let path = NSBundle.mainBundle().pathForResource(file as String, ofType: type as String)
        let url = NSURL.fileURLWithPath(path!)

        //2
        var audioPlayer:AVAudioPlayer?

        // 3
        do {
            try audioPlayer = AVAudioPlayer(contentsOfURL: url)
        } catch {
            print("Player not available")
        }

        return audioPlayer
    }




    func bounds() -> CGRect
    {
      return UIScreen.mainScreen().bounds
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }


}
bAthi
  • 341
  • 4
  • 20