gpt4 book ai didi

ios - 如何在 iOS10 (Swift 3) 中获取正在播放歌曲的歌词

转载 作者:搜寻专家 更新时间:2023-10-31 08:06:01 24 4
gpt4 key购买 nike

我想显示 iOS 系统播放器当前正在播放的歌曲的歌词。

这是我的自定义播放器:

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
}
}

为了从 nowPlaying 项目获取歌词,我尝试了两种方法,它们都总是返回nil

此代码始终返回 nil:

let lyricsText = nowPlaying?.value(forProperty: MPMediaItemPropertyLyrics) as? NSString as String?

在下面的代码中 MPMediaItemPropertyAssetURL 总是返回 nil 而不是实际的 URL:

let songUrl = nowPlaying?.value(forProperty: MPMediaItemPropertyAssetURL) as? NSURL as URL?
if songUrl != nil {
let songAsset = AVURLAsset(url: songUrl!, options: nil)
lyricsText = songAsset.lyrics

All songs are on device (synced by iTunes), contain lyrics (displayed in system player) and non DRM-protected (ripped aac/mp3).

我正在真实设备上对此进行测试:iPhone 6s/iOS 10.3

关于如何获取歌词或为什么 MPMediaItemPropertyAssetURL 返回 nil 的任何建议?

最佳答案

我不知道为什么它不起作用,但看起来相同的代码现在可以正常工作了。也许它以某种方式连接到我现在用于播放器实例的单例。这是 100% 工作的 Swift 3 版本:

import UIKit
import MediaPlayer
import AVFoundation

class NowPlayingController: NSObject {

static let sharedController = NowPlayingController()

//MARK: Init
private override init () {
super.init()

var musicPlayer_Lazy: MPMusicPlayerController?

// System player instance
if musicPlayer_Lazy == nil {
musicPlayer_Lazy = MPMusicPlayerController.systemMusicPlayer()
NotificationCenter.default.addObserver(self,
selector: #selector(self.playingItemDidChange),
name: NSNotification.Name.MPMusicPlayerControllerNowPlayingItemDidChange,
object: musicPlayer_Lazy)
musicPlayer_Lazy!.beginGeneratingPlaybackNotifications()
}

self.musicPlayer = musicPlayer_Lazy!
}

// MARK: Class properties
var musicPlayer: MPMusicPlayerController!
var nowPlaying: MPMediaItem?

// MARK: Methods
func playingItemDidChange(notification: NSNotification) {
nowPlaying = musicPlayer.nowPlayingItem
NotificationCenter.default.post(newSongNotification as Notification)
}

func getLyrics() {
let songUrl = nowPlaying?.value(forProperty: MPMediaItemPropertyAssetURL) as? URL
let songAsset = AVURLAsset(url: songUrl!, options: nil)
let lyricsText = songAsset.lyrics
}
}

关于ios - 如何在 iOS10 (Swift 3) 中获取正在播放歌曲的歌词,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43222995/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com