web-dev-qa-db-ja.com

Swift:AVPlayer-URLからmp3ファイルの長さを取得する方法

私は自分の最初の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で非常に新しいですが、それでも自分のスキルを向上させることを学びます。

おかげで、

17
Dai Bui

Swiftの場合:

let asset = AVURLAsset(URL: NSURL(fileURLWithPath: pathString), options: nil)
let audioDuration = asset.duration
let audioDurationSeconds = CMTimeGetSeconds(audioDuration)
22
Jay

次の関数は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に変換します。

7
CodeBender

私はiOSでこのstufを作成し、完全に動作しました。

AVURLAsset* audioAsset = [AVURLAsset URLAssetWithURL:audioUrl options:nil];
CMTime audioDuration = audioAsset.duration;
float audioDurationSeconds = CMTimeGetSeconds(audioDuration);
5

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
0
DoesData