我不知道如何在 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)
早上好。
首先,我一直在学习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)