| | |
| | | |
| | | class PayMusicVC: BaseVC{ |
| | | |
| | | enum PayMuiscState { |
| | | case playing |
| | | case pause |
| | | } |
| | | |
| | | private var coverImage:UIImageView! |
| | | private var label_name:UILabel! |
| | | private var btn_handle:UIButton! |
| | |
| | | private var meditationModel:MeditationModel?{ |
| | | didSet{ |
| | | if let m = meditationModel{ |
| | | coverImage.sd_setImage(with: URL(string: m.coverUrl.jq_urlEncoded()),placeholderImage: UIImage(named: "login_top_bg")) |
| | | coverImage.sd_setImage(with: URL(string: m.coverUrl.components(separatedBy: ",").first!.jq_urlEncoded()),placeholderImage: UIImage(named: "login_top_bg")) |
| | | label_name.text = m.meditationTitle |
| | | } |
| | | } |
| | |
| | | make.centerY.equalToSuperview() |
| | | } |
| | | |
| | | btn_handle = UIButton(type: .custom) |
| | | btn_handle.setImage(UIImage(named: "icon_play_purse"), for: .normal) |
| | | btn_handle.setImage(UIImage(named: "icon_play_small"), for: .selected) |
| | | btn_handle.addTarget(self, action: #selector(tapHandleAction), for: .touchUpInside) |
| | | view.addSubview(btn_handle) |
| | | |
| | | btn_handleClose = UIButton(type: .custom) |
| | | btn_handleClose.setImage(UIImage(named: "icon_play_close"), for: .normal) |
| | | btn_handleClose.addTarget(self, action: #selector(closeAction), for: .touchUpInside) |
| | | view.addSubview(btn_handleClose) |
| | | |
| | | let statckView = UIStackView(arrangedSubviews: [btn_handle,btn_handleClose]) |
| | | statckView.axis = .horizontal |
| | | statckView.distribution = .equalSpacing |
| | | statckView.spacing = 18 |
| | | view.addSubview(statckView) |
| | | statckView.snp.makeConstraints { make in |
| | | make.right.equalToSuperview().offset(-24.5) |
| | | make.centerY.equalToSuperview() |
| | | make.width.equalTo(73.5) |
| | | } |
| | | |
| | | label_name = UILabel() |
| | | label_name.text = "--" |
| | | label_name.font = .systemFont(ofSize: 14.8, weight: .bold) |
| | |
| | | label_name.snp.makeConstraints { make in |
| | | make.left.equalTo(self.coverImage.snp.right).offset(17.5) |
| | | make.centerY.equalToSuperview() |
| | | } |
| | | |
| | | btn_handle = UIButton(type: .custom) |
| | | btn_handle.setImage(UIImage(named: "icon_play_purse"), for: .normal) |
| | | btn_handle.setImage(UIImage(named: "icon_play_small"), for: .selected) |
| | | btn_handle.addTarget(self, action: #selector(tapHandleAction), for: .touchUpInside) |
| | | view.addSubview(btn_handle) |
| | | |
| | | btn_handleClose = UIButton(type: .custom) |
| | | btn_handleClose.setImage(UIImage(named: "icon_play_close"), for: .normal) |
| | | btn_handleClose.addTarget(self, action: #selector(closeAction), for: .touchUpInside) |
| | | view.addSubview(btn_handleClose) |
| | | |
| | | let statckView = UIStackView(arrangedSubviews: [btn_handle,btn_handleClose]) |
| | | statckView.axis = .horizontal |
| | | statckView.distribution = .equalSpacing |
| | | statckView.spacing = 18 |
| | | view.addSubview(statckView) |
| | | statckView.snp.makeConstraints { make in |
| | | make.right.equalToSuperview().offset(-24.5) |
| | | make.centerY.equalToSuperview() |
| | | make.right.equalTo(statckView.snp.left) |
| | | } |
| | | } |
| | | |
| | |
| | | make.bottom.equalToSuperview().offset(-(tabBarHeight)) |
| | | } |
| | | vc.startRunloopAni() |
| | | } |
| | | }else{ |
| | | PayMusicVC.updateStatus(.playing) |
| | | } |
| | | } |
| | | } |
| | | |
| | | static func updateStatus(_ state:PayMuiscState){ |
| | | if let tabBarVC = JQ_currentViewController().navigationController?.tabBarController as? BaseTabBarVC{ |
| | | if let vc = tabBarVC.children.filter({$0 is PayMusicVC}).first as? PayMusicVC{ |
| | | vc.btn_handle.isSelected = state == .pause |
| | | switch state { |
| | | case .playing: |
| | | MPNowPlayingInfoCenter.default().playbackState = .playing |
| | | case .pause: |
| | | MPNowPlayingInfoCenter.default().playbackState = .paused |
| | | } |
| | | } |
| | | } |
| | | } |
| | | |
| | | static func hidden(){ |
| | | if let tabBarVC = JQ_currentViewController().navigationController?.tabBarController as? BaseTabBarVC{ |
| | |
| | | AudioPlayer.destroy() |
| | | vc.view.removeFromSuperview() |
| | | vc.removeFromParent() |
| | | MPNowPlayingInfoCenter.default().nowPlayingInfo = nil |
| | | } |
| | | } |
| | | } |
| | |
| | | self.audioPlayer.bgmPlayer?.pause() |
| | | self.audioPlayer.masterPlayer?.pause() |
| | | self.stopRunloopAni() |
| | | PayMusicVC.updateStatus(.pause) |
| | | }else{ |
| | | self.audioPlayer.bgmPlayer?.play() |
| | | self.audioPlayer.masterPlayer?.play() |
| | | self.audioPlayer.masterPlayer?.volume = Float(UserDefaultSettingViewModel.getSetting()?.masterVolume ?? 0.5) |
| | | self.startRunloopAni() |
| | | PayMusicVC.updateStatus(.playing) |
| | | } |
| | | } |
| | | |
| | |
| | | AudioPlayer.destroy() |
| | | } |
| | | |
| | | func playBGMAt(firstPlayIndex:Int,model:MeditationModel,delegate:PayMusicDelegate?){ |
| | | func playBGMAt(firstPlayIndex:Int,model:MeditationModel,delegate:PayMusicDelegate?,coverImage:UIImage? = nil){ |
| | | |
| | | //清除之前的 |
| | | self.urls.removeAll() |
| | | self.masterPlayer?.pause() |
| | | self.bgmPlayer?.pause() |
| | | self.masterPlayer = nil |
| | | self.bgmPlayer = nil |
| | | |
| | | self.delegate = delegate |
| | | self.playIndex = firstPlayIndex |
| | | self.meditationModel = model |
| | |
| | | self.bgmPlayer = AVPlayer(url: self.urls[firstPlayIndex]) |
| | | self.bgmPlayer?.play() |
| | | |
| | | |
| | | if masterUrl != nil{ |
| | | self.masterPlayer = AVPlayer(url: masterUrl!) |
| | | self.masterPlayer?.volume = Float(UserDefaultSettingViewModel.getSetting()?.masterVolume ?? 0.5) |
| | |
| | | weakSelf.next() |
| | | weakSelf.delegate?.playState(.next) |
| | | }else{ |
| | | weakSelf.delegate?.playState(.end) |
| | | PayMusicVC.hidden() |
| | | MPNowPlayingInfoCenter.default().nowPlayingInfo = nil |
| | | weakSelf.bgmPlayer?.pause() |
| | | weakSelf.playIndex = 0 |
| | | weakSelf.bgmPlayer?.replaceCurrentItem(with: AVPlayerItem(url: urls[0])) |
| | | weakSelf.bgmPlayer?.play() |
| | | |
| | | // weakSelf.delegate?.playState(.end) |
| | | // PayMusicVC.hidden() |
| | | // MPNowPlayingInfoCenter.default().nowPlayingInfo = nil |
| | | } |
| | | } |
| | | |
| | |
| | | let asset = weakSelf.bgmPlayer?.currentItem?.asset |
| | | dic[MPMediaItemPropertyPlaybackDuration] = CMTimeGetSeconds(asset!.duration) |
| | | dic[MPMediaItemPropertyArtwork] = MPMediaItemArtwork(boundsSize: CGSize(width: 50, height: 50), requestHandler: { s in |
| | | return UIImage(named: "home_top_bg")! |
| | | |
| | | if let coverImage{ |
| | | return coverImage |
| | | }else{ |
| | | return UIImage(named: "home_top_bg")! |
| | | } |
| | | }) |
| | | MPNowPlayingInfoCenter.default().nowPlayingInfo = dic |
| | | } |
| | | } |
| | | |
| | | //播放完成 |
| | | // NotificationCenter.default.addObserver(self, selector: #selector(playbackEnd), name:NSNotification.Name.AVPlayerItemDidPlayToEndTime, object: nil) |
| | | |
| | | setLockScreen() |
| | | |
| | |
| | | } |
| | | } |
| | | |
| | | func setBGMRate(value:CGFloat){ |
| | | if let v = bgmPlayer?.currentItem?.duration.timescale,v > 0{ |
| | | bgmPlayer?.seek(to: CMTime(seconds: value, preferredTimescale: v)) |
| | | } |
| | | } |
| | | |
| | | /// 播放场景音乐 |
| | | func playSceneAt(_ url:String){ |
| | | guard let URL = URL(string: url) else { return } |
| | |
| | | }else{ |
| | | scenePlayer?.replaceCurrentItem(with: AVPlayerItem(url: URL)) |
| | | } |
| | | DispatchQueue.main.asyncAfter(delay: 3.0) { |
| | | DispatchQueue.main.asyncAfter(delay: 0.5) { |
| | | self.scenePlayer?.play() |
| | | self.scenePlayer?.volume = Float(UserDefaultSettingViewModel.getSetting()?.volume ?? 0.5) |
| | | } |
| | | |
| | | //播放完成 |
| | | // NotificationCenter.default.addObserver(self, selector: #selector(playBGMbackEnd), name:NSNotification.Name.AVPlayerItemDidPlayToEndTime, object: nil) |
| | | NotificationCenter.default.addObserver(self, selector: #selector(playBGMbackEnd), name:NSNotification.Name.AVPlayerItemDidPlayToEndTime, object: nil) |
| | | } |
| | | |
| | | func dellocScene(){ |
| | |
| | | // 播放 |
| | | center.playCommand.addTarget {[unowned self] event in |
| | | self.bgmPlayer?.play() |
| | | PayMusicVC.updateStatus(.playing) |
| | | return .success |
| | | } |
| | | |
| | | // 暂停 |
| | | center.pauseCommand.addTarget {[unowned self] event in |
| | | self.bgmPlayer?.pause() |
| | | PayMusicVC.updateStatus(.pause) |
| | | return .success |
| | | } |
| | | |