QTKit没有正确混合音轨

时间:2011-03-18 17:53:57

标签: audio quicktime qtkit

我正在尝试导入两个单独的电影文件(2个单独的QTMovie实例)将第二个实例的音轨偏移一秒,然后将其与第一个实例的音轨混合。它没有混合。第一首曲目开始播放然后停止,第二首曲目开始播放。当我使用具有不同内容的2个电影文件时,这不会发生,但是当我将文件复制到其他名称时仍然会发生这种情况!我创建了一个简单的示例项目来说明问题:http://cl.ly/0s2U2s3S2F0Y052D2v0O/InsertTrack.zip

我也很乐意为这个问题付出代价!

1 个答案:

答案 0 :(得分:2)

解决方案不是很直接,因为这里有一些事情:

    如果曲目的编码与已存在的曲目的编码匹配,则
  1. -[QTMovie insertSegmentOf(Movie|Track):timeRange:atTime:] 不会将曲目添加到电影中。相反,它将片段插入到现有影片中,就像QuickTime Player Pro的“添加选择”一样(例如,如果您的电影是AAAAA并且您插入了bbb,那么您将获得AAbbbAAA)。 (不可否认,这里的课程参考不是很简洁......)
  2. 不幸的是-[QTMovie insertSegmentOfTrack:fromRange:scaledToRange:] 不添加曲目。相反,它的行为类似于insertSegmentOfTrack:timeRange:atTime:,并具有更改插入段的持续时间的附加功能。
  3. 解决方案是使用-[QTMovie insertSegmentOfMovie:fromRange:scaledToRange:]

    对于你的例子,这将成为

    -(QTMovie *) composedMovie
    {
        NSDictionary *editableAttribute = [NSDictionary dictionaryWithObject:[NSNumber numberWithBool:YES] forKey:QTMovieEditableAttribute];
        // load and prepare the base movie:
        QTMovie *composition = [QTMovie movieWithFile:fileName error:nil];
        [composition setMovieAttributes:editableAttribute];
        // load and prepare the insertion
        QTMovie *insertion = [QTMovie movieWithFile:insertionFileName error:nil]:
        [insertion setMovieAttributes:editableAttribute];
        // as you'll probably want to avoid adding the video tracks...
        NSArray *videoTracks = [insertion tracksOfType:QTMediaTypeVideo];
        for (QTTrack *track in videoTracks) {
            [insertion removeTrack:track];
        }
        // figure out the time-range
        QTTimeRange sourceRange = QTMakeTimeRange( QTZeroTime, [insertion duration] );
        QTTimeRange destinationRange = sourceRange;
        destinationRange.time = QTMakeTime( 1ll, 1l ); // use an offset of 1 second
        [composition insertSegmentOfMovie:insertion fromRange:sourceRange scaledToRange:destinationRange];
        return composition;
    }
    

    我知道,对于那些实际上很直接的东西来说,这是一个非常代码的引导程序......但这就是它的工作方式: - (