我不知道如何在 Swift 或 Objc 中正确使用 CMTimeRange 和 CMTime

I do not know how to properly use CMTimeRange and CMTime in Swift or Objc

早上好。
首先,我一直在学习Swift不到3周就还没开始开发IOS
而我想实现的是对当前用户的音乐文件(mp3)进行截取并显示波形并回放的功能。
我们正在使用一个名为 SCWaveformView 的开源软件来显示波形。

这里是SCWaveformView! 上面提到的库的用法如下


    // 设置资产
    AVAsset *asset = [AVURLAsset URLAssetWithURL:[NSURL URLWithString:@"blabla.mp3"]];
    waveformView.asset = 资产;

    // 仅显示资产的第一秒
    waveformView.timeRange = CMTimeRangeMake(kCMTimeZero, CMTimeMakeWithSeconds(1, 1));

    // 在滚动视图中使用它
    SCScrollableWaveformView *scrollableWaveformView = [SCScrollableWaveformView new];
    scrollableWaveformView.waveformView; // 从那里访问 waveformView

比如我有一个3分25秒的MP3文件。
您可以向用户显示此文件的 15 秒波形并滚动以查看其他波形。
也就是说,用户可见波形的最大长度为15秒。
您可以滚动浏览波形并以 15 秒为增量查看 MP3 文件。
通过滚动 如果开始时间是2分15秒,最多可以看到2分30秒的波形
如果开始时间为2分20秒,则最多可以看到2分45秒的波形。

库似乎不是问题,但我在理解 CMTimeRange 和 CMTime 时遇到了问题。
滚动很慢,有时不起作用。出现以下错误消息:

2016-12-12 15:29:03.568654 AppName[7765:2094292] CMTimeMakeWithSeconds(0.200 秒,时间刻度 1):警告:由于时间刻度非常低而引入 -0.200 错误
2016-12-12 15:29:03.584947 AppName[7765:2094292] CMTimeMakeWithSeconds(0.240 秒,时间刻度 1):警告:由于时间刻度非常低而引入 -0.240 错误
2016-12-12 15:29:03.585166 AppName[7765:2094292] CMTimeMakeWithSeconds(0.240 秒,时间刻度 1):警告:由于时间刻度非常低而引入 -0.240 错误
2016-12-12 15:29:03.602243 AppName[7765:2094292] CMTimeMakeWithSeconds(0.280 秒,时间刻度 1):警告:由于时间刻度非常低而引入 -0.280 错误
2016-12-12 15:29:03.618334 AppName[7765:2094292] CMTimeMakeWithSeconds(0.460 秒,时间刻度 1):警告:由于时间刻度非常低而引入 -0.460 错误
2016-12-12 15:29:03.634987 AppName[7765:2094292] CMTimeMakeWithSeconds(0.480 秒,时间刻度 1):警告:由于时间刻度非常低而引入 -0.480 错误
2016-12-12 15:29:03.651538 AppName[7765:2094292] CMTimeMakeWithSeconds(0.480 秒,时间刻度 1):警告:由于时间刻度非常低而引入 -0.480 错误
2016-12-12 15:29:03.668358 AppName[7765:2094292] CMTimeMakeWithSeconds(0.720 秒,时间刻度 1):警告:由于时间刻度非常低而引入 -0.720 错误
2016-12-12 15:29:03.697401 AppName[7765:2094292] CMTimeMakeWithSeconds(0.340 秒,时间刻度 1):警告:由于时间刻度非常低而引入 -0.340 错误
2016-12-12 15:29:03.715348 AppName[7765:2094292] CMTimeMakeWithSeconds(0.480 秒,时间刻度 1):警告:由于时间刻度非常低而引入 -0.480 错误

我的问题代码如下。

    let musicAsset = AVAsset(url: (item?.assetURL)!)

    self.scwaveScrollView.waveformView.asset = musicAsset

    self.scwaveScrollView.waveformView.precision = 0.25

    self.scwaveScrollView.waveformView.timeRange = CMTimeRangeMake(self.scwaveScrollView.waveformView.timeRange.start, CMTimeMakeWithSeconds(15, 1));

我觉得是我理解错了CMTimeRange和CMTime,但是看了官方文档也不知道具体问题是什么
如何解决问题并得出上述结果?
提前致谢。

我已经用下面的代码解决了上面的问题。

let musicAsset = AVAsset(url: (item?.assetURL)!)

    self.scwaveScrollView.waveformView.asset = musicAsset
    self.scwaveScrollView.waveformView.precision = 1

    var duration = CMTimeMakeWithSeconds( 1.0 * CMTimeGetSeconds(self.scwaveScrollView.waveformView.asset.duration), 100000)

    self.scwaveScrollView.waveformView.timeRange = CMTimeRangeMake(CMTimeMakeWithSeconds(0, 10000), duration);
    let start = self.scwaveScrollView.waveformView.timeRange.start
    duration = CMTime(seconds: 15, preferredTimescale: 1)

    self.scwaveScrollView.waveformView.timeRange = CMTimeRangeMake(start, duration)