我目前正在尝试在 ImageView 中显示本地存储的 .MP3 曲目的专辑插图。有谁知道如何在 Swift 中获取这幅作品以完成此任务?
我找到了这个解决方案(iOS AVFoundation: How do I fetch artifact from an mp3 file?),但代码是用 Objective C 编写的。我只是想抓取嵌入在我的 MP3 中的图像并将其显示在我的 ImageView 中。
我查看了 MPMediaItemArtwork 的 API 文档并找到了一个示例,该示例也完成了我在 Objective C 中尝试完成的任务(http://www.codeitive.com/0zHjkUjUWX/not-able-to-get -the-uiimage-from-mpmediaitempropertyartwork.html)但无法提出解决方案。我的代码如下:
import UIKit
import AVFoundation
import MediaPlayer
class ViewController: UIViewController {
let audioPath:NSURL! = NSBundle.mainBundle().URLForResource("SippinOnFire", withExtension: "mp3")
@IBOutlet var artistImage: UIImageView!
@IBOutlet var trackLabel: UILabel!
@IBOutlet var artistLabel: UILabel!
@IBOutlet var sliderValue: UISlider!
var player:AVAudioPlayer = AVAudioPlayer()
@IBAction func play(sender: AnyObject) {
let audioInfo = MPNowPlayingInfoCenter.defaultCenter()
println(audioInfo)
player.play()
//println("Playing \(audioPath)")
let playerItem = AVPlayerItem(URL: audioPath)
let metadataList = playerItem.asset.metadata as! [AVMetadataItem]
for item in metadataList {
if let stringValue = item.value {
println(item.commonKey)
if item.commonKey == "title" {
trackLabel.text = stringValue as? String
}
if item.commonKey == "artist" {
artistLabel.text = stringValue as? String
}
if item.commonKey == "artwork" {
if let audioImage = UIImage(data: item.value as! NSData) {
let audioArtwork = MPMediaItemArtwork(image: audioImage)
println(audioImage.description)
}
}
}
}
}
@IBAction func pause(sender: AnyObject) {
player.pause()
}
@IBAction func stop(sender: AnyObject) {
player.stop()
player.currentTime = 0;
}
@IBAction func sliderChanged(sender: AnyObject) {
player.volume = sliderValue.value
}
override func viewDidLoad() {
super.viewDidLoad()
var error:NSError? = nil
player = AVAudioPlayer(contentsOfURL: audioPath!, error: &error)
player.volume = 0.5;
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
}
这是我的示例 .mp3 文件的屏幕截图。正如您所看到的,在 Finder 的“获取信息”部分中确实可以看到专辑插图。我还在我的 iTunes 中打开了 .mp3 文件,以确保并确认其中的“获取信息”部分以及“艺术品”选项卡下有艺术品。
但是,当尝试使用 commonKey 将图像分配给我的 imageView 时,我发现“艺术品”没有 commonKey。
谢谢