【问题标题】:I do not know how to properly use CMTimeRange and CMTime in Swift or Objc我不知道如何在 Swift 或 Objc 中正确使用 CMTimeRange 和 CMTime
【发布时间】:2016-12-12 07:03:09
【问题描述】:

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

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

// 设置资产 AVAsset *asset = [AVURLAsset URLAssetWithURL:[NSURL URLWithString:@"blabla.mp3"]]; 波形视图.资产 = 资产; // 仅显示资产的第一秒 波形视图.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有误解,但是我阅读官方文档时不知道确切的问题。
如何解决问题并得出上述结果?
提前致谢。

【问题讨论】:

    标签: ios objective-c iphone swift waveform


    【解决方案1】:

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

    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)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-04-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-08-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多