MyMusic Player

使用UIKit來做出放音樂APP

IU推推!!

使用到功能

  1. UIslider 控制播放時間及顯示時間
  2. 控制音量
  3. 使用AVFoundation 及 MediaPlayer 套件

使用到action

  1. 上下一首
  2. Play & Stop
  3. 循環&單首循環
  4. 開關隨機播放

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

https://github.com/carlton0115354/myMusic

--

--