如何在MPMusicplayerController上播放歌曲URL?
问题描述:
所以我想用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的截图
我从MPMediaCollection获得的是mpmediaitem和歌曲信息(标题,艺术家,网址)字典
如何在播放uitableview
行时播放歌曲?
答
所以,是的,我已经解决了这个问题我自己。这真的很简单其实
我做第一件事是:
声明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()
}
就这样
答
我建议使用AVAudioPlayer来播放歌曲。
声明属性是这样的:
@property (strong, nonatomic) AVAudioPlayer *audioPlayer;
初始化您的播放器这样的:
self.audioPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:url
error:&error];
if (error) {
NSLog(@"%@", [error localizedDescription]);
}
播放的歌曲使用:
[audioPlayer play];
感谢您的回答,我已经自己解决了:)。我只是制作mpmediacollection golobal,然后我把play动作放到didSelectRowAtIndexPath –