AvmutableCompositionTrack - InsertTimerange - INSERTEMPTYTIMERANGE INSULTIÇÃO
-
25-09-2019 - |
Pergunta
Eu tenho um problema estranho: quero gerar um novo arquivo de som de dois arquivos de som e silêncio.
som1: 2 segundos de comprimento + silêncio: 2 segundos silêncio + som2: 2 segundos de duração
Quando tento o código abaixo, recebo um arquivo sonoro de 6 segundos com todas as partes, mas em uma ordem diferente! A ordem é: Sound1, Sound2, silêncio
Não consigo colocar esse silêncio no meio desta composição (também não no início). Isso é um comportamento típico ou algo errado?
Aqui está o código para montar os segmentos:
[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];
Talvez alguém tenha uma ideia? Agradeço antecipadamente!
A propósito: o código seguinte sem a linha de inserção detimeseRange também não funciona, ele gera apenas 4 segundos de slides de som e som2 até o final do som1:
[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];
Parece que não é permitido que não haja "nada" entre os segmentos!?
Solução
Ainda não sei o que significa esse "insertemptytimerange". Fiz uma contorna com um arquivo de "silêncio" -udio que não tem nada. Coloquei esse arquivo de áudio vazio entre os dois arquivos de som e isso faz isso por mim. Pergunta fechada;) (mas se alguém pudesse explicar esse "insertemptytimerange", isso ainda seria interessante ...)
Outras dicas
Eu consegui funcionar da seguinte maneira:
[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];
O "intervalo de tempo vazio" precisa ser (2,4) se seus sons forem de (0,2) e (4,6).
Não tenho certeza se está atrasado,
InsertEmptyTyTeRange: Se você inserir um intervalo de tempo vazio na pista, qualquer mídia apresentada durante esse intervalo antes da inserção será apresentada imediatamente depois.
Então, tudo o que você precisa fazer é adicionar os dois clipes primeiro e depois adicionar o intervalo de tempo vazio no tempo 2. Isso deve funcionar
inserttimerange (0 a 2)
inserttimerange (2 a 4)
insertemptytimerange (2 a 4)