ios - 如何在 swift 中获取 mp3 文件的艺术作品(很重要,因为对象方法不起作用)

标签 ios swift mp3 avurlasset

我发现很多oc方法都说使用这段代码

*******metadata 是一个 AVMetadataItem 类

 NSString *path =[ [NSBundle mainBundle]  pathForResource:@"musicname" ofType:@"mp3"];

     NSURL  *fileURL = [NSURL  fileURLWithPath:path];

      AVURLAsset *avURLAsset = [[AVURLAsset alloc] initWithURL:fileURL options:nil];

      for (NSSting *format  in [avURLAsset availableMetadataFormats]){

              for (AVMetadataItem *metadata in [avURLAsset metadataForFormat:format]){

                  if([metadata.commonKey isEqualToString:@"title"]){

                        NSSting *title = (NSSting *)metadata.value;

                   }

                  if([metadata.commonKey isEqualToString:@"artwork"]){

                       UIImage *coverImage = [UIImage imageWithData:[(NSDictionary *)metadata.value objectForKey:@"data"]];

                  }


               }

      }

我使用 swift 进行编程,所以我尝试像这样在 swift 中进行编程

func getArtworkForTrack(trackNumber: Int) -> NSData {
    let asset = trackAVURLAssets[trackNumber]
    var artworkData: NSData = NSData()
    for metadata in asset.metadata {
        if let commonKey = metadata.commonKey {
            if commonKey == "artwork" {
                if let keySpace = metadata.keySpace {
                    if keySpace == AVMetadataKeySpaceiTunes {
                        print("keyspace == AVMetadataKeySpaceiTunes")
                        artworkData = (metadata.value?.copyWithZone(nil))! as! NSData
                    } else {
                        let dic = metadata.value as! NSDictionary
                        let image = UIImage(data: dic.objectForKey("data") as! NSData)
                    }
                }
            }
        }
    }

    return artworkData
}

但是当我运行时,出现运行时错误:

Could not cast value of type '__NSCFData' (0xbdbe94) to 'NSDictionary' (0xbdc394).
(lldb) 

在这一行:

let dic = metadata.value as! NSDictionary

谁能告诉我怎么解决这个问题,谢谢!

最佳答案

如果 AVMetadataItem 值是原始数据格式,它应该可以通过 .dataValue 访问。

在你的情况下,可能是这样的:

if let data = metadata.dataValue {
    let image = UIImage(data: data)
}

关于ios - 如何在 swift 中获取 mp3 文件的艺术作品(很重要,因为对象方法不起作用),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33409795/

相关文章:

c# - 任何人都知道制作 MP3 Tag 应用程序需要什么?

ffmpeg 将任何音频格式转换为与 Flash 播放器兼容的音频

javascript - 区分应用程序访问的 Wifi 连接

ios - Xcode 7.2 Swift - 无法在 Main.storyboard 上拖放、移动标签

ios - 我在 Swift 2 中使用 MailCore2 时出错

swift - 如何在swift中向变量添加时间函数

ios - 避免在 UIImageView 中使用白色背景

ios - Firebase 通知仅出现在一台设备上

ios - 如何在 swift 中使用不同的闭包类型

用于比较 MP3 内容的 java api?