2011-09-14 77 views
0

我正在使用AVAudioPlayer製作自己的音頻播放器。AVAudioPlayer currentTime超過持續時間

注:「P」是我的球員的情況下

這裏是我如何讀一個標籤的跟蹤進展:

currentTime.text = [NSString stringWithFormat:@"%d:%02d", (int)p.currentTime/60, (int)p.currentTime % 60]; 

下面是如何設置的總持續時間跟蹤標籤之一:

int seconds = (int)p.duration % 60; 
    int minutes = (int)p.duration/60; 

    duration.text = [NSString stringWithFormat:@"%d:%02d", minutes, seconds]; 

當我在設備上運行該應用程序,該軌道的當前時間總是超過的持續時間(由約5-10秒)。

這是AVAudioPlayer中的錯誤,還是我做得不正確?

注意:此行爲也會發生設備(不只是在模擬器)

回答

1

通過使用60%找到秒鐘後,你應該將剩餘的分鐘的時候,除去那些秒。例如,在找到59秒後總共持續119秒,您應該從119中刪除該值,然後在60秒內進行分鐘轉換(119-59)。這可能會解決你的問題。

1

分鐘應爲浮點數:152 seconds/60.0f = 2.5333不是2。 話雖這麼說,如果你想顯示剩餘分鐘沒有秒你已經獲得:int minutes = (p.duration-seconds)/60

此外,爲了更好的方法來格式化時間,你想要的方式,在看看第二個答案this問題(而不是接受的解決方案)。

+0

我顯示格式爲mm:ss因此,我要失去在除法運算餘數,正在顯示作爲我開始使用秒mod操作。 – Sid

+0

那麼'int minutes =(p.duration-seconds)/ 60'有什麼問題? –

0

下面是函數:

func setTimeString(duration: Double)->String { 

    var audioDurationSeconds = duration 
    var expression = "" 
    var minutesString = "00" 
    var minutesFloat = 0.0 

    if (audioDurationSeconds)/60 >= 1 { 

     minutesFloat = (audioDurationSeconds)/60 
     audioDurationSeconds = TimeInterval(Int(audioDurationSeconds)%60) 

     if minutesFloat < 10.0 { 
      minutesString = String.init(format: "0%.f", floor(minutesFloat)) 

     } else { 
      minutesString = String.init(format: "%.f", floor(minutesFloat)) 
     } 
    } 

    if audioDurationSeconds < 10.0 { 
     expression = String.init(format: "%@:0%i", minutesString, Int(audioDurationSeconds)) 
    } else { 
     expression = String.init(format: "%@:%i", minutesString, (Int(audioDurationSeconds))) 
    } 

    return expression 
} 
0
extension UILabel{ 

    func getTimeString(from duration:Double) -> String{ 

     let hours = Int(duration/3600) 
     let minutes = Int(duration/60) % 60 

     let seconds = Int(duration.truncatingRemainder(dividingBy: 60)) 
     if hours > 0 { 
      return String(format: "%i:%02i:%02i", arguments: [hours,minutes,seconds]) 
     }else { 
      return String(format: "%02i:%02i", arguments: [minutes,seconds]) 
     } 

    } 
相關問題