AVMutableCompositionTrack - insertTimeRange - проблема insertEmptyTimeRange - PullRequest
5 голосов
/ 24 октября 2010

У меня странная проблема: я хочу создать новый звуковой файл из двух звуковых файлов и тишины.

sound1: 2 секунды + тишина: 2 секунды тишины + sound2: длительность 2 секунды

Когда я пробую приведенный ниже код, я получаю звуковой файл длиной 6 секунд со всеми частями, но в другом порядке! Порядок: sound1, sound2, тишина

Я не могу поместить это молчание в середину этой композиции (также не в начале). Это типичное поведение или я что-то не так?

Вот код для соединения сегментов:

[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 тоже не работает, он просто генерирует 4 секунды звука и звук2 скользит до конца звука1:

    [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 ]

1 голос
/ 05 июля 2012

У меня это работает следующим образом:

[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];

«Пустой диапазон времени» должен быть (2,4), если ваши звуки из (0,2) и (4,6).

1 голос
/ 24 октября 2010

Все еще не знаю, что означает этот "insertEmptyTimeRange".Я поработал с аудио-файлом "silence", в котором ничего нет.Я поместил этот пустой аудиофайл между двумя звуковыми файлами, и это делает это для меня.Вопрос закрыт;) (Но если бы кто-то мог объяснить этот «insertEmptyTimeRange», это все равно было бы интересно ...)

0 голосов
/ 05 июня 2014

Не уверен, что уже поздно,

insertEmptyTimeRange: если вы вставите в дорожку пустой временной диапазон, любые носители, которые были представлены в течение этого интервала до вставки, будут представлены сразу после этого.

Итак, все, что вам нужно сделать, это сначала добавить оба клипа, а затем добавить диапазон пустого времени в момент времени 2. Это должно работать

insertTimeRange (от 0 до 2)
insertTimeRange (от 2 до 4)
insertEmptyTimeRange (от 2 до 4)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...