从音乐曲目获取信息的问题
Issue with getting information from a music track
我正在尝试从音乐曲目中获取一些信息,一切正常,但有些音乐没有 title
、 artist
和 cover artwork
,在这种情况下我必须提供默认值,例如 Unknown
.
我正在用曲目信息填充 table 视图,如下所示:
//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)))
}
}
}
在 table 视图中:
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)
}
如果曲目单元格中没有数据,请用其他曲目信息填充其数据,例如标题!
我试过像这样得到零值,但没有帮助我:
if metadata.commonKey == "artist" {
if let artist = metadata.stringValue {
appDefaults.setArtist(Name: artist)
} else {
appDefaults.setArtist(Name: "Unknown")
}
}
首先尝试设置默认值,然后在找到资产的相应标签时更新它们:
//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!)
}
}
}
}
}
如果资产不包含适当的键,您尝试设置默认值的代码将永远不会被调用。此外,在 for 循环中设置轨道持续时间将导致它被不必要地执行多次。
我正在尝试从音乐曲目中获取一些信息,一切正常,但有些音乐没有 title
、 artist
和 cover artwork
,在这种情况下我必须提供默认值,例如 Unknown
.
我正在用曲目信息填充 table 视图,如下所示:
//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)))
}
}
}
在 table 视图中:
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)
}
如果曲目单元格中没有数据,请用其他曲目信息填充其数据,例如标题!
我试过像这样得到零值,但没有帮助我:
if metadata.commonKey == "artist" {
if let artist = metadata.stringValue {
appDefaults.setArtist(Name: artist)
} else {
appDefaults.setArtist(Name: "Unknown")
}
}
首先尝试设置默认值,然后在找到资产的相应标签时更新它们:
//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!)
}
}
}
}
}
如果资产不包含适当的键,您尝试设置默认值的代码将永远不会被调用。此外,在 for 循环中设置轨道持续时间将导致它被不必要地执行多次。