Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 如何使用AVAudioPlayer在UISlider上进行清理_Ios_Swift_Avaudioplayer_Audio Streaming_Uislider - Fatal编程技术网

Ios 如何使用AVAudioPlayer在UISlider上进行清理

Ios 如何使用AVAudioPlayer在UISlider上进行清理,ios,swift,avaudioplayer,audio-streaming,uislider,Ios,Swift,Avaudioplayer,Audio Streaming,Uislider,所以我使用的是一个非常独特的音频播放器,除了轨道擦洗,其他一切都可以正常工作。应该注意的是,这些曲目是从网站缓冲和收集的。我想这可能与我使用的观察者有关。但我不知道是否真的是这样。我可以调用轨迹的持续时间,并且可以让实际的UISlider与轨迹进程一起进行动画制作。但我不能向前或向后擦洗。最终的结果是,我可以移动滑块,但轨迹的进度不会随之移动。以下是我得到的: override func viewDidLoad() { audio.initialize(config: ["loo

所以我使用的是一个非常独特的音频播放器,除了轨道擦洗,其他一切都可以正常工作。应该注意的是,这些曲目是从网站缓冲和收集的。我想这可能与我使用的观察者有关。但我不知道是否真的是这样。我可以调用轨迹的持续时间,并且可以让实际的UISlider与轨迹进程一起进行动画制作。但我不能向前或向后擦洗。最终的结果是,我可以移动滑块,但轨迹的进度不会随之移动。以下是我得到的:

override func viewDidLoad() {

       audio.initialize(config: ["loop": true]) { (playerItem, change) in
           var duration = CMTimeGetSeconds(playerItem.duration)
           self.scrubSlider.maximumValue = Float(duration)
       }

        scrubSlider.setThumbImage(UIImage(named: "position_knob"), for: .normal)       
}

    override func viewDidAppear(_ animated: Bool) {

        scrubSlider.value = 0.0
        print(audio.seekDuration())
        self.scrubSlider.maximumValue = audio.seekDuration()

        timer = Timer.scheduledTimer(timeInterval: 1, target: self, selector: #selector(self.trackAudio), userInfo: nil, repeats: true)
        print(self.scrubSlider.maximumValue)

    }

@objc func trackAudio() {
          var currentTime = audio.seekCurrentTime()
          print(currentTime)
          scrubSlider.value = currentTime
          var duration = audio.seekDuration()

          let remainingTimeInSeconds = duration - currentTime
          timeElapsedLabel.text = audio.createTimeString(time: currentTime)
          timeRemainingLabel.text = audio.createTimeString(time: remainingTimeInSeconds)



    }

    @IBAction func scrubberValueChanged(_ sender: UISlider) {
        print("Entro")
        var currentTime = (CMTimeGetSeconds((audio.playerQueue?.currentItem!.currentTime())!))
        currentTime = (Float64)((scrubSlider.value))

    }
以下是我收集持续时间的观察者:

      /**
       Setup observers to monitor playback flow
      */
    private func setupObservers(completion: @escaping (AVPlayerItem, Any) -> ()) {

              // listening for current item change
              self.audioQueueObserver = self.playerQueue?.observe(\.currentItem, options: [.new]) { [weak self] (player, _) in

                  print("media item changed...")
                  print("media number ", self?.playerQueue?.items() as Any, self?.playerQueue?.items().count as Any, self?.playerQueue?.currentItem as Any)
                  // loop here if needed //
                  if self?.audioPlayerConfig["loop"] as! Bool == true && self?.playerQueue?.items().count == 0 && self?.playerQueue?.currentItem == nil {
                      self?.playerQueue?.removeAllItems()
                      self?.playerQueue?.replaceCurrentItem(with: nil)
                      for item:AVPlayerItem in (self?.AVItemPool)! {
                        item.seek(to: CMTime.zero)
                          self?.playerQueue?.insert(item, after: nil)
                      }
                      self?.playerQueue?.play()
                  }
              }

              // listening for current item status change
              self.audioQueueStatusObserver = self.playerQueue?.currentItem?.observe(\.status, options:  [.new, .old], changeHandler: { (playerItem, change) in
                  guard let currentItemDuration = self.playerQueue?.currentItem?.duration else { return }
                  if playerItem.status == .readyToPlay {
                      print("current item status is ready")
                      print("media Queue ", self.playerQueue?.items() as Any, self.playerQueue?.items().count as Any)
                      print("item duration ", CMTimeGetSeconds(playerItem.duration))
                      print("itemD ", CMTimeGetSeconds(currentItemDuration))
                      print(currentItemDuration)
                      completion(playerItem, change)
                  }
              })