Как мне обрезать звук, записанный с помощью EZAudioRecorder?
Я хочу обрезать звук, который записан с 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 ответа
Спасибо всем.. Я нашел решение этой проблемы...!!
Я не закрывал аудиофайл. Я добавил этот код до обрезки звука, теперь все работает, как ожидалось.
Нам нужно закрыть этот файл, даже если файл выходит из каталога документов.
if (self.recorder)
{
[self.recorder closeAudioFile];
}
1.Проверьте формат файла в обоих случаях, когда вы обрезаете звук, записанный AVAudioRecorder, и звук, записанный EZAudioRecorder.
2.Вы пытаетесь экспортировать файл перед успешной записью звука, вам нужно подождать, пока звук не будет записан.