2017-08-06 3 views
1

私はこれまでどんな曲がデバイス上で現在再生されているのかを知ることができるアプリを作りたいと思っています(例えばspotifyや他のプレイヤーを曲を再生すると、アプリはタイトルを取得できる必要があります)。タイトルは変数に格納されます。Swift IOS:現在の曲のタイトルを取得

nowPlayingInfoまたはMPMediaItemPropertyTitleの使用に成功しませんでした。

誰か助けてくれますか?これは私が試したコードですが、行にエラー(未解決の識別子 'playerItem'を使用)があります:let metadataList = playerItem.asset.metadata as!ローカルフォルダ内のいくつかのmusicsを持っているとのアートワーク、タイトル、アーティスト名やアルバムを取得したい場合は

let metadataList = playerItem.asset.metadata as! [AVMetadataItem] 

の前でvar playerItem = AVPlayerItem(URL: url):[AVMetadataItem]

import UIKit 
import MediaPlayer 
import AVFoundation 
class ViewController: UIViewController { 


var url:NSURL! 
let audioInfo = MPNowPlayingInfoCenter.default() 
var nowPlayingInfo:[String:Any] = [:] 
override func viewDidLoad() { 
    super.viewDidLoad() 
    // Do any additional setup after loading the view, typically from a nib. 
    print(url.path!) 

    let metadataList = playerItem.asset.metadata as! [AVMetadataItem] 
    for item in metadataList { 
     if item.commonKey != nil && item.value != nil { 
      if item.commonKey == "title" { 
       println(item.stringValue) 
       nowPlayingInfo[MPMediaItemPropertyTitle] = item.stringValue 
      } 
      if item.commonKey == "type" { 
       println(item.stringValue) 
       nowPlayingInfo[MPMediaItemPropertyGenre] = item.stringValue 
      } 
      if item.commonKey == "albumName" { 
       println(item.stringValue) 
       nowPlayingInfo[MPMediaItemPropertyAlbumTitle] = item.stringValue 
      } 
      if item.commonKey == "artist" { 
       println(item.stringValue) 
       nowPlayingInfo[MPMediaItemPropertyArtist] = item.stringValue 
      } 
      if item.commonKey == "artwork" { 
       if let image = UIImage(data: item.value as! NSData) { 
        nowPlayingInfo[MPMediaItemPropertyArtwork] = MPMediaItemArtwork(image: image) 
        println(image.description) 
       } 
      } 
     } 
    } 
    audioInfo.nowPlayingInfo = nowPlayingInfo 
+0

試したコードを共有できますか? – Sal

+0

Paul私はいくつかのコードを追加しました – Kenneth

答えて

-2

私はあなたのコードを逃すと思います音楽という名前のモデルを作成し、必要な情報が含まれているmusicArrayを取得する方法を作成できます。

private func getMusics(){ 
     Music.getMusicList { [unowned self] (musics) in 
      self.musics = musics.sorted{$0.title! < $1.title!} 
     } 
    } 

: それはあなたの音楽のタイトル(または他の特性、使用したい)によってソートな音楽を取得すると、この方法でのViewControllerでな音楽を保存するためにvar musics :[Music]?を使用できるように簡単ですモデルの音楽ファイル:

import Foundation 
import UIKit 
import AVFoundation 

struct Music { 
    var artwork : UIImage? 
    var title  : String? 
    var artist : String? 
    var album  : String? 
    var muscicURL : String? 

     init(artwork:UIImage,title:String,artist:String,album:String,muscicURL:String) { 
     self.artwork = artwork 
     self.title = title 
     self.artist = artist 
     self.album = album 
     self.muscicURL = muscicURL 

    } 
static func getMusicList(completion:@escaping ([Music]) -> Void){ 

     var musicImage : UIImage? 
     var musicTitle : String? 
     var musicArtist : String? 
     var musicAlbum : String? 
     var musicURL : String! 

    var musics = [Music]() 

    let folderURL = URL(fileURLWithPath: Bundle.main.resourcePath!) 

    do { 
     let songPaths = try FileManager.default.contentsOfDirectory(at: folderURL, includingPropertiesForKeys: nil, options: .skipsHiddenFiles) 

     _ = songPaths.map({ 
      let songPath = $0.absoluteString 
      if songPath.contains(".mp3"){ 

       musicURL = songPath 
       let mp3Asset = AVURLAsset.init(url: URL(string:songPath)!) 

       for metadataFormat in mp3Asset.availableMetadataFormats { 
        for metadataItem in mp3Asset.metadata(forFormat: metadataFormat){ 

         if metadataItem.commonKey == "artwork",let imageData = metadataItem.value as? Data{ 

          musicImage = UIImage.init(data: imageData)! 

         }else if metadataItem.commonKey == "title",let title = metadataItem.value as? String { 

          musicTitle = title 

         }else if metadataItem.commonKey == "artist",let artist = metadataItem.value as? String { 

          musicArtist = artist 

         }else if metadataItem.commonKey == "albumName",let album = metadataItem.value as? String { 

          musicAlbum = album 
         } 

        } 

       } 
       let music = Music(artwork: musicImage!, title: musicTitle!, artist: musicArtist!, album: musicAlbum!,muscicURL:musicURL!) 
       musics.append(music) 

      } 
     }) 
     completion(musics) 
     // print(musics) 

    } catch let error { 
     print(error.localizedDescription) 

    } 
} 

} 
+0

参考になります:https://stackoverflow.com/questions/28979013/how-do-i-ja-the-album-artwork-of-the-currently-playing-music-using -swift/48035857#48035857 –

関連する問題