Swiftでオーディオプレイヤー:UISliderの設置と、曲の再生時間や再生箇所との同期


【Swift】曲の再生時間と総時間をhh:mm:ssの表記でラベルに表示する方法」の続きです。UISliderを設置し、曲の再生時間や再生箇所とSliderを同期させます。UISliderの.valueや、.maximumValueなどが勉強できると思います。前回までのデータをもとに、数行コードを追記しただけです。

できるもの

スクリーンショット 2014-10-22 12.18.15

ソフトのバージョン

OS: OSX Yosemite 10.10
Xcode: 6.1

つくりかた

動画でご確認ください。

コード

太字部分を追記してます。

import UIKit
import AVFoundation

class ViewController: UIViewController {

var audioPath = NSURL(fileURLWithPath: NSBundle.mainBundle().pathForResource(“test”, ofType: “mp3”)!)
var player = AVAudioPlayer()

var timer = NSTimer()

@IBOutlet weak var labelCurrentTime: UILabel!
@IBOutlet weak var labelTotalTime: UILabel!
@IBOutlet weak var btnPlayTitle: UIButton!
@IBOutlet weak var sliderCurrentTime: UISlider!

@IBAction func btnPlay(sender: UIButton) {
if !player.playing {
timer = NSTimer.scheduledTimerWithTimeInterval(1, target: self, selector: Selector(“updatePlayingTime”), userInfo: nil, repeats: true)
player.play()
btnPlayTitle.setTitle(“Pause”, forState: UIControlState.Normal)
} else {
player.pause()
btnPlayTitle.setTitle(“Play”, forState: UIControlState.Normal)
}
}

@IBAction func sliderMove(sender: UISlider) {
player.currentTime = Double(sliderCurrentTime.value)
self.updatePlayingTime()
}

func updatePlayingTime() {
sliderCurrentTime.value = Float(player.currentTime)
labelCurrentTime.text = formatTimeString(player.currentTime)
}

func formatTimeString(d: Double) -> String {
let s: Int = Int(d % 60)
let m: Int = Int((d – Double(s)) / 60 % 60)
let h: Int = Int((d – Double(m) – Double(s)) / 3600 % 3600)
let str = String(format: “%02d:%02d:%02d”, h, m, s)
return str
}

override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
player = AVAudioPlayer(contentsOfURL: audioPath, error: nil)
player.prepareToPlay()
labelTotalTime.text = formatTimeString(player.duration)
sliderCurrentTime.maximumValue = Float(player.duration)
}

override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
}


コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です