2013-10-01 36 views
2

我使用後續代碼將caf格式轉換爲m4a格式並保存到Iphone的另一個目錄,它在IOS6中與Xcode 4.6.3一起工作,但是當我更新到Xcode 5時,它是不再工作了。如果在Xcode 5中使用IOS6模擬器,它會再次運行。無法將caf格式轉換爲m4a格式

-(void)saveFile { 
    NSString *docDirPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0]; 
    outputFile = [NSURL fileURLWithPath:[docDirPath stringByAppendingPathComponent: [NSString stringWithFormat: @"%i.m4a", currentCueIndex + 1000]]]; 
} 

所以我想知道它是IOS 7的bug還是蘋果改變了一些東西?

感謝

更新

AVURLAsset *audioAsset = [[AVURLAsset alloc]initWithURL:recordedTmpFile options:nil]; 
AVMutableComposition *mixComposition = [AVMutableComposition composition]; 
AVMutableCompositionTrack *compositionTrackA = [mixComposition  addMutableTrackWithMediaType:AVMediaTypeAudio preferredTrackID:kCMPersistentTrackID_Invalid]; 

AVAssetTrack *clipAudioTrack = [[audioAsset tracksWithMediaType:AVMediaTypeAudio] lastObject]; 

[compositionTrackA insertTimeRange:CMTimeRangeMake(kCMTimeZero, audioAsset.duration) ofTrack:clipAudioTrack atTime:kCMTimeZero error:nil]; 

AVAssetExportSession *exporter =[[AVAssetExportSession alloc] initWithAsset:mixComposition presetName:AVAssetExportPresetAppleM4A]; 

[self saveFile]; 


NSParameterAssert(exporter!=nil); 
exporter.outputFileType=AVFileTypeAppleM4A; 
exporter.outputURL=outputFile; 
// Subtract a fraction of a second so the first word isn't chopped off 
clipStartTime = clipStartTime - kSilenceBeforeFirstAudio; 

CMTime start=CMTimeMake(clipStartTime * 100, 100); 
CMTime duration=CMTimeMake(clipDuration * 100, 100); 
CMTimeRange range=CMTimeRangeMake(start, duration); 
exporter.timeRange=range; 
[exporter exportAsynchronouslyWithCompletionHandler:nil]; 
+0

哪裏是你的代碼,你轉換文件,您剛剛張貼代碼的文件路徑。 – rckoenes

+0

我更新了更多代碼。 @rckoenes – Muke

回答

1

OK我發現這個問題。 應更換此行

[exporter exportAsynchronouslyWithCompletionHandler:nil]; 

[exporter exportAsynchronouslyWithCompletionHandler:^{ 
     int exportStatus = exporter.status; 
     switch (exportStatus) { 

      case AVAssetExportSessionStatusFailed: { 

       NSError *exportError = exporter.error; 
       NSLog (@"AVAssetExportSessionStatusFailed: %@", exportError); 
       break; 
      } 
      case AVAssetExportSessionStatusCompleted: { 
       NSLog (@"AVAssetExportSessionStatusCompleted--"); 
       break; 
      } 
      case AVAssetExportSessionStatusUnknown: { 
       NSLog (@"AVAssetExportSessionStatusUnknown"); 
       break; 
      } 
      case AVAssetExportSessionStatusExporting: { 
       NSLog (@"AVAssetExportSessionStatusExporting"); 
       break; 
      } 
      case AVAssetExportSessionStatusCancelled: { 
       NSLog (@"AVAssetExportSessionStatusCancelled"); 
       break; 
      } 
      case AVAssetExportSessionStatusWaiting: { 
       NSLog (@"AVAssetExportSessionStatusWaiting"); 
       break; 
      } 
      default: { NSLog (@"didn't get export status"); break;} 
     } 

    }]; 
相關問題