【问题标题】:How to print audio time in format 00:00:00 using AVFundation如何使用 AVFoundation 以 00:00:00 格式打印音频时间
【发布时间】:2016-02-28 12:22:20
【问题描述】:

在我使用AVFoundation 的应用程序中,我在viewDidLoad 中使用NSTimer.scheduledTimerWithTimeInterval(0.1, target: self, selector: "showCurrentAudioProgress", userInfo: nil, repeats: true) 调用函数showCurrentAudioProgress()。我想返回这种时间格式 00:00:00 但我有一个大问题。整个函数如下所示:

var musicPlayer = AVAudioPLayer()

func showCurrentAudioProgress() {
    self.totalTimeOfAudio = self.musicPlayer.duration
    self.currentTimeOfAudio = self.musicPlayer.currentTime

    let progressToShow = Float(self.currentTimeOfAudio) / Float(self.totalTimeOfAudio)
    self.audioProgress.progress = progressToShow

    var totalTime = self.musicPlayer.duration
    totalTime -= self.currentTimeOfAudio

    self.currentTimeTimer.text = "\(currentTimeOfAudio)"
    self.AudioDurationTime.text = "\(totalTime)"  
}

如何将使用 AVAudioPlayer 接收的时间转换为 00:00:00?

【问题讨论】:

    标签: ios iphone swift time avfoundation


    【解决方案1】:

    您可以使用 NSDateComponentsFormatter .Positional 样式和 zeroFormattingBehavior .Pad 来显示您的时间间隔,如下所示:

    extension NSTimeInterval {
        struct DateComponents {
            static let formatterPositional: NSDateComponentsFormatter = {
                let formatter = NSDateComponentsFormatter()
                formatter.allowedUnits = [.Hour,.Minute,.Second]
                formatter.unitsStyle = .Positional
                formatter.zeroFormattingBehavior = .Pad
                return formatter
            }()
        }
        var positionalTime: String {
            return DateComponents.formatterPositional.stringFromTimeInterval(self) ?? ""
        }
    }
    
    print(120.positionalTime)  // 0:02:00
    

    如果您想使用字符串格式初始化程序,可以查看answer

    【讨论】:

      【解决方案2】:

      最简单的解决方案是分别获取hoursminutesseconds,然后合并为一个字符串。为了改进,您可以将其放入 String 类别或扩展中。

      let totalTimeOfAudio = 26343 // number of seconds just for an example
      
      let secondsInMinute = 60
      let minuteInHour = 60
      let secondsInHour = secondsInMinute * minuteInHour
      
      let hours = Float(totalTimeOfAudio / (secondsInHour))
      let minutes = Float(totalTimeOfAudio / minuteInHour % minuteInHour)
      let seconds = Float(totalTimeOfAudio % secondsInMinute)
      
      let string: NSString = NSString(format: "%02.f:%02.f:%02.f", hours, minutes, seconds)
      

      【讨论】:

      • minues 出了点问题,因为即使在下一分钟它仍然是相同的值
      猜你喜欢
      • 2011-06-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-10-23
      • 1970-01-01
      • 2015-03-11
      • 2014-04-10
      • 2015-02-25
      相关资源
      最近更新 更多