2015-05-29 186 views
2

所以我想用MPMusicPlayer使用它的網址播放歌曲。我已經能夠將音樂信息從MPMediaCollection填充到UITableView。我想要做的是當我點擊tableview行時播放的歌曲在tableview行中具有相同的標題。如何在MPMusicplayerController上播放歌曲URL?

這裏是我的代碼如何填充音樂信息

func mediaPicker(mediaPicker: MPMediaPickerController!, 

    didPickMediaItems mediaItemCollection: MPMediaItemCollection!){ 



     for thisItem in mediaItemCollection!.items as! [MPMediaItem]{ 



      var mediaitem = mediaItemCollection!.items 



      playlistItem = ["music" : mediaitem] 

      playlistItemArray.addObject(playlistItem!) 



      let itemUrl = thisItem.valueForProperty(MPMediaItemPropertyAssetURL) 

       as? NSURL 



      let itemTitle = 

      thisItem.valueForProperty(MPMediaItemPropertyTitle) 

       as? String 



      let itemArtist = 

      thisItem.valueForProperty(MPMediaItemPropertyArtist) 

       as? String 



      var itemArtwork: AnyObject! = thisItem.valueForProperty(MPMediaItemPropertyArtwork) 

      if (itemArtwork != nil) { 

       var listArtwork = itemArtwork.imageWithSize(CGSizeMake (198, 198)) 

       var listArtworkData = UIImagePNGRepresentation(listArtwork) 



       playlistArtwork = ["picture" : listArtworkData] 

       playlistArtworkImage.addObject(playlistArtwork!) 

      }else{ 

       var listNulArtwork = UIImage(named: "noArtworkImage.png") 

       var listNulArtworkData = UIImagePNGRepresentation(listNulArtwork) 

       playlistArtwork = ["picture" : listNulArtworkData] 

       playlistArtworkImage.addObject(playlistArtwork!) 

      } 



      playlist = ["title" : itemTitle! , "artist" : itemArtist! , "songUrl" : itemUrl!] 

      playlistArray.addObject(playlist!) 



     } 



} 

這裏是代碼,我如何填充數據的tableview

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


    let cell = tableView.dequeueReusableCellWithIdentifier("playlistCell", forIndexPath: indexPath) as! UITableViewCell 

    let object = User.playList[indexPath.row] as! NSDictionary 
    let artworkObject = User.playlistArt[indexPath.row] as! NSDictionary 

    let base64String = artworkObject["picture"]!.base64EncodedStringWithOptions(.allZeros) 

    let decodedData = NSData(base64EncodedString: base64String, options: NSDataBase64DecodingOptions(rawValue: 0)) 
    var decodedimage = UIImage(data: decodedData!) 

    (cell.contentView.viewWithTag(1) as! UIImageView).image = decodedimage 
    //(cell.contentView.viewWithTag(1) as! UIImageView).image = image.timelinecircleMask 
    (cell.contentView.viewWithTag(2) as! UILabel).text = object["title"] as? String 
    (cell.contentView.viewWithTag(3) as! UILabel).text = object["artist"] as? String 

    return cell 
} 

,這裏是我的我的播放列表的tableview的截圖

enter image description here

我從MPMediaCollection獲得的是mpmediaitem和歌曲信息(標題,藝術家,網址)字典

如何在播放uitableview行時播放歌曲?

回答

1

所以,是的,我已經解決了這個問題我自己。這真的很簡單其實

我做

第一件事是:

聲明MPMediaItemcollection作爲一個全局變量(放在一個結構

則:

func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) { 
    tableView.deselectRowAtIndexPath(indexPath, animated: false) 

    var mediaItemCollection = User.mdci 
    MPMusicPlayerController().nowPlayingItem = mediaItemCollection!.items[indexPath.row] as! MPMediaItem 
    MPMusicPlayerController().play() 

    getPlayingSongInfo() 

} 

就這樣

0

我建議使用AVAudioPlayer來播放歌曲。

聲明屬性是這樣的:

@property (strong, nonatomic) AVAudioPlayer *audioPlayer; 

初始化您的播放器這樣的:

self.audioPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:url  
                  error:&error]; 
    if (error) { 
     NSLog(@"%@", [error localizedDescription]); 
    } 

播放的歌曲使用:

[audioPlayer play]; 
+0

感謝您的回答,我已經自己解決了:)。我只是製作mpmediacollection golobal,然後我把play動作放到didSelectRowAtIndexPath –

相關問題