私は自分の最初のIOS app in Swiftを作成するプロセスですが、私は質問に行き詰まります:音楽ファイルの長さ(期間)を取得する方法ストリーミング?
私は多くのことを研究し、この問題を解決するためにいくつかのコード行を書きましたが、私のコードは十分ではないようです。
func prepareAudio() {
audioLength = CMTimeGetSeconds(self.player.currentItem.asset.duration)
playerProgressSlider.maximumValue = CFloat(CMTimeGetSeconds(player.currentItem.duration))
playerProgressSlider.minimumValue = 0.0
playerProgressSlider.value = 0.0
showTotalSurahLength()
} // i prepare for get the duration and apply to UISlider here
func showTotalSurahLength(){
calculateSurahLength()
totalLengthOfAudioLabel.text = totalLengthOfAudio
} // get the right total length of audio file
func calculateSurahLength(){
var hour_ = abs(Int(audioLength/3600))
var minute_ = abs(Int((audioLength/60) % 60))
var second_ = abs(Int(audioLength % 60))
var hour = hour_ > 9 ? "\(hour_)" : "0\(hour_)"
var minute = minute_ > 9 ? "\(minute_)" : "0\(minute_)"
var second = second_ > 9 ? "\(second_)" : "0\(second_)"
totalLengthOfAudio = "\(hour):\(minute):\(second)"
} // I calculate the time and cover it
この問題で立ち往生している人がいますが、それを修正するための提案を教えていただけますか?私はSwiftで非常に新しいですが、それでも自分のスキルを向上させることを学びます。
おかげで、
Swiftの場合:
let asset = AVURLAsset(URL: NSURL(fileURLWithPath: pathString), options: nil)
let audioDuration = asset.duration
let audioDurationSeconds = CMTimeGetSeconds(audioDuration)
次の関数はSwift 3.0で機能し、ターゲットファイルの期間を含むDouble値を返します。
func duration(for resource: String) -> Double {
let asset = AVURLAsset(url: URL(fileURLWithPath: resource))
return Double(CMTimeGetSeconds(asset.duration))
}
これは、オーディオファイルのファイルパスのresource
で構成されるString
パラメーターを受け取り、値をFloat64
からDouble
に変換します。
私はiOSでこのstufを作成し、完全に動作しました。
AVURLAsset* audioAsset = [AVURLAsset URLAssetWithURL:audioUrl options:nil];
CMTime audioDuration = audioAsset.duration;
float audioDurationSeconds = CMTimeGetSeconds(audioDuration);
AVPlayerItem
から期間を取得できます
let item = AVPlayerItem(url: URL(string: "myURL.com")!)
let seconds = urlAsset.duration.seconds
AVPlayer
から:
let player = AVPlayer(playerItem: item)
let duration = player.currentItem?.duration.seconds