首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从音乐曲目中获取信息的问题

从音乐曲目中获取信息的问题
EN

Stack Overflow用户
提问于 2017-05-30 15:16:03
回答 1查看 208关注 0票数 0

我试图从音乐轨道上获得一些信息,一切都很好,但是有些音乐没有titleartistcover artwork,在这种情况下,我必须提供一个默认值,例如Unknown

我正在用track的信息填充表格视图,如:

代码语言:javascript
复制
//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)))
        }
    }
}

在表视图中:

代码语言:javascript
复制
  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)

}

如果没有来自轨道单元格的数据,例如,用其他轨道信息填充其数据标题!

我试图得到这样的零价值,但没有帮助我:

代码语言:javascript
复制
if metadata.commonKey == "artist" {
                    if let artist = metadata.stringValue {
                        appDefaults.setArtist(Name: artist)
                    } else {
                        appDefaults.setArtist(Name: "Unknown")
                    }
                }
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-06-03 17:15:31

首先尝试设置默认值,然后在找到相应的资产标记时更新它们:

代码语言:javascript
复制
//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循环中设置跟踪持续时间将导致多次不必要地执行。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44266015

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档