Search code examples
xcode8itunesnsfilemanagerswift2mpmediapickercontroller

How to access the media library with Swift code?


I have to display a title of the song which I was selected I get the title(No need to play the song in the music library).What my question is I want to send song I was selected(Encoded) to PHP server..To display the song in a table view from the server and play the song...I want to find the correct path for iTunes music library so that I can encode easily.

func mediaPicker(mediaPicker: MPMediaPickerController, didPickMediaItems      mediaItemCollection: MPMediaItemCollection) {

    let documentsUrl =  NSFileManager.defaultManager().URLsForDirectory(.DocumentDirectory, inDomains: .UserDomainMask).first!

    do {
        // Get the directory contents urls (including subfolders urls)
        let directoryContents = try NSFileManager.defaultManager().contentsOfDirectoryAtURL( documentsUrl, includingPropertiesForKeys: nil, options: [])

        let mp3Files = directoryContents.filter{ $0.pathExtension == "m4a" }
        let mp3FileNames = mp3Files.flatMap({$0.URLByDeletingPathExtension?.lastPathComponent})

    } catch let error as NSError {
    }
    let name = "/aFileName"
    var filePath = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true).first
    print("\nfilePath: \(filePath)")

    filePath = filePath!.stringByAppendingString(name)
    print("\nfilePath: \(filePath)")

    var filePathURL = NSURL.fileURLWithPath(filePath!)
    print("\nfilePathURL: \(filePathURL)")


    let item: MPMediaItem = mediaItemCollection.items[0]
    print(item)
    exportFiles = (item.valueForProperty(MPMediaItemPropertyAssetURL) as? NSURL)!
    print(exportFiles)        
    // Export the ipod library as .m4a file to local directory for remote upload
    let exportSession = AVAssetExportSession(asset: AVAsset(URL: exportFiles), presetName: AVAssetExportPresetAppleM4A)
    print(exportFiles)

    exportSession?.shouldOptimizeForNetworkUse = true
    print(exportSession)

    playingMusictitle = item.valueForProperty(MPMediaItemPropertyTitle) as? String ?? "Now Playing..."
    print("\(exportFiles), title : \(title) ")
    let str = exportFiles.absoluteString
    let str2 = str!.stringByReplacingOccurrencesOfString("ipod-library://item/item", withString: "")
    print(str2)

    let arr = str2.componentsSeparatedByString("?")


    mimeType = mimeType1.stringByReplacingOccurrencesOfString("id=", withString: "")


    let path = item.valueForProperty(MPMediaItemPropertyLyrics) as? String ?? ""
    print(path)


    exportSession?.outputFileType = AVFileTypeAppleM4A
    let documentsDirectory = NSFileManager.defaultManager().URLsForDirectory(.DocumentDirectory, inDomains: .UserDomainMask)[0]

    let format = NSDateFormatter()
    format.dateFormat="yyyy-MM-dd-HH-mm-ss"
    audioname = "\(playingMusictitle)-\(format.stringFromDate(NSDate())).m4a"
    print(audioname)

    let documentsDirectoryy = NSFileManager.defaultManager().URLsForDirectory(.DocumentDirectory, inDomains: .UserDomainMask)[0]
    self.soundFileURL = documentsDirectoryy.URLByAppendingPathComponent(audioname)

    if NSFileManager.defaultManager().fileExistsAtPath(soundFileURL.absoluteString!) {
        // probably won't happen. want to do something about it?
        print("soundfile \(soundFileURL.absoluteString) exists")
    }

Solution

  • Due to copyright protection you can only play songs from music library. You can't access row audio file!.I guess