如何在 MPMusicplayerController 上播放歌曲 URL?

Posted

技术标签:

【中文标题】如何在 MPMusicplayerController 上播放歌曲 URL?【英文标题】:How to play song URL on MPMusicplayerController? 【发布时间】:2015-05-29 04:41:57 【问题描述】:

所以我想使用MPMusicPlayer 的网址播放歌曲。我已经能够将音乐信息从MPMediaCollection 填充到UITableView。我想要做的是当我点击tableview 行时它会播放在tableview 行中具有相同标题的歌曲。

这是我如何填充音乐信息的代码

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

这是我的播放列表表格视图的屏幕截图

我从 MPMediaCollection 得到的是 mpmediaitem 字典和歌曲信息(标题、艺术家、网址)

点击uitableview 行时如何播放歌曲?

【问题讨论】:

【参考方案1】:

所以,是的,我自己解决了这个问题。其实很简单

我要做的第一件事是:

MPMediaItemcollection 声明为全局变量(放入 struct

然后:

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()


就这样

【讨论】:

【参考方案2】:

我建议使用AVAudioPlayer来播放歌曲。

像这样声明一个属性:

@property (strong, nonatomic) AVAudioPlayer *audioPlayer;

像这样初始化你的播放器:

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

要播放歌曲,请使用:

[audioPlayer play];

【讨论】:

感谢您的回答,我已经自己解决了:)。我只是将 mpmediacollection 设置为全局,然后将播放操作设置为 didSelectRowAtIndexPath

以上是关于如何在 MPMusicplayerController 上播放歌曲 URL?的主要内容,如果未能解决你的问题,请参考以下文章

如何在表单提交后保留文本(如何在提交后不删除自身?)

如何在异步任务中调用意图?或者如何在 onPostExecute 中开始新的活动?

在 Avkit 中如何使用这三行代码,以及如何将音乐静音”

如何在 JDBC 中启动事务?

如何在 Fragment 中调用 OnActivityResult 以及它是如何工作的?

如何使用 Firebase 在 Web 上托管 Flutter?它的效果如何?