如何在 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 中开始新的活动?