如何修剪用EZAudioRecorder录制的音频?

时间:2015-07-17 11:56:46

标签: ios objective-c avfoundation avaudiorecorder ezaudio

我想修剪用 EZAudioRecorder 录制的音频。

我正在编写此代码来修剪音频。这对于使用 AVAudioRecorder 录制的音频工作正常,但它会使用 EZAudioRecorder 触发错误阻止,错误无法打开文件

-(BOOL)trimAudiofile{
   float audioStartTime=1.0;
   float audioEndTime=2.0;//define end time of audio
   NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
   [dateFormatter setDateFormat:@"yyyy-MM-dd_HH-mm-ss"];
   NSArray *paths = NSSearchPathForDirectoriesInDomains(NSLibraryDirectory, NSUserDomainMask, YES);
   NSString *libraryCachesDirectory = [paths objectAtIndex:0];
   libraryCachesDirectory = [libraryCachesDirectory stringByAppendingPathComponent:@"Caches"];
   NSString *OutputFilePath = [libraryCachesDirectory stringByAppendingFormat:@"/output_%@.m4a", [dateFormatter stringFromDate:[NSDate date]]];
   NSURL *audioFileOutput = [NSURL fileURLWithPath:OutputFilePath];
   NSURL *audioFileInput=[self testFilePathURL];//<Path of orignal audio file>

   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;
 }
 CMTime startTime = CMTimeMake((int)(floor(audioStartTime * 100)), 100);
 CMTime stopTime = CMTimeMake((int)(ceil(audioEndTime * 100)), 100);
 CMTimeRange exportTimeRange = CMTimeRangeFromTimeToTime(startTime, stopTime);

 exportSession.outputURL = audioFileOutput;
 exportSession.timeRange = exportTimeRange;
 exportSession.outputFileType = AVFileTypeAppleM4A;

[exportSession exportAsynchronouslyWithCompletionHandler:^
{
   if (AVAssetExportSessionStatusCompleted == exportSession.status)
   {
     NSLog(@"Export OK");
   }
   else if (AVAssetExportSessionStatusFailed == exportSession.status)
   {
     NSLog(@"Export failed: %@", [[exportSession error] localizedDescription]);
   }
 }];
 return YES;
}

注意: - 音频文件存在于文档目录中, EZAudioPlayer 也可以播放此文件。

谁能告诉我我哪里做错了? 任何有关这方面的帮助将不胜感激。

提前致谢。

2 个答案:

答案 0 :(得分:0)

1.当您修剪 AVAudioRecorder 录制的音频和 EZAudioRecorder 录制的音频时,请检查两种情况下的文件格式。

2.您正在尝试在录制音频成功之前导出文件,您必须等到音频未录制。

答案 1 :(得分:0)

谢谢大家......我找到了这个问题的解决方案...... !!

我没有关闭音频文件。我在修剪音频之前添加了这段代码,现在一切正常。

我们需要关闭此文件,即使文件目录中存在退出文件。

if (self.recorder)
{
    [self.recorder closeAudioFile];
}

have a look on this git issue