使用Swift显示当前播放.MP3的标题

时间:2015-05-13 13:15:36

标签: ios swift audio audio-player artwork

我想知道是否有一种直接的方式来显示我的音乐播放器正在播放的当前正在播放的MP3文件的图像和标题。我的代码如下,对于这个例子非常简单。我只想使用我的项目中包含的一个.MP3进行测试。

 if (typeof payment !== 'undefined' && $.isFunction(payment)) {
    $('[data-numeric]').payment('restrictNumeric');
    $('.cc-number').payment('formatCardNumber');
    $('.cc-exp').payment('formatCardExpiry');
    $('.cc-cvc').payment('formatCardCVC');
 }

到目前为止,我能够打印到MP3文件的完整路径,但是无法使用显示在项目中显示为我的MP3封面图片的图像,或者只显示轨道的标题播放。有人可以帮我解决这个问题吗?

2 个答案:

答案 0 :(得分:10)

您需要为Media Player添加import语句并设置 General Media Item Property Keys  对于nowPlayingInfo财产。对于MPMediaItemPropertyArtwork,您需要查看此MPMediaItemArtwork

import MediaPlayer

let audioInfo = MPNowPlayingInfoCenter.defaultCenter()
let audioName = audioPath.lastPathComponent!.stringByDeletingPathExtension
audioInfo.nowPlayingInfo = [ MPMediaItemPropertyTitle: audioName, MPMediaItemPropertyArtist:"artistName"]

要从mp3中提取元数据,您需要创建一个AVPlayerItem并访问其资产commonMetadata属性

let playerItem = AVPlayerItem(URL: audioPath)
let metadataList = playerItem.asset.commonMetadata as! [AVMetadataItem]
for item in metadataList {
    if item.commonKey == "title" {
        println("Title = " + item.stringValue)
    }
    if item.commonKey == "artist" {
        println("Artist = " + item.stringValue)
    }
}       

注意:您必须调用beginReceivingRemoteControlEvents(),否则它将无法在实际设备上运行。

override func viewDidLoad() {
    super.viewDidLoad()
    UIApplication.sharedApplication().beginReceivingRemoteControlEvents()
}

答案 1 :(得分:1)

在莱昂纳多的帮助下,我能够使用以下代码完成此任务:

@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.commonMetadata as! [AVMetadataItem]


    for item in metadataList {
        if let stringValue = item.value as? String {
           println(item.commonKey)
            if item.commonKey == "title" {
                trackLabel.text = stringValue
            }
            if item.commonKey == "artist" {
                artistLabel.text = stringValue
            }

        }
    }
}

你可以有选择地选择你想要使用的公共密钥,如果这样的语句,并将文本打印到这样的标签:

            if item.commonKey == "title" {
                trackLabel.text = stringValue
            }
            if item.commonKey == "artist" {
                artistLabel.text = stringValue
            }

感谢Leonardo的帮助!