사운드 재생 시간에 따라 프로그레스 바를 동적으로 변경하려면 Swift 언어를 사용하여 다음과 같이 할 수 있습니다.
재생 시간 가져오기
먼저, 사운드 파일의 재생 시간을 가져와야 합니다. AVAudioPlayer 클래스를 사용하여 사운드 파일을 재생합니다. 여기서는 “sound.mp3”라는 파일을 예로 들겠습니다.
import AVFoundation
let soundURL = Bundle.main.url(forResource: "sound", withExtension: "mp3")
let player = try AVAudioPlayer(contentsOf: soundURL!)
let duration = player.duration
위의 예제에서 duration
변수에 사운드 파일의 재생 시간이 초 단위로 저장됩니다.
프로그레스 바 업데이트하기
프로그레스 바를 업데이트하기 위해 UIProgressView
클래스를 사용합니다. 스토리보드에서 프로그레스 바를 만들고 아웃렛으로 연결합니다. 여기서는 progressBar
라는 아웃렛을 가정하겠습니다.
import UIKit
@IBOutlet weak var progressBar: UIProgressView!
사운드 파일을 재생하면서 프로그레스 바를 업데이트해야 합니다. 이를 위해 AVAudioPlayerDelegate
프로토콜을 사용하여 audioPlayerDidFinishPlaying(_:successfully:)
메서드를 구현합니다.
extension ViewController: AVAudioPlayerDelegate {
func audioPlayerDidFinishPlaying(_ player: AVAudioPlayer, successfully flag: Bool) {
progressBar.progress = 1.0
}
func audioPlayerUpdateProgress(_ player: AVAudioPlayer) {
let currentTime = player.currentTime
let progress = Float(currentTime / duration)
progressBar.progress = progress
}
}
위의 예제에서 audioPlayerUpdateProgress(_:)
메서드는 재생 시간에 따라 프로그레스 바를 업데이트합니다. 재생이 종료되면 audioPlayerDidFinishPlaying(_:successfully:)
메서드를 사용하여 프로그레스 바를 100%로 설정합니다.
재생 시간 업데이트하기
사운드 파일을 재생하는 동안 재생 시간을 주기적으로 업데이트해야 합니다. 이를 위해 타이머를 사용합니다. 아래의 코드를 사용하여 타이머를 설정합니다.
var timer: Timer?
func startTimer() {
timer = Timer.scheduledTimer(timeInterval: 0.1, target: self, selector: #selector(updateProgress), userInfo: nil, repeats: true)
}
func stopTimer() {
timer?.invalidate()
timer = nil
}
@objc func updateProgress() {
audioPlayerUpdateProgress(player)
}
위의 예제에서 startTimer()
메서드는 타이머를 시작하고, stopTimer()
메서드는 타이머를 정지합니다. updateProgress()
메서드는 주기적으로 호출되어 프로그레스 바를 업데이트합니다. audioPlayerUpdateProgress(_:)
메서드를 호출하여 재생 시간에 따라 업데이트됩니다.
재생 시작하기
위의 예제를 사용하여 재생을 시작해보겠습니다. viewDidLoad()
메서드에서 초기 설정을 진행합니다.
override func viewDidLoad() {
super.viewDidLoad()
player.delegate = self
progressBar.progress = 0.0
}
viewDidAppear(_:)
메서드에서 재생을 시작합니다.
override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(animated)
startTimer()
player.play()
}
이제 사운드 파일을 재생하면서 프로그레스 바가 재생 시간에 따라 동적으로 변경됩니다.