2016-07-05 3 views
2

問題をお読みいただきありがとうございます。 :DAVURLAssetへのオーディオのロード記録中に問題が発生し、AVMutableCompositionTrackを挿入します

は、ここで私はボーカルのリソースなどのオーディオファイルを録音するAVAudioRecorderを使用していた私の質問

で、異なる時間に自分の動画にボーカルを挿入することを目指しています。 は、しかし、私は私のボーカルトラック(AVMutableCompositionTrack)にボーカルを挿入、およびエラーMSGがちょうど私に教えてくれ誤りがあるこの

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を使用して、および(よく同じエラーをキャッチされました。 。正確に同じではないが、未知のエラーが残っている)を挿入することができます。

btw、音楽は現在私のアプリバンドルにあり、ボーカルファイルはサンドボックスにあります。

詳細情報が見つかるとすぐに私の質問が更新されます。

UPDATE#2 それは、ブロックのせいではない、私はちょうど同じラインで私のボーカルmodel.sameの問題のすべてのプロパティを設定し、その後alloc-initを使用しようとしました。

答えて

1

ここで私は一時的に私の問題について、いくつかのソリューションは、私の問題

のこの部分は、iが、それはオーディオファイルが原因かもしれないです見つけたもの

を追跡するためのリソースを挿入することはできません解決しましたフォーマットが完了していないので、オーディオ/サウンド/ミュージックトラックにリソースを挿入すると、ファイルのURLをボーカルモデルに保存しただけで、一時的なAVURLAssetをロードしてオーディオトラックをポンピングしてから、AVMutableCompositionTrackに挿入しますかなりうまく動作します。

しかし、私はまだこの問題の最善の解決策ではないかもしれないと信じています。

お願いします。

関連する問題