Description:
此demo為一音樂播放器,裡面功能包含了播放、暫停、重置音樂。另外可透過slider bar來調整音樂進度和音量。
Component:
Highlight function:
Swift 音樂播放或錄音功能是屬於 AVFoundation library,因此在使用時需先 import 此 library:
import AVFoundation
因本篇是討論播放功能,故只需宣告 AVAudioPlayer 即可。在此 demo 中是播放是先存放好的音樂檔案,宣告及取得檔案方式如下:
var audioPlayer: AVAudioPlayer!
let url = Bundle.main.url(forResource: "ISeeFire", withExtension: "mp3")
do {
audioPlayer = try AVAudioPlayer(contentsOf: url!)
audioPlayer.prepareToPlay()
} catch {
print("Error:", error.localizedDescription)
}
AVAudioPlayer 的播放、暫停及停止其指令相當簡單,如下:
audioPlayer.play()
audioPlayer.pause()
audioPlayer.stop()
透過上述三個功能來實作播放、暫停及停止:
@IBAction func palyBtnAction(sender: AnyObject) {
audioPlayer.play()
if progressTimer == nil {
progressTimer = Timer.scheduledTimer(timeInterval: 1,
target: self,
selector: #selector(PlayerVC.updateProgressSlider),
userInfo: nil,
repeats: true)
}
}
@IBAction func pauseBtnAction() {
stopTimeInterval()
audioPlayer.pause()
}
@IBAction func stopBtnAction() {
stopTimeInterval()
audioPlayer.stop()
audioPlayer.currentTime = 0 // reset player time offset
musicProgress.value = 0
}
使用 slider bar 來改變 AVAudioPlayer 本身的 volume property 以調整音樂大小:
audioPlayer.volume = UISlider.value
Additional:
在拖動音樂進度條時,為了讓拖動時音樂能繼續播放並在使用者手放開後才更新音樂播放進度。在此 demo 中使用touchUpInside 此 event 來完成上述動作。
musicProgress.addTarget(self,
action: #selector(PlayerVC.progressChangeAct),
for: .touchUpInside)
Reference:
Source code on Github