我有两个音轨上我,我有一个结合另一个是这样的:循环AVMutableCompositionTrack
AVMutableComposition *composition = [[AVMutableComposition alloc] init];
AVMutableCompositionTrack *compositionAudioTrack = [composition addMutableTrackWithMediaType:AVMediaTypeAudio preferredTrackID:kCMPersistentTrackID_Invalid];
[compositionAudioTrack setPreferredVolume:1.0];
AVAsset *avAsset = [AVURLAsset URLAssetWithURL:originalContentURL options:nil];
AVAssetTrack *clipAudioTrack = [[avAsset tracksWithMediaType:AVMediaTypeAudio] objectAtIndex:0];
[compositionAudioTrack insertTimeRange:CMTimeRangeMake(kCMTimeZero, avAsset.duration) ofTrack:clipAudioTrack atTime:kCMTimeZero error:nil];
AVMutableCompositionTrack *compositionAudioTrack1 = [composition addMutableTrackWithMediaType:AVMediaTypeAudio preferredTrackID:kCMPersistentTrackID_Invalid];
[compositionAudioTrack1 setPreferredVolume:0.01];
NSString *soundOne1 =[[NSBundle mainBundle]pathForResource:@"jingle1" ofType:@"m4a"];
NSURL *url1 = [NSURL fileURLWithPath:soundOne1];
AVAsset *avAsset1 = [AVURLAsset URLAssetWithURL:url1 options:nil];
AVAssetTrack *clipAudioTrack1 = [[avAsset1 tracksWithMediaType:AVMediaTypeAudio] objectAtIndex:0];
[compositionAudioTrack1 insertTimeRange:CMTimeRangeMake(kCMTimeZero, avAsset.duration) ofTrack:clipAudioTrack1 atTime:kCMTimeZero error:nil];
正如你所看到的,第一AVAsset
是第二轨道底座长度,也就是说,如果我有一个很长的第二轨道,它会被切断,这只是我想要的方式。
但是,我需要能够循环第二个轨道,所以如果第一个太长,第二个会继续。后来我不得不将结果轨道保存在光盘上,这也是一个重要因素。
经过研究,我发现有没有方便的方法来实际循环iOS中的轨道。其中一个出路将是多次插入第二首歌曲AVMutableComposition
,但这听起来很奇怪。基于该主题的任何想法都将非常有用。
谢谢,我会试试! –
我已更新上述代码。 –
像魅力一样工作,太棒了! –