首页 > 解决方案 > 斯威夫特 | macOS | 检索当前播放音乐的曲目标题和艺术家

问题描述

我开始了一个小型项目来尝试学习编写 Swift。我认为编写一个在菜单栏中显示当前正在播放的曲目标题和艺术家信息的MacOS应用程序会很有用。目前我必须打开有问题的应用程序,无论是 Spotify、Apple 的 Music 还是 Tidal,这都会破坏工作流程。

鉴于新的“正在播放”通知小部件已经显示了这一点(无论音频来源如何),我认为为菜单栏做类似的事情会相当简单。

我已经彻底研究并阅读了相关但非常过时的问题,这表明现在唯一可用的播放信息/数据来自 iTunes,但是从那时起事情似乎已经发生了变化,特别是因为 iTunes 将被杀死,所以我重新-询问并希望事情在 2020 年变得更加全球化。

关于我发现nowPlayingInfo的代码,这表明它可能会做我所追求的,但我花了 4 个小时试图让它工作但没有成功。我也看过MPNowPlayingCenter但同样没有结果。

关于设置 “正在播放”信息似乎有很多帮助,但在检索/获取信息方面却很少。

到目前为止,我已经设法编写代码以将文本添加到菜单栏:

    func applicationDidFinishLaunching(_ aNotification: Notification) {

        let statusBar = NSStatusBar.system
        statusBarItem = statusBar.statusItem(
            withLength: NSStatusItem.variableLength)
        statusBarItem.button?.title = "This should be a string of the track name and artist"

    }

我还收集了一些可能有用的代码片段:

        // var nowPlayingInfo: [String : Any](? {})
        // let MPMediaItemPropertyTitle: String
        // let MPMediaItemPropertyArtist: String

        // static let MPMusicPlayerControllerNowPlayingItemDidChange: NSNotification.Name
        // MPNowPlayingPlaybackState

        // class var applicationMusicPlayer: MPMusicPlayerController { get }

        // class MPNowPlayingInfoCenter : NSObject
        // let nowPlaying = MPNowPlayingInfoCenter.defaultCenter().nowPlayingInfo
        // let trackName = nowPlaying.valueForProperty(MPMediaItemPropertyTitle) as String

经过半天的反复试验,Xcode 警告我错误,并进行了大量研究,我正在向堆栈溢出专家寻求一些指导。

标签: swiftmacos

解决方案


因为我不是 Swift 开发人员,所以我无法完全回答这个问题。但是,我可以提供一些见解,因为我正在考虑一个类似的项目来学习 Swift。

  1. systemMusicPlayerMusicKit 的MPMusicPlayerController. 文档说它“返回控制音乐应用程序状态的系统音乐播放器”。它有一个nowPlayingItem可能是你需要的属性。

  2. 有一个名为Emcee的 3rd 方应用程序,它显示当前播放的曲目信息。该网站提到了 iTunes,但我可以确认它可以与 Catalina 中的音乐应用程序一起使用,因此检索当前播放的曲目当然是可能的。它甚至显示歌曲的星级,见截图。(我是新手,所以还不能在答案中嵌入图像,抱歉。)在安装过程中,这个应用程序要求我允许访问音乐应用程序,所以我猜它使用了官方的 Apple Music API。

希望这对您有所帮助,并祝您的项目好运!如果你能成功完成你的任务,请回帖。


推荐阅读