gpt4 book ai didi

ios - 下一个轨道AVPlayer如何

转载 作者:搜寻专家 更新时间:2023-11-01 06:16:04 26 4
gpt4 key购买 nike

我尝试了几天来制作一个包含下一首歌曲的按钮,但我做不到
这是我的问题
如何使用 avPlayer 单击按钮放置下一个 екфсл

这是我的密码

class ViewControllerAudioDetail: UIViewController {


var avPlayer:AVQueuePlayer?
var status = false
fileprivate let seekDuration: Float64 = 10
fileprivate let seekDurationThirty: Float64 = 30

var mod = [Modal]()



@IBOutlet weak var ImageView: UIImageView!

@IBOutlet weak var startTime: UILabel!
@IBOutlet weak var endTime: UILabel!
@IBOutlet weak var sliderSong: UISlider!
@IBOutlet weak var name: UILabel!

@IBOutlet weak var Volume: UISlider!
@IBOutlet weak var iconChange: UIButton!


override func viewDidLoad() {
super.viewDidLoad()

Volume.setThumbImage(UIImage(named:"Play.png"), for: .normal)
sliderSong.minimumValue = 0
sliderSong.maximumValue = 1

name.text = mod[thisSong].AudioName
ImageView.image = mod[0].ImageViewAudio


let url = URL(string: mod[thisSong].UrlName!)
let playerItem = AVPlayerItem(url: url!)
avPlayer = AVQueuePlayer(playerItem:playerItem)


let _ = avPlayer!.addPeriodicTimeObserver(forInterval: CMTime(seconds: 1, preferredTimescale: CMTimeScale(NSEC_PER_SEC)), queue: DispatchQueue.main) { [weak self] (time) in

let duration = CMTimeGetSeconds((self?.avPlayer!.currentItem!.asset.duration)!)
self?.sliderSong.value = Float(CMTimeGetSeconds(time)) / Float(duration)

}


let duration = CMTimeGetSeconds(avPlayer!.currentItem!.asset.duration)
let minutesTextOut = Int(duration) / 60 % 60
let secondsTextOut = Int(duration) % 60
let strDuration = String(format:"%02d:%02d", minutesTextOut, secondsTextOut)
endTime.text = strDuration



}

@IBAction func sliderSong(_ sender: UISlider) {

//перемотка аудиозвука
let duration = CMTimeGetSeconds(avPlayer!.currentItem!.asset.duration)
let value = sliderSong.value
let durationToSeek = Float(duration) * value

avPlayer?.seek(to: CMTimeMakeWithSeconds(Float64(durationToSeek),avPlayer!.currentItem!.duration.timescale)) { [](state) in

if (self.iconChange.currentImage?.isEqual(UIImage(named: "Play.png")))! {
self.avPlayer?.pause()
} else if (self.iconChange.currentImage?.isEqual(UIImage(named: "Pause.png")))!{
self.avPlayer?.play()
}
}
}


@IBAction func volume(_ sender: UISlider) {

avPlayer?.volume = sender.value
}



@IBAction func minusThirtySec(_ sender: Any) {

let playerCurrentTime = CMTimeGetSeconds((avPlayer?.currentTime())!)
var newTime = playerCurrentTime - seekDurationThirty

if newTime < 0 {
newTime = 0
}
let time2: CMTime = CMTimeMake(Int64(newTime * 1000 as Float64), 1000)
avPlayer?.seek(to: time2, toleranceBefore: kCMTimeZero, toleranceAfter: kCMTimeZero)


}
@IBAction func minusTenSec(_ sender: Any) {

let playerCurrentTime = CMTimeGetSeconds((avPlayer?.currentTime())!)
var newTime = playerCurrentTime - seekDuration

if newTime < 0 {
newTime = 0
}
let time2: CMTime = CMTimeMake(Int64(newTime * 1000 as Float64), 1000)
avPlayer?.seek(to: time2, toleranceBefore: kCMTimeZero, toleranceAfter: kCMTimeZero)

}

@IBAction func plusTenSec(_ sender: Any) {

guard let duration = avPlayer?.currentItem?.duration else{
return
}
let playerCurrentTime = CMTimeGetSeconds((avPlayer?.currentTime())!)
let newTime = playerCurrentTime + seekDuration

if newTime < (CMTimeGetSeconds(duration) - seekDuration) {

let time2: CMTime = CMTimeMake(Int64(newTime * 1000 as Float64), 1000)
avPlayer?.seek(to: time2, toleranceBefore: kCMTimeZero, toleranceAfter: kCMTimeZero)

}

}
@IBAction func plusThirtySec(_ sender: Any) {

guard let duration = avPlayer?.currentItem?.duration else{
return
}
let playerCurrentTime = CMTimeGetSeconds((avPlayer?.currentTime())!)
let newTime = playerCurrentTime + seekDurationThirty

if newTime < (CMTimeGetSeconds(duration) - seekDuration) {

let time2: CMTime = CMTimeMake(Int64(newTime * 1000 as Float64), 1000)
avPlayer?.seek(to: time2, toleranceBefore: kCMTimeZero, toleranceAfter: kCMTimeZero)

}

}

@IBAction func Next(_ sender: Any) {

let url = URL(string: mod[thisSong].UrlName!)
let playerItem = AVPlayerItem(url: url!)
avPlayer = AVQueuePlayer(playerItem:playerItem)

avPlayer?.insert(playerItem, after: playerItem)
avPlayer?.advanceToNextItem()


// if thisSong + 1 > mod.count {
// thisSong = 0
// } else {
// thisSong += 1
// }
//
//
// if thisSong != mod.count{
//
// name.text = mod[thisSong].AudioName
// player(urlSong:mod[thisSong].UrlName!)
// avPlayer?.play()
//
//
//
// }

}
@IBAction func Back(_ sender: Any) {



// if thisSong != 0{
// thisSong -= 1
// name.text = mod[thisSong].AudioName
// player(urlSong:mod[thisSong].UrlName!)
// avPlayer?.play()
//
//
// }

}




@IBAction func Play(_ sender: Any) {


if avPlayer?.rate == 0 {
avPlayer?.play()
avPlayer?.rate = 1.0
iconChange.setImage(UIImage(named:"Pause.png"), for: .normal)


avPlayer?.addPeriodicTimeObserver(forInterval: CMTimeMakeWithSeconds(1, 1), queue: nil, using: {
(CMTime) -> Void in

self.updateProgressBar()
})



} else {
avPlayer?.rate = 0.0
avPlayer?.pause()
iconChange.setImage(UIImage(named:"Play.png"), for: .normal)

}

}


func player(urlSong:String) {




}



func updateProgressBar(){
let timeNow = Int(avPlayer!.currentTime().value) / Int(avPlayer!.currentTime().timescale)

let minutesText = timeNow / 60
let secondsText = timeNow % 60

let duration = String(format:"%02d:%02d", minutesText, secondsText)
startTime.text = duration

}

tableview 我从这里获取数据

var thisSong = 0


class TableViewControllerAudioList: UITableViewController {


override func viewDidLoad() {
super.viewDidLoad()

tableView.estimatedRowHeight = 50
tableView.rowHeight = UITableViewAutomaticDimension



}

override func numberOfSections(in tableView: UITableView) -> Int {
// #warning Incomplete implementation, return the number of sections
return 1
}

override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
// #warning Incomplete implementation, return the number of rows
return modalsF.count
}


override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {

let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath) as! TableViewCellAudioList

cell.name.text = modalsF[indexPath.row].AudioName
cell.number.text = "\(indexPath.row + 1)"

thisSong = indexPath.row


return cell
}



override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
let vc = segue.destination as? ViewControllerAudioDetail

vc?.mod = [modalsF[(tableView.indexPathForSelectedRow?.row)!]]

}

最佳答案

播放所选/当前歌曲

func play(at index: Int) {
audioPlayer.removeAllItems()
playerItem = audioItems[index]
playerItem?.seek(to: kCMTimeZero)
audioPlayer.insert(playerItem!, after: nil)
audioPlayer.play()
isPlaying = true

self.playAllSongsTableView.reloadData()
}

播放上一首歌曲....

@IBAction func backWordAction(_ sender: UIButton) {
var index = audioItems.index(of: audioPlayer.currentItem!) ?? 0
if index > 0 {
index = index - 1
}
play(at: index)
}

播放下一首歌曲....

@IBAction func forwordAction(_ sender: UIButton) {
var index = audioItems.index(of: audioPlayer.currentItem!) ?? 0
if index < (audioItems.count - 1) {
index = index + 1
}
play(at: index)

}

关于ios - 下一个轨道AVPlayer如何,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44872189/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com