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



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

class ViewController: UIViewController {
    let audioPath:NSURL! = NSBundle.mainBundle().URLForResource("SippinOnFire", withExtension: "mp3")
    @IBOutlet var sliderValue: UISlider!
    var player:AVAudioPlayer = AVAudioPlayer()

    @IBAction func play(sender: AnyObject) {
        player.play()
        //println("Playing (audioPath)")
    }
    @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.
    }

}
到目前为止玩。有人可以帮我吗?

您需要添加媒体播放器的导入语句并设置通用媒体项目属性键 为了立即播放属性。对于MpMediaItempropertyArtwork,您需要查看此mpMediaItemartwork

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

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

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()
}

在Leonardo的帮助下,我能够使用以下代码来完成此操作:

@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的帮助!

最新更新