2015-07-01 17 views
11

Sto elaborando la mia prima app IOS in swift e rimango bloccato nella domanda: come ottenere la durata (durata) di un file musicale durante lo streaming?Swift: AVPlayer - Come ottenere la lunghezza del file mp3 dall'URL?

Ho fatto molte ricerche e anche una serie di codici per risolvere questo problema ma sembra che il mio codice non sia abbastanza buono.

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 

qualcuno qui che mai bloccato con questo problema, potrebbe darmi qualche suggerisce per risolvere il problema? Sono molto nuovo in Swift e continuo a imparare a migliorare le mie capacità.

Grazie,

risposta

3

Ho realizzato questo stuf in iOS e perfettamente funzionante.

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

Grazie Chetan, proverò a coprire questo a Swift :) –

15

per SWIFT:

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

Ciao, Se c'è una connessione internet lenta, si sta fermando l'intera app lì, e se non c'è la connessione a Internet sta restituendo 0.0. Quindi c'è un modo per farlo in blocco? e c'è una notifica lanciata da esso quando la risorsa è disponibile? – souvickcse

2

La seguente funzione opera con Swift 3.0 e restituirà un valore Double che contiene la durata del file di destinazione.

func duration(for resource: String) -> Double { 
    let asset = AVURLAsset(url: URL(fileURLWithPath: resource)) 
    return Double(CMTimeGetSeconds(asset.duration)) 
} 

Questo richiederà il parametro resource, costituito da una String per il percorso del file del file audio, e poi convertire il valore da un Float64 ad un Double.

+0

mi fornisce identificatore non risolto per AVURLAsset – reggie

Problemi correlati