我遇到了类似的问题:
- How do I get the lyrics of the currently playing song in Swift 4? - 这里没有答案
- iPhone song lyrics access - 答案无效
- How to get lyrics for Now Playing song in iOS10 (Swift 3) - 答案无效
我需要获取当前播放歌曲的歌词。
如果我只是尝试从媒体项中获取歌词,我得到的结果是空的:
let musicPlayerController = MPMusicPlayerController.systemMusicPlayer
// ...
if let nowPlayingItem = musicPlayerController.nowPlayingItem {
// We have empty string here
if let lyrics = nowPlayingItem.lyrics {
print("Lyrics: \(lyrics)")
}
}
我尝试按照上面答案中的建议通过 Assets url 获取歌词,但它不起作用, Assets url 始终为零。
let musicPlayerController = MPMusicPlayerController.systemMusicPlayer
// ...
if let nowPlayingItem = musicPlayerController.nowPlayingItem {
if let songUrl = nowPlayingItem.value(forProperty: MPMediaItemPropertyAssetURL) as? URL {
print("song url: \(songUrl)")
let songAsset = AVURLAsset(url: songUrl)
if let lyricsFromAsset = songAsset.lyrics {
print("Lyrics from asset: \(lyricsFromAsset)")
}
}
}
我也尝试过但没有成功(相应地也得到 nil 和空字符串):
print("asset url: \(nowPlayingItem.assetURL)")
print("lyrics from value for property: \(nowPlayingItem.value(forProperty: MPMediaItemPropertyLyrics))")
我确切地知道这首歌有歌词,因为我在 iPhone 上的 Apple Music 应用程序中看到了这首歌。我试图获取这首歌的歌词:Queen - 波西米亚狂想曲。
有人可以帮忙从 Apple Music 获取当前正在播放的歌曲的歌词吗?
最佳答案
我们在这里谈论的是本地文件吗?我不确定它如何处理 Apple Music 文件,但对于本地文件,此方法在检索歌词方面有 100% 的成功率。
extension MPMediaItem {
func lyrics() -> String? {
guard let url = assetURL else { return nil }
let ass = AVAsset(url: url)
return ass.lyrics
}
}
关于ios - 字段 `lyrics` 对于 swift 中当前播放歌曲的 MPMediaItem 是空的,ios 12+,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57264656/