簡體   English   中英

如何使 UISlider 匹配音頻進度

[英]How To Make UISlider match Audio progress

我正在創建一個簡單的音樂應用程序,我想知道如何制作 UiSlider 來跟蹤音頻文件的進度。 到目前為止,這是我的項目:

故事板

代碼:

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
    }

}

我想創建類似於 Apple Music 應用程序的 uislider,它會跟蹤音頻文件的進度,並且每當用戶滑動球(笑)時,它就會轉到歌曲的那個時間。 如果你能給我一些代碼來完成這個,那就太棒了!

請記住,我對編碼還很陌生,並且仍在快速學習,所以請保持簡單:-) 再次感謝!

如果您切換到使用AVPlayer ,您可以在添加periodicTimeObserver到您的AVPlayer 在下面的示例中,您將每 1/30 秒收到一次回調......

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
}

在代碼中創建audioPlayer ,替換為上面的代碼。

使用AVAudioPlayer您可以創建一個周期性計時器,每秒觸發幾次(最多 60 次/秒 - 再多就會浪費)並根據音頻播放器的currentTime屬性更新滑塊。 要將更新與屏幕刷新同步,您可以使用CADisplayLink計時器。


編輯:

我的這部分答案不起作用:

還應該可以在您的AVAudioPlayercurrentTime屬性上設置一個鍵值觀察器,以便每次值更改時您的觀察器都會觸發。 (我沒有試過這個,但它應該可以工作。)


暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM