感谢您阅读我的问题。 :d将加载记录音频发送到AVURLAsset然后插入AVMutableCompositionTrack
这里是我的问题
我用AVAudioRecorder录制音频文件声乐资源,针对不同的时间插入声音我的视频。 但是有当我插入的声音我的声音轨道(AVMutableCompositionTrack),以及错误味精只是告诉我的错误这个
Error Domain=AVFoundationErrorDomain
Code=-11800
"The operation could not be completed"
UserInfo={NSUnderlyingError=0x137104220
{Error Domain=NSOSStatusErrorDomain Code=-12780 "(null)"},
NSLocalizedFailureReason=An unknown error occurred (-12780),
NSLocalizedDescription=The operation could not be completed}
当我将歌唱到我的声音轨道,我用一样的方式喜欢插入音乐曲目。这里是我插入的音乐曲目
/*this is my testing code of inserting music track to my video project*/
self.musicTrack = [self.projectComposition addMutableTrackWithMediaType:AVMediaTypeAudio preferredTrackID:3];
NSString *file = [[NSBundle mainBundle] pathForResource:@"Lost!" ofType:@"mp3"];
NSURL *musicURL = [NSURL fileURLWithPath:file];
AVURLAsset *music = [AVURLAsset assetWithURL:musicURL];
AVAssetTrack *musicTrack = [music tracksWithMediaType:AVMediaTypeAudio].firstObject;
NSError *err;
[self.musicTrack insertTimeRange:CMTimeRangeMake(kCMTimeZero, CMTimeMakeWithSeconds(10, kCMTimeMaxTimescale)) ofTrack:musicTrack atTime:CMTimeMakeWithSeconds(0, kCMTimeMaxTimescale) error:&err];
[self.musicTrack insertTimeRange:CMTimeRangeMake(CMTimeMakeWithSeconds(15, kCMTimeMaxTimescale),
CMTimeMakeWithSeconds(5, kCMTimeMaxTimescale))
ofTrack:musicTrack
atTime:CMTimeMakeWithSeconds(20, kCMTimeMaxTimescale)
error:&err];
[self.musicTrack insertTimeRange:CMTimeRangeMake(CMTimeMakeWithSeconds(24, kCMTimeMaxTimescale),
CMTimeMakeWithSeconds(10, kCMTimeMaxTimescale))
ofTrack:musicTrack
atTime:CMTimeMakeWithSeconds(30, kCMTimeMaxTimescale)
error:&err];
[self.musicTrack insertTimeRange:CMTimeRangeMake(CMTimeMakeWithSeconds(0, kCMTimeMaxTimescale),
CMTimeMakeWithSeconds(10, kCMTimeMaxTimescale))
ofTrack:musicTrack
atTime:CMTimeMakeWithSeconds(45, kCMTimeMaxTimescale)
error:&err];
self.musicParameters = [AVMutableAudioMixInputParameters audioMixInputParametersWithTrack:self.musicTrack];
[self.musicParameters setVolume:.8f atTime:kCMTimeZero];
代码是效果很好的代码
,这里是我的将人声
self.vocalTrack = [self.projectComposition addMutableTrackWithMediaType:AVMediaTypeAudio preferredTrackID:4];
self.vocalParameters = [AVMutableAudioMixInputParameters audioMixInputParametersWithTrack:self.vocalTrack];
NSError *err;
for (NSInteger i = 0; i < self.vocalResourceArray.count; i++) {
RAGE_VocalModel * vm = self.vocalResourceArray[i];
[self.vocalTrack insertTimeRange:CMTimeRangeMake(kCMTimeZero, vm.vocal_Duration) ofTrack:vm.vocal_AssetTrack atTime:vm.vocal_StartTime error:&err];
/*error caught from here*/
if (err) {
[self.vocalTrack removeTimeRange:CMTimeRangeMake(kCMTimeZero, vm.vocal_Duration)];
NSLog(@"Error during insert vocal track\nerr:%@",err);
}
}
[self.vocalParameters setVolume:1.f atTime:kCMTimeZero];
而且我使用相同的代码插入我的影片的代码声音目标音轨,工作正常。
所以我想这可能是一个问题,当我录制我的音频文件也许?我的音频格式设置的错误可能是什么?
这里是我的录音设置
NSString * rec_id = [NSString stringWithFormat:@"%zd",arc4random()];
NSURL *recordingFile = [NSURL fileURLWithPath:[[TARGET_DIR stringByAppendingPathComponent:@"Records"] stringByAppendingPathComponent:[NSString stringWithFormat:@"R%@.aac",rec_id]]];
NSDictionary *setting = @{
AVFormatIDKey : @(kAudioFormatMPEG4AAC),
AVSampleRateKey : @44100,
AVNumberOfChannelsKey : @1,
AVEncoderAudioQualityKey : @(AVAudioQualityHigh),
};
,我通过采用该
self.recorder = [[AVAudioRecorder alloc]initWithURL:recordingFile settings:setting error:&err];
和......呃....工作正常录制音频,没有错误捕获。
无论如何,我试图检查沙盒中的音频文件,它可以在[MAC OS/Windows]上播放。
关于发生了什么事情的任何想法?这个问题已经引起我近2个月的时间,仍然找到解决办法。
更新:
是可能的,因为使用块?我使用块处理
[RAGE_VocalModel vocalModelWithURL:recorder.url withCompleteHandle:^(RAGE_VocalModel *model) {
model.vocal_StartTime = Recording_Temp_Start_Time;
Recording_Temp_Start_Time = kCMTimeZero;;
[self.vocalResourceArray addObject:model];
NSLog(@"thread = %zd",[NSThread currentThread]);
}];
这让我想起了什么,当我试图插入音乐曲目格式vocalModel,我使用enumerateByBlock插入每个源的轨道之前项目的轨道,并抓住了同样的错误(很好。 。插入音乐曲目期间,可能不完全相同,但仍然发现未知错误)。
顺便说一句,现在我的应用程序包中包含音乐,而声音文件位于沙盒中。
我会尽快更新我的问题,只要我找到更多信息。
更新#2 这不是块的错,我当时想只用alloc-init
然后在同一线路设置我的声乐model.same问题的所有属性。