2016-07-05 19 views
2

Vielen Dank für das Lesen meines Problems. : DProbleme beim Laden von Audioaufnahmen in AVURLAsset und dann AVMutableCompositionTrack

hier meine Frage

i AVAudioRecorder auf der Aufzeichnung von Audio-Dateien als Vocal-Ressourcen wurde, will mein Video zu verschiedenen Zeiten vocal einzufügen. Aber es ist ein Fehler, wenn ich an meine Gesangsspur Stimmeinsatz (AVMutableCompositionTrack) und der Fehler msg mir gerade dies sagt

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} 

als ich Gesang meine Gesangsspur eingefügt, ich war nur die gleiche Art und Weise unter Verwendung von wie das Einfügen eines Musiktitels. hier ist mein Code des Einsatzes Musiktitel

/*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]; 

der Code gerade fein

und hier ist mein Code des Einsetzens Gesang

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

und auch meine Videos ich war mit gleichen Code gearbeitet wurde Einfügen Sound zur Zieltonspur, funktioniert gut.

Also dachte ich, es könnte ein Problem auftreten, wenn ich meine Audiodatei vielleicht aufnehme? Etwas Fehler bei meiner Audioformateinstellung vielleicht?

hier meine Audio-Aufnahme ist

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), 
          }; 

Einstellung und ich war die Aufzeichnung von Audio von diesen mit

self.recorder = [[AVAudioRecorder alloc]initWithURL:recordingFile settings:setting error:&err]; 

und ... na ja .... funktioniert gut, kein Fehler gefangen.

Wie auch immer, ich habe versucht, die Audiodatei in Sandbox zu überprüfen, es ist [unter MAC OS/Windows] spielbar.

irgendwelche Ideen über was ist los? Dieses Problem wurde mich fast 2 Monate lang gefangen, immer noch eine Lösung zu finden.

aktualisieren:
ist es möglich aufgrund Block mit? i wurde Formatierung vocalModel Block

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

Griff verwenden, die mir etwas erinnern, als ich versuchte, Musiktitel einzufügen, ich war mit enumerateByBlock jeder Quelle einfügen Spuren, bevor Spuren zu projizieren, und fing den gleichen Fehler (gut. (möglicherweise nicht der exakt gleiche, aber immer noch unbekannte Fehler) beim Einfügen des Musiktitels.

BTW, Musik war in meinem App-Bundle für jetzt, und Stimmdatei ist in der Sandbox.

Ich werde meine Frage aktualisieren, sobald ich weitere Informationen gefunden habe.

UPDATE # 2 es ist nicht die Schuld des Blocks wurde ich gerade versucht alloc-init dann Einstellung alle Eigenschaften meiner Stimm model.same Thema auf derselben Leitung.

Antwort

1

hier fand ich einige Lösung über mein Problem vorübergehend diesen Teil meiner Frage lösen

nicht Ressource verfolgen einfügen können

, was ich gefunden ist, ist es auf die Audiodatei zurückzuführen könnte ist nicht fertig formatiert, so dass ich nur die Datei-URL in meinem Stimmmodell speichern, wenn ich Ressource auf meinem Audio/Sound/Musik-Track einfügen, ich nur ein Temp AVURLAsset laden und Audio-Track auspumpen, dann in meine AVMutableCompositionTrack einfügen, das ist funktioniert ganz gut.

aber ich glaube immer noch, es ist vielleicht nicht die beste Lösung für dieses Problem.

Wunsch könnte helfen.