Iphone 在数据类型为CMTime的情况下,如何传递浮点值?

Iphone 在数据类型为CMTime的情况下,如何传递浮点值?,iphone,ios,audio,mixing,Iphone,Ios,Audio,Mixing,我正在创建一个应用程序,我必须在其中混合歌曲。我已经完成了这项工作,但问题是当我使用以下函数时 - (BOOL)insertTimeRange:(CMTimeRange)timeRange ofTrack:(AVAssetTrack *)track atTime:(CMTime)startTime error:(NSError **)error; 我必须在atTime参数中传递CMTime类型值,但它不接受浮点值,我必须以某个浮点值添加另一首歌曲。有可能吗?您可以使用其中一个CMTimeMak

我正在创建一个应用程序,我必须在其中混合歌曲。我已经完成了这项工作,但问题是当我使用以下函数时

- (BOOL)insertTimeRange:(CMTimeRange)timeRange ofTrack:(AVAssetTrack *)track atTime:(CMTime)startTime error:(NSError **)error;

我必须在atTime参数中传递CMTime类型值,但它不接受浮点值,我必须以某个浮点值添加另一首歌曲。有可能吗?

您可以使用其中一个
CMTimeMake…()
。必须提供时间点和时间刻度值。前者是64位整数;您只需截断或舍入
浮点值
,将其转换为整数,或使用必要的高时间刻度:

CMTime tm = CMTimeMake(53425, 10000); // @ 5.3425 sec

在Swift 4.2和Xcode 10.1中

CMTimeMake(value: 53425, timescale: 10000)// @ 5.3425 sec

我不需要整数值。这里有一个例子,假设有一首歌的持续时间为10秒,我必须以5.3425秒的速度再混合一首歌。但是由于“atTime”参数只取CMTime值,并且它是整数,当我使用CMTimeMake时(5.3425,1.0);这首歌给了我50万美元的回报,而这首歌的附加值是50万美元,而不是5.3425美元。@Harsh为什么你不能把时间定得合理一些呢?例如,5.3425可以表示为
CMTimeMake(5342510000)
…它工作了!:-)接受你的回答!谢谢,但为什么它不能与CMTimeMake(5.3425,1.0)一起工作@只有在您阅读文档时,才可能出现刺耳的声音。。。函数的第一个参数是分子,第二个参数是分数的分母。它接受整数,所以不管你有一个浮点,C的类型系统都会截断它。@Harsh
CMTimeMake(5.3425,1.0)
失败,因为
timescale
值意味着
CMTimeMake
不会返回任何小于1秒的值<代码>CMTime对象作为一个整体的精度受此数量的限制。例如,如果时间刻度为1,则对象不能表示小于1秒的时间戳,并且时间戳的增量为1秒。类似地,如果时间刻度为1000,则每秒细分为1000个片段,值成员表示我们想要表示的毫秒数。此处的详细信息: