2010-10-24 11 views
5

Mam dziwny problem: chcę wygenerować nowy plik dźwiękowy z dwóch plików dźwiękowych i ciszy.AVMutableCompositionTrack - insertTimeRange - insertEmptyTimeRange issue

SOUND1: 2 sekundy długo + cisza: 2 sekundy cisza + SOUND2: 2 sekundy długo

Kiedy próbuję poniższy kod, mam długą 6 sekund soundfile ze wszystkich części, ale w inna kolejność! Kolejność jest następująca: dźwięk1, dźwięk2, cisza

Nie jestem w stanie umieścić tej ciszy w środku tej kompozycji (również nie na początku). Czy to typowe zachowanie, czy też coś nie tak?

Oto kod za wprowadzenie segmenty razem:

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

Może ktoś ma pomysł? Z góry dziękuję!

Przy okazji: poniższy kod bez insertEmptyTimeRange linii nie działa albo, po prostu generuje 4 sekundy dźwięku i slajdów SOUND2 do końca 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]; 

Wydaje się, że nie jest dozwolone, że między segmentami jest "nic" !?

Odpowiedz

1

Nadal nie wiem, co oznacza ten "insertEmptyTimeRange". Zrobiłem sobie pracę z plikiem "ciszy", który nie zawiera niczego. Umieściłem pusty plik audio pomiędzy dwoma plikami dźwiękowymi, a to robi dla mnie. Pytanie zamknięte;) (Ale jeśli ktoś może wyjaśnić ten „insertEmptyTimeRange” Byłoby jeszcze ciekawe ...)

+0

Czy korzystałeś z trybu tranzytowego podczas eksportowania kompozycji? – zoul

+0

co ty widzisz - tryb przejściowy? Mam ten sam problem. Wstawiam instrukcje przejścia przez pusty zakres czasu. – comonitos

1

mam to działa w następujący sposób:

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

„pustą przedział czasu” musi być (2,4), jeśli dźwięki pochodzą z (0,2) i (4,6).

0

Nie wiem, czy jego późno,

insertEmptyTimeRange: Po włożeniu pustego przedziału czasu na torze, wszelkie nośniki, które zostały przedstawione w tym przedziale przed wprowadzeniem zostaną przedstawione zamiast natychmiast potem.

Więc wszystko co musisz zrobić, to dodać oba klipy, a następnie dodać zakres emptytime w czasie 2. to powinno działać

insertTimeRange (od 0 do 2)
insertTimeRange (2 do 4)
insertEmptyTimeRange (2 do 4)