ios - 字段 `lyrics` 对于 swift 中当前播放歌曲的 MPMediaItem 是空的,ios 12+

标签 ios swift mpmediaitem

我遇到了类似的问题:

我需要获取当前播放歌曲的歌词。

如果我只是尝试从媒体项中获取歌词,我得到的结果是空的:

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/

相关文章:

android - 我是否需要升级到 iOS 和 Android 的最新版本才能使用 Facebook v2.0 API

iOS UIalertView 显示和处理顺序

ios - 请求音乐库权限 swift 或 obj-c

ios - 将约束应用于 Facebook 登录按钮

ios - 无法理解 MPMediaQuery 的行为

iphone - 如何从 iPod 库歌曲中获取歌曲的歌词

ios - ScrollView 不滚动并在底部创建空白

ios - 底部边框不适合文本字段宽度

swift - 如何在 Swift 中获取句子中特定关键字之前的单词?

swift - Firebase 'setValue' 函数重复且不停止 Swift