2015-07-01 10 views
11

Tôi đang xử lý để xây dựng ứng dụng IOS đầu tiên của mình nhanh chóng và tôi gặp khó khăn trong câu hỏi: Cách lấy độ dài (thời lượng) của tệp nhạc khi phát trực tuyến?Swift: AVPlayer - Cách lấy độ dài của tệp mp3 từ URL?

Tôi đã nghiên cứu rất nhiều và cũng viết một số dòng mã để giải quyết vấn đề này nhưng dường như mã của tôi không đủ tốt.

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 

Bất kỳ ai ở đây gặp vấn đề này, bạn có thể cho tôi một số gợi ý khắc phục sự cố không? Tôi rất mới trong Swift và vẫn học cách nâng cao kỹ năng của mình.

Cảm ơn,

Trả lời

3

Tôi đã tạo stuf này trong iOS và hoạt động hoàn hảo.

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

Cảm ơn Chetan, tôi sẽ cố gắng đề cập đến Swift :) –

15

Đối nhanh chóng:

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

Xin chào, Nếu có kết nối internet chậm, nó sẽ dừng toàn bộ ứng dụng ở đó và nếu không có kết nối internet, nó sẽ trả về 0.0. Vì vậy, có cách nào để làm điều đó trong khối? và có bất kỳ thông báo nào được kích hoạt bởi nó khi tài nguyên có sẵn không? – souvickcse

2

Hàm ở phía dưới làm việc với Swift 3.0 và sẽ trả về một giá trị đúp chứa trong suốt thời gian của file đích.

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

này sẽ đưa các tham số resource, bao gồm một String cho filepath của tập tin âm thanh, và sau đó chuyển đổi các giá trị từ một Float64 đến một Double.

+0

cho phép tôi không phân định số nhận dạng thành AVURLAsset – reggie

Các vấn đề liên quan