MyMusic Player
Published in
6 min readMar 30, 2022
使用UIKit來做出放音樂APP
使用到功能
- UIslider 控制播放時間及顯示時間
- 控制音量
- 使用AVFoundation 及 MediaPlayer 套件
使用到action
- 上下一首
- Play & Stop
- 循環&單首循環
- 開關隨機播放
5. UIslier 控制時間
重點:放音樂
//放音樂function 及 換照片&label
func playSong(number: Int){
//play動作
let fileUrl = Bundle.main.url(forResource: PlayLists[number].name!, withExtension: "mp3")!
let playerItem = AVPlayerItem(url: fileUrl)
player.replaceCurrentItem(with: playerItem)
player.play()
//設定時間
//修改顯示
let duration = CMTimeGetSeconds(playerItem.asset.duration)
maxTIme.text = formatConversion(time: duration)
// 重置slider和播放軌道
songSlider.setValue(Float(0), animated: true)
let TargetTime:CMTime = CMTimeMake(value: Int64(0), timescale: 1)
player.seek(to: TargetTime)
//設定slider最大最小值
let Duration :CMTime = playerItem.asset.duration
let Seconds:Float64 = CMTimeGetSeconds(Duration)
songSlider.minimumValue = 0
songSlider.maximumValue = Float(Seconds)
changeImage(number: number)//換第N照片
changeLabel(number: number)//第N首歌資訊
}
上下一首
有判斷是否單首循環與隨機播放
//上一首&下一首
@IBAction func nextSong(_ sender: UIButton) {
print(randomButton.tag)
if oneSong.tag == 0 { //單首循環
if randomButton.tag == 0 {
if sender.tag == 0 { //判斷是下一首 還是 上一首
if index == PlayLists.count - 1 { //若是最後一首,會跳到第一首
index = 0
} else {
index = index + 1
}
} else {
if index == 0 { //若是第一首,會跳到最後一首
index = PlayLists.count - 1
} else {
index = index - 1
}
}
} else {
index = Int.random(in: 0...PlayLists.count - 1)
}
}
playSong(number: index)//放音樂
CurrentTime() //讓slider跟著動
}
2. Play & Stop
//播放&暫停
@IBAction func playAndStop(_ sender: UIButton) {
print(player.rate)
if player.rate == 0 { //如果是暫停時,觸控代表放音樂
player.play()
stopSong.setImage(stopImage, for: .normal)
} else {
player.pause()
stopSong.setImage(playImage, for: .normal)
}
}
3. 循環&單首循環
//單曲循環按鈕
@IBAction func openCloseOneSony(_ sender: UIButton) {
if oneSong.tag == 0 { //開啟單首循環
print("開啟單首循環")
oneSong.setImage(loopModeOnIcon, for: .normal)
oneSong.tag = 1
} else {
print("關閉單首循環")
oneSong.setImage(loopModeOffIcon, for: .normal)
oneSong.tag = 0
}
print(oneSong.tag)
}
4. 開關隨機播放
//隨機&按照順序播放按鈕
@IBAction func randomAndOrder(_ sender: UIButton) {
if sender.tag == 1 { //開啟隨機
randomButton.setImage(orderSonyImage, for: .normal)
print("關閉隨機")
randomButton.tag = 0
} else { //關閉隨機
randomButton.tag = 1
print("開啟隨機")
randomButton.setImage(randomSonyImage, for: .normal)
}
print(randomButton.tag)
}
5. Slider 控制時間
//拖曳slider 會控制音樂幾分幾秒
@IBAction func SongSliderAction(_ sender: UISlider) {
let Seconds : Int64 = Int64(songSlider.value)
// 計算秒數
let TargetTime :CMTime = CMTimeMake(value: Seconds, timescale: 1)
// 設定player播放進度
player.seek(to: TargetTime)
}
附上操作影片
附上Github