2010-10-24 9 views
5

J'ai un problème étrange: Je veux générer un nouveau fichier sonore sur deux fichiers sonores et le silence.AVMutableCompositionTrack - insertTimeRange - insertEmptyTimeRange problème

sound1: 2 secondes + silence: 2 secondes de silence + sound2: 2 secondes

Lorsque je tente le code ci-dessous, je reçois à 6 secondes soundfile avec toutes les parties, mais un ordre différent! La commande est: sound1, sound2, silence

Je ne suis pas capable de mettre ce silence au milieu de cette composition (pas aussi au début). Est-ce un comportement typique ou est-ce que quelque chose ne va pas?

Voici le code pour mettre les segments ensemble:

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

Peut-être que quelqu'un a une idée? Merci d'avance!

Soit dit en passant: le code suivant sans insertEmptyTimeRange en ligne ne fonctionne pas non plus, il génère seulement 4 secondes de diapositives sonores et Sound2 à la fin de 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]; 

Il semble que ce n'est pas autorisé qu'il n'y a "rien" entre les segments !?

Répondre

1

Vous ne savez toujours pas ce que signifie "insertEmptyTimeRange". J'ai fait un travail avec un fichier "silence" -audio qui n'a rien dedans. J'ai mis ce fichier audio vide entre les deux fichiers son et cela le fait pour moi. Question fermée;) (Mais si quelqu'un pourrait expliquer ce « insertEmptyTimeRange » ce serait quand même intéressant ...)

+0

Avez-vous utilisé le mode d'intercommunication lors de l'exportation de la composition? – zoul

+0

que faites-vous meen - mode passe-à-travers? J'ai le même problème. Je suis en train d'insérer des instructions de passage sur la plage de temps vide. – comonitos

1

Je l'ai travail suivants:

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

La « plage de temps vide » doit soyez (2,4) si vos sons proviennent de (0,2) et (4,6).

0

Je ne sais pas si sa fin,

insertEmptyTimeRange: Si vous insérez une plage de temps vide dans la piste, tout média qui a été présenté au cours de cet intervalle avant l'insertion seront présentés au lieu immédiatement après.

Donc, tout ce que vous avez à faire est d'ajouter à la fois les clips d'abord, puis ajoutez la plage de emptytime au moment 2. Cela devrait fonctionner

insertTimeRange (0 à 2)
insertTimeRange (2 à 4)
insertEmptyTimeRange (2 à 4)