Objective - C,我如何裁剪.caf文件?

时间:2013-03-01 10:03:50

标签: ios objective-c avfoundation audio-recording avaudiorecorder

我使用AVAudioRecorder将声音录制到 .caf 文件中。

我希望剪切/修剪此文件的前2秒 怎么做? (我花了好几个小时才找到解决方案,但没有运气)

1 个答案:

答案 0 :(得分:3)

您可以使用AVAssetExportSession ..

执行此操作

试试这段代码..

float vocalStartMarker = 0.0f;
float vocalEndMarker = 2.0f;

NSURL *audioFileInput = @"input filePath"; // give your audio file path

NSString *docsDirs;
NSArray *dirPath;
dirPath = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
docsDirs = [dirPath objectAtIndex:0];
NSString *destinationURLs = [docsDirs stringByAppendingPathComponent:@"trim.caf"];
audioFileOutput = [NSURL fileURLWithPath:destinationURLs];

if (!audioFileInput || !audioFileOutput)
{
    return NO;
}
[[NSFileManager defaultManager] removeItemAtURL:audioFileOutput error:NULL];
AVAsset *asset = [AVURLAsset URLAssetWithURL:audioFileInput options:nil];
AVAssetExportSession *exportSession = [AVAssetExportSession exportSessionWithAsset:asset
                                                                        presetName:AVAssetExportPresetAppleM4A];
if (exportSession == nil)
{        
    return NO;
}
CMTime startTime = CMTimeMake((int)(floor(vocalStartMarker * 100)), 100);
CMTime stopTime = CMTimeMake((int)(ceil(vocalEndMarker * 100)), 100);
CMTimeRange exportTimeRange = CMTimeRangeFromTimeToTime(startTime, stopTime);
exportSession.outputURL = audioFileOutput;
exportSession.outputFileType = AVFileTypeAppleM4A;
exportSession.timeRange = exportTimeRange;

[exportSession exportAsynchronouslyWithCompletionHandler:^
 {
     if (AVAssetExportSessionStatusCompleted == exportSession.status)
     {
         // It worked!
             NSLog(@"DONE TRIMMING.....");
             NSLog(@"ouput audio trim file %@",audioFileOutput);
     } 
     else if (AVAssetExportSessionStatusFailed == exportSession.status)
     {
         // It failed...
             NSLog(@"FAILED TRIMMING.....");
     }
 }];