Tôi muốn hiển thị lời bài hát từ bài hát hiện đang được chơi bởi trình phát hệ thống iOS.Cách tải bài hát cho bài hát Now Playing trong iOS10 (Swift 3)
Đây là máy nghe nhạc tùy chỉnh của tôi:
import UIKit
import MediaPlayer
import AVFoundation
class NowPlayingController: NSObject {
var musicPlayer: MPMusicPlayerController {
if musicPlayer_Lazy == nil {
musicPlayer_Lazy = MPMusicPlayerController.systemMusicPlayer()
let center = NotificationCenter.default
center.addObserver(self,
selector: #selector(self.playingItemDidChange),
name: NSNotification.Name.MPMusicPlayerControllerNowPlayingItemDidChange,
object: musicPlayer_Lazy)
musicPlayer_Lazy!.beginGeneratingPlaybackNotifications()
}
return musicPlayer_Lazy!
}
private var musicPlayer_Lazy: MPMusicPlayerController?
var nowPlaying: MPMediaItem?
//If song changes
func playingItemDidChange(notification: NSNotification) {
nowPlaying = musicPlayer.nowPlayingItem
}
}
Để có được lời bài hát từ nowPlaying
mục Tôi đã thử 2 cách tiếp cận và cả trong số họ luôn trở nil
.
Mã này luôn trả về nil:
let lyricsText = nowPlaying?.value(forProperty: MPMediaItemPropertyLyrics) as? NSString as String?
Trong đoạn mã sau MPMediaItemPropertyAssetURL
luôn trả nil
thay vì URL thực tế:
let songUrl = nowPlaying?.value(forProperty: MPMediaItemPropertyAssetURL) as? NSURL as URL?
if songUrl != nil {
let songAsset = AVURLAsset(url: songUrl!, options: nil)
lyricsText = songAsset.lyrics
Tất cả các bài hát được trên thiết bị (đồng bộ hóa bằng iTunes), chứa lời bài hát (hiển thị trong trình phát hệ thống) và không được bảo vệ bởi DRM (đã tắt aac/mp3).
Tôi đang thử nghiệm này trên thiết bị thực: 6s iPhone/iOS 10,3
Bất kỳ lời đề nghị làm thế nào tôi có thể nhận được lời bài hát hay tại sao MPMediaItemPropertyAssetURL trả về nil?
Những ngày này, hầu hết nội dung iTunes được bảo vệ bởi FairPlay DRM hoặc là Apple Music (cũng được bảo vệ bởi FairPlay? Không biết.) & Loại nội dung này luôn trả về một nil 'MPMediaItemPropertyAssetURL'. Bạn chỉ được sử dụng nó trong một thời trang "jukebox", nơi iOS phát nhạc trở lại cho bạn. Các trường hợp sử dụng phức tạp hơn là không thể. –
Bạn đã thử truy cập như dưới đây? 'let lyric = nowPlaying? .lyrics cho assetUrl = nowPlaying? .assetURL' cũng lưu ý rằng – Bluewings
@RhythmicFistman đây không phải là trường hợp, vì nội dung của tôi không phải là nội dung trên iTunes Store. Nhưng dù sao thì tôi cũng đã kiểm tra lại bằng phương thức sau để trả về 'false' (nghĩa là không có DRM trên bài hát):' nowPlaying? .hasProtectedAsset' – dandepeched