MusicController.swift (1319B)
1 // 2 // MusicController.swift 3 // damus 4 // 5 // Created by William Casarin on 2023-08-21. 6 // 7 import SwiftUI 8 import MediaPlayer 9 10 enum MusicState { 11 case playback_state(MPMusicPlaybackState) 12 case song(MPMediaItem?) 13 } 14 15 class MusicController { 16 let player: MPMusicPlayerController 17 18 let onChange: (MusicState) -> () 19 20 init(onChange: @escaping (MusicState) -> ()) { 21 player = .systemMusicPlayer 22 23 player.beginGeneratingPlaybackNotifications() 24 25 self.onChange = onChange 26 27 print("Playback State: \(player.playbackState)") 28 print("Now Playing Item: \(player.nowPlayingItem?.title ?? "None")") 29 30 NotificationCenter.default.addObserver(self, selector: #selector(self.songChanged(notification:)), name: .MPMusicPlayerControllerNowPlayingItemDidChange, object: player) 31 32 NotificationCenter.default.addObserver(self, selector: #selector(self.playbackStatusChanged(notification:)), name: .MPMusicPlayerControllerPlaybackStateDidChange, object: player) 33 } 34 35 deinit { 36 print("deinit musiccontroller") 37 } 38 39 @objc 40 func songChanged(notification: Notification) { 41 onChange(.song(player.nowPlayingItem)) 42 } 43 44 @objc 45 func playbackStatusChanged(notification: Notification) { 46 onChange(.playback_state(player.playbackState)) 47 } 48 }