2017-05-30 2 views
0

Ich versuche, einige Informationen von einem Musiktitel zu erhalten, funktioniert alles gut, aber einige Musik hat keine title, artist und cover artwork, und in diesem Fall habe ich einen Standardwert zum Beispiel zur Verfügung zu stellen Unknown.Ausgabe mit Informationen aus einem Musiktitel bekommen

Ich Füllung Tabellenansicht mit Informationen Spur wie folgt aus:

//MARK: - Get Data From Track : 
func getDataFromTrack(file:URL) { 

    //Get data from track 
    urlAsset = AVURLAsset(url: file) 
    for format in urlAsset.availableMetadataFormats { 

     for metadata in urlAsset.metadata(forFormat: format) { 

      //Track Name : 
      if metadata.commonKey == "title" { 
       if let title = metadata.stringValue { 
        appDefaults.setTrack(Name: title) 
       } else { 
        appDefaults.setTrack(Name: "Unknown") 
       } 
      } 



       //Track Artist: 
      if metadata.commonKey == "artist" { 
        if let artist = metadata.stringValue { 
         appDefaults.setArtist(Name: artist) 
        } else { 
         appDefaults.setArtist(Name: "Unknown") 
        } 
       } 


      //Track Cover: 
      if metadata.commonKey == "artwork" { 
       if let data = metadata.dataValue { 
        let image = UIImage(data: data) 
        appDefaults.setCover(Image: image!) 
       } else { 
        appDefaults.setCover(Image: #imageLiteral(resourceName: "Defualt cover")) 
       } 
      } 


      appDefaults.setTrack(duration: Float(CMTimeGetSeconds(urlAsset.duration))) 
     } 
    } 
} 

In der Tabellenansicht:

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 


... setup cell 

let fileName = player.MP3DirectoryFiles[indexPath.row-2] as! NSString 
      let absoluteFileName = String(describing: fileName.lastPathComponent) 
      let removeSpaceString = absoluteFileName.replacingOccurrences(of: "%20", with: " ") 


      //Get MP3 Infromations 
      let documentsURL = NSURL(fileURLWithPath: NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true).first!,isDirectory: true) 
      let urlToMyPath = documentsURL.appendingPathComponent(removeSpaceString)! 

      player.getDataFromTrack(file: urlToMyPath) 

} 

Wenn keine Daten von der Spur Zelle füllen ihre Daten zum Beispiel Titel mit anderen Spuren Information !

Ich habe versucht, Nullwert wie diese zu bekommen, aber nicht mir helfen:

if metadata.commonKey == "artist" { 
        if let artist = metadata.stringValue { 
         appDefaults.setArtist(Name: artist) 
        } else { 
         appDefaults.setArtist(Name: "Unknown") 
        } 
       } 

Antwort

1

Versuchen Sie, Ihre Standardwerte einstellen ersten und Aktualisieren sie dann, ob und wann die entsprechenden Tags werden für die Anlage gefunden:

//MARK: - Get Data From Track : 
func getDataFromTrack(file:URL) { 
    // Set defaults 
    appDefaults.setTrack(Name: "Unknown") 
    appDefaults.setArtist(Name: "Unknown") 
    appDefaults.setCover(Image: #imageLiteral(resourceName: "Defualt cover")) 
    appDefaults.setTrack(duration: Float(CMTimeGetSeconds(urlAsset.duration))) 

    //Get data from track 
    urlAsset = AVURLAsset(url: file) 
    for format in urlAsset.availableMetadataFormats { 
     for metadata in urlAsset.metadata(forFormat: format) { 

      //Track Name : 
      if metadata.commonKey == "title" { 
       if let title = metadata.stringValue, !title.isEmpty { 
        appDefaults.setTrack(Name: title) 
       } 
      } 

      //Track Artist: 
      if metadata.commonKey == "artist" { 
       if let artist = metadata.stringValue, !artist.isEmpty { 
        appDefaults.setArtist(Name: artist) 
       } 
      } 

      //Track Cover: 
      if metadata.commonKey == "artwork" { 
       if let data = metadata.dataValue { 
        let image = UIImage(data: data) 
        appDefaults.setCover(Image: image!) 
       } 
      } 
     } 
    } 
} 

Der Code, in dem Sie versuchen, den Standardwert festzulegen, wird nie aufgerufen, wenn das Asset den entsprechenden Schlüssel nicht enthält. Wenn Sie außerdem die Dauer der Spur innerhalb der for-Schleifen festlegen, wird dies unnötig oft ausgeführt.

+0

Danke, es hat funktioniert! –

Verwandte Themen