1

I have slider, tap gesture, playerNODE. When I touch somewhere on the slider I take the location of slider with tap gesture. I want to change AVAudioPlayerNode play time. The play time must be the location of slider.

func updateProgressBarWithGesture(_ sender: UITapGestureRecognizer) {
    songPlayer.pause()
    songRecorderPlayer.pause()
    videoPlayer.pause()
    let time = sender.location(in: sliderView).x / sliderView.frame.width
    songProgressSlider.value = Float(time)
    let totalTime = songRecorderPlayer.duration

    songPlayer.currentTime = TimeInterval(time * CGFloat(totalTime))
    songRecorderPlayer.currentTime = TimeInterval(time * CGFloat(totalTime))

    let second = time * CGFloat(songRecorderPlayer.duration)
    let videoTime = CMTime.init(value: CMTimeValue(second), timescale: 1)
    videoPlayer.seek(to: videoTime)
    print("                  ")
    print("Song Player: ",songPlayer.currentTime)
    print("Song Recorder Player: ",songRecorderPlayer.currentTime)
    print("Video Player: ",videoTime)

    if playerNODE.isPlaying{
        playerNODE.pause()
        playerNODE.reset()
        let seekTime = TimeInterval(time * CGFloat(totalTime))
        let startingFrame = seekTime * audioFile.processingFormat.sampleRate
        let frameCount: AVAudioFrameCount = (AVAudioFrameCount)(Double(audioFile.length) - startingFrame)
        playerNODE.scheduleSegment(audioFile, startingFrame: AVAudioFramePosition(startingFrame), frameCount: frameCount, at: nil, completionHandler: nil)
        print("Player Node: ",playerNODE.lastRenderTime!)
        playerNODE.play()
        songPlayer.play()
        videoPlayer.play()
    }

}

func updateProgressBar() {
    songProgressSlider.value = Float(songRecorderPlayer.currentTime/songRecorderPlayer.duration)
}
kkakkurt
  • 2,790
  • 1
  • 30
  • 33

0 Answers0