AVMutableCompositionTrack - insertTimeRange - insertEmptyTimeRange问​​题

时间:2010-10-24 13:30:22

标签: iphone audio avfoundation

我有一个奇怪的问题:我想用两个声音文件和静音生成一个新的声音文件。

声音1:2秒长 + 沉默:2秒沉默 + sound2:2秒长

当我尝试下面的代码时,我得到一个包含所有部分的6秒长声音文件,但顺序不同!顺序是:sound1,sound2,silence

我无法将这种沉默放在这个构图的中间(也不是在开头)。这是典型的行为还是我做错了什么?

以下是将段放在一起的代码:

[compositionAudioTrack insertTimeRange:CMTimeRangeMake(kCMTimeZero, [audio1 duration])  ofTrack:clipAudioTrack1 atTime:kCMTimeZero error:nil];
[compositionAudioTrack insertEmptyTimeRange:CMTimeRangeMake(kCMTimeZero, CMTimeMake(2, 1))];
[compositionAudioTrack insertTimeRange:CMTimeRangeMake(kCMTimeZero, [audio2 duration])  ofTrack:clipAudioTrack2 atTime:CMTimeMake(4, 1) error:nil];

也许有人有想法?提前谢谢!

顺便说一下:没有insertEmptyTimeRange-line的代码也不起作用,它只会产生4秒的声音和声音2滑动到sound1的结尾:

    [compositionAudioTrack insertTimeRange:CMTimeRangeMake(kCMTimeZero, [audio1 duration])  ofTrack:clipAudioTrack1 atTime:kCMTimeZero error:nil];
[compositionAudioTrack insertTimeRange:CMTimeRangeMake(kCMTimeZero, [audio2 duration])  ofTrack:clipAudioTrack2 atTime:CMTimeMake(4, 1) error:nil];

似乎不允许各段之间存在“无”!?

3 个答案:

答案 0 :(得分:1)

仍然不知道这个“insertEmptyTimeRange”是什么意思。我做了一个“沉默”-audio文件,其中没有任何内容。我把这个空音频文件放在两个声音文件之间,这对我来说。问题已结束;) (但如果有人能够解释这个“insertEmptyTimeRange”,这仍然会很有趣......)

答案 1 :(得分:1)

我按照以下方式开展工作:

[compositionAudioTrack insertTimeRange:CMTimeRangeMake(kCMTimeZero, CMTimeMake(2,1))
                               ofTrack:audioTrack
                                atTime:kCMTimeZero
                                error:nil];
[compositionAudioTrack insertEmptyTimeRange:CMTimeRangeMake(CMTimeMake(2, 1), CMTimeMake(4, 1))];
[compositionAudioTrack insertTimeRange:CMTimeRangeMake(kCMTimeZero, CMTimeMake(2,1))  
                               ofTrack:audioTrack 
                                atTime:CMTimeMake(4, 1)
                                 error:nil];

如果您的声音来自(0,2)和(4,6),则“空时间范围”必须为(2,4)。

答案 2 :(得分:0)

不确定是否迟到了,

insertEmptyTimeRange:如果您在轨道中插入一个空的时间范围,那么在插入之前的那段时间内呈现的任何媒体都将在之后立即显示。

所以你要做的就是先添加两个剪辑,然后在时间2添加空时范围。 这应该工作

insertTimeRange(0到2)
insertTimeRange(2到4)
insertEmptyTimeRange(2到4)