swift - 斯威夫特 | 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 警告我错误,并进行了大量研究,我正在向堆栈溢出专家寻求一些指导。
解决方案
因为我不是 Swift 开发人员,所以我无法完全回答这个问题。但是,我可以提供一些见解,因为我正在考虑一个类似的项目来学习 Swift。
在
systemMusicPlayer
MusicKit 的MPMusicPlayerController
. 文档说它“返回控制音乐应用程序状态的系统音乐播放器”。它有一个nowPlayingItem
可能是你需要的属性。有一个名为Emcee的 3rd 方应用程序,它显示当前播放的曲目信息。该网站提到了 iTunes,但我可以确认它可以与 Catalina 中的音乐应用程序一起使用,因此检索当前播放的曲目当然是可能的。它甚至显示歌曲的星级,见截图。(我是新手,所以还不能在答案中嵌入图像,抱歉。)在安装过程中,这个应用程序要求我允许访问音乐应用程序,所以我猜它使用了官方的 Apple Music API。
希望这对您有所帮助,并祝您的项目好运!如果你能成功完成你的任务,请回帖。
推荐阅读
- r - 如何删除r中的括号和内部文本?
- html - 如何强制顶部的 Div 成为唯一可滚动的东西
- linux - 如何在 linux 中将 .txt 文件转换为 ReST
- javascript - 在 Google 可视化时间轴中更改列描边的颜色
- azure-active-directory - 不清楚要使用什么端点,或者在 AAD 中选择什么应用程序类型
- php - 试图在 postcount 上对我的 foreach 循环结果进行排序
- php - Date format M-Y
- sql-server - 使用 GetDate() 作为 T-SQL 中 SP 的默认参数不起作用
- php - 从大表中分块提取报告
- linux - 每当我尝试安装“io”包时,octave 都会对我的 c++ 编译器进行无效调用