2017-03-07 1 views
3

간단한 음악 응용 프로그램을 만들고 있는데, UiSlider를 사용하여 오디오 파일의 진행 상태를 어떻게 확인할 수 있는지 궁금합니다. 여기 내 프로젝트는 지금까지의 :UISlider가 오디오 진행 상황을 일치시키는 방법

Storyboard

코드 :

import UIKit 
import AVFoundation 

class SongDetailViewController: UITableViewController { 

    var audioPlayer = AVAudioPlayer() 

    override func viewDidLoad() { 
     super.viewDidLoad() 

     do { 
      audioPlayer = try AVAudioPlayer(contentsOf: URL.init(fileURLWithPath: Bundle.main.path(forResource: "Song Name", ofType: "mp3")!)) 
      audioPlayer.prepareToPlay() 

      var audioSession = AVAudioSession.sharedInstance() 

      do { 
       try audioSession.setCategory(AVAudioSessionCategoryPlayback) 
      } 
     } 

     catch { 
      print(error) 
     } 
    } 
// Buttons 

// Dismiss 
    @IBAction func dismiss(_ sender: Any) { 
     dismiss(animated: true, completion: nil) 
    } 

// Play 
    @IBAction func play(_ sender: Any) { 
     audioPlayer.stop() 
     audioPlayer.play() 
    } 

// Pause 
    @IBAction func pause(_ sender: Any) { 
     audioPlayer.pause() 
    } 

// Restart 
    @IBAction func restart(_ sender: Any) { 
     audioPlayer.currentTime = 0 
    } 

} 

나는 그것이 오디오 파일의 진행 상황을 다음과 애플의 뮤직 앱과 유사한 uislider을 만들 꿔 때마다 사용자 슬라이드 공놀이 (롤) 그것은 노래의 그 시간으로 간다. 만약 당신이 나를 완료 할 수있는 몇 가지 코드를 줄 수있는, 그 놀라운 것입니다!

나는 코딩에 익숙하지 않고 신속하게 배우고 있으므로 계속 간단하게 유지하십시오 .-- 다시 한번 감사드립니다!

답변

1

AVPlayer으로 전환하면 AVPlayerperiodicTimeObserver을 추가 할 수 있습니다. 당신은 당신의 코드에 audioPlayer을 만들 경우의 예에서 당신은 ... 콜백에게

let player = AVPlayer(url: Bundle.main.url(forResource: "Song Name", withExtension: "mp3")!) 

player.addPeriodicTimeObserver(forInterval: CMTimeMake(1, 30), queue: .main) { time in 

    let fraction = CMTimeGetSeconds(time)/CMTimeGetSeconds(player.currentItem!.duration) 

    self.slider.value = fraction 
} 

을 매 1/30 초를 얻을 수 있습니다 아래 위의 코드로 대체합니다.

+0

위 코드를 사용하여 코드를 100 % 완성 된 곳으로 가져 가실 수 있습니까? 슬라이더 용 IB 콘센트를 끼워야하는 경우에도 그 안에 넣으십시오. 그 확인은? 고마워요 !! – iFunnyVlogger

+1

당신은 스스로 시도 할 수 있다고 생각 하 고, 여전히 문제가 있다면 질문을 업데이트합니까? –

+0

내 코드를 어디에서 코드로 대체해야합니까? – iFunnyVlogger

1

AVAudioPlayer을 사용하면 초당 몇 번 (초당 최대 60 회 이상 - 더 이상 쓸모없는) 주기적 타이머를 만들 수 있으며 오디오 플레이어의 currentTime 속성에 따라 슬라이더를 업데이트 할 수 있습니다. 업데이트를 화면 새로 고침과 동기화하려면 CADisplayLink 타이머를 사용할 수 있습니다.

AVAudioPlayercurrentTime 속성에 키 값 관찰자를 설정하여 관찰자가 변경 될 때마다 값이 변경 될 수 있도록해야합니다. (이것을 시도하지는 않았지만 일 것입니다.)

관련 문제