iOS Audio Trimming

前端 未结 4 1916
既然无缘
既然无缘 2020-11-28 05:08

I searched a lot and couldn\'t find anything relevant... I am working on iOS audio files and here is what I want to do...

  1. Record Audio and Save Clip (Checked,
4条回答
  •  旧巷少年郎
    2020-11-28 05:50

    Here is a sample code which trim audio file from starting & ending offset and save it back. Please check this iOS Audio Trimming.

    // Path of your source audio file
    NSString *strInputFilePath = [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"abc.mp3"];
    NSURL *audioFileInput = [NSURL fileURLWithPath:strInputFilePath];
    
    // Path of your destination save audio file
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSLibraryDirectory, NSUserDomainMask, YES);
        NSString *libraryCachesDirectory = [paths objectAtIndex:0];
        libraryCachesDirectory = [libraryCachesDirectory stringByAppendingPathComponent:@"Caches"];
    
    NSString *strOutputFilePath = [NSString stringWithFormat:@"%@%@",libraryCachesDirectory,@"/abc.mp4"];
    NSURL *audioFileOutput = [NSURL fileURLWithPath:strOutputFilePath];
    
    if (!audioFileInput || !audioFileOutput)
    {
        return NO;
    }
    
    [[NSFileManager defaultManager] removeItemAtURL:audioFileOutput error:NULL];
    AVAsset *asset = [AVAsset assetWithURL:audioFileInput];
    
    AVAssetExportSession *exportSession = [AVAssetExportSession exportSessionWithAsset:asset presetName:AVAssetExportPresetAppleM4A];
    
    if (exportSession == nil)
    {
        return NO;
    }
    float startTrimTime = 0; 
    float endTrimTime = 5;
    
    CMTime startTime = CMTimeMake((int)(floor(startTrimTime * 100)), 100);
    CMTime stopTime = CMTimeMake((int)(ceil(endTrimTime * 100)), 100);
    CMTimeRange exportTimeRange = CMTimeRangeFromTimeToTime(startTime, stopTime);
    
    exportSession.outputURL = audioFileOutput;
    exportSession.outputFileType = AVFileTypeAppleM4A;
    exportSession.timeRange = exportTimeRange;
    
    [exportSession exportAsynchronouslyWithCompletionHandler:^
    {
        if (AVAssetExportSessionStatusCompleted == exportSession.status)
        {
            NSLog(@"Success!");
        }
        else if (AVAssetExportSessionStatusFailed == exportSession.status)
        {
            NSLog(@"failed");
        }
    }];
    

提交回复
热议问题