Запись аудиофайла и сохранение локально на iPhone

Я искал повсюду для ответа на это, но не могу найти то, что мне нужно. В основном в моем приложении я записываю голос в аудиофайл (например, приложение голосовой заметки iOS), а затем хотел бы сохранить его в локальном каталоге документа. По какой-то причине URL-адрес, который мне предоставляется с записанным файлом, истекает в следующий раз, когда я запускаю приложение. Кроме того, даже если это не так, если я записываю дважды, второй URL-адрес файла получает тот же URL-адрес, что и первый, поэтому я теряю первый файл.

Запись таким образом:

[audioRecorder record]; 

Где: AVAudioRecorder * audioRecorder;

Игра в порядке:

  [audioPlayer play]; 

Где: AVAudioPlayer * audioPlayer;

Каков наилучший способ записать голосовую заметку и сохранить ее на локальном диске на iPhone?

Благодарю.

Обновить:

Я попытался использовать этот код:

 NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); NSString *documentsDirectory = [paths objectAtIndex:0]; NSString *filePath = [documentsDirectory stringByAppendingPathComponent:fileName]; BOOL status = [data writeToFile:filePath atomically:YES]; 

С данными, являющимися данными моего свойства AVAudioPlayer NSData, но BOOL получает 0, и не знаю, почему.

One Solution collect form web for “Запись аудиофайла и сохранение локально на iPhone”

Верните текущую дату и время, которые мы используем в качестве имени звукового файла.

 - (NSString *) dateString { // return a formatted string for a file name NSDateFormatter *formatter = [[NSDateFormatter alloc] init]; formatter.dateFormat = @"ddMMMYY_hhmmssa"; return [[formatter stringFromDate:[NSDate date]] stringByAppendingString:@".aif"]; } 

Настройка аудиозаписей

 - (BOOL) startAudioSession { // Prepare the audio session NSError *error; AVAudioSession *session = [AVAudioSession sharedInstance]; if (![session setCategory:AVAudioSessionCategoryPlayAndRecord error:&error]) { NSLog(@"Error setting session category: %@", error.localizedFailureReason); return NO; } if (![session setActive:YES error:&error]) { NSLog(@"Error activating audio session: %@", error.localizedFailureReason); return NO; } return session.inputIsAvailable; } 

Записанный звук..

 - (BOOL) record { NSError *error; // Recording settings NSMutableDictionary *settings = [NSMutableDictionary dictionary]; [settings setValue: [NSNumber numberWithInt:kAudioFormatLinearPCM] forKey:AVFormatIDKey]; [settings setValue: [NSNumber numberWithFloat:8000.0] forKey:AVSampleRateKey]; [settings setValue: [NSNumber numberWithInt: 1] forKey:AVNumberOfChannelsKey]; [settings setValue: [NSNumber numberWithInt:16] forKey:AVLinearPCMBitDepthKey]; [settings setValue: [NSNumber numberWithBool:NO] forKey:AVLinearPCMIsBigEndianKey]; [settings setValue: [NSNumber numberWithBool:NO] forKey:AVLinearPCMIsFloatKey]; [settings setValue: [NSNumber numberWithInt: AVAudioQualityMax] forKey:AVEncoderAudioQualityKey]; NSArray *searchPaths =NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); NSString *documentPath_ = [searchPaths objectAtIndex: 0]; NSString *pathToSave = [documentPath_ stringByAppendingPathComponent:[self dateString]]; // File URL NSURL *url = [NSURL fileURLWithPath:pathToSave];//FILEPATH]; // Create recorder recorder = [[AVAudioRecorder alloc] initWithURL:url settings:settings error:&error]; if (!recorder) { NSLog(@"Error establishing recorder: %@", error.localizedFailureReason); return NO; } // Initialize degate, metering, etc. recorder.delegate = self; recorder.meteringEnabled = YES; //self.title = @"0:00"; if (![recorder prepareToRecord]) { NSLog(@"Error: Prepare to record failed"); //[self say:@"Error while preparing recording"]; return NO; } if (![recorder record]) { NSLog(@"Error: Record failed"); // [self say:@"Error while attempting to record audio"]; return NO; } // Set a timer to monitor levels, current time timer = [NSTimer scheduledTimerWithTimeInterval:0.1f target:self selector:@selector(updateMeters) userInfo:nil repeats:YES]; return YES; } 

Воспроизвести звук … Извлечь из документа directiory

 -(void)play { NSArray *searchPaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); NSString *documentPath_ = [searchPaths objectAtIndex: 0]; NSFileManager *fileManager = [NSFileManager defaultManager]; if ([fileManager fileExistsAtPath:[self recordingFolder]]) { arrayListOfRecordSound=[[NSMutableArray alloc]initWithArray:[fileManager contentsOfDirectoryAtPath:documentPath_ error:nil]]; NSLog(@"====%@",arrayListOfRecordSound); } NSString *selectedSound = [documentPath_ stringByAppendingPathComponent:[arrayListOfRecordSound objectAtIndex:0]]; NSURL *url =[NSURL fileURLWithPath:selectedSound]; //Start playback player = [[AVAudioPlayer alloc] initWithContentsOfURL:url error:&error]; if (!player) { NSLog(@"Error establishing player for %@: %@", recorder.url, error.localizedFailureReason); return; } player.delegate = self; // Change audio session for playback if (![[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayback error:&error]) { NSLog(@"Error updating audio session: %@", error.localizedFailureReason); return; } self.title = @"Playing back recording..."; [player prepareToPlay]; [player play]; } 

stopRecording

 - (void) stopRecording { // This causes the didFinishRecording delegate method to fire [recorder stop]; } 

continueRecording

 - (void) continueRecording { // resume from a paused recording [recorder record]; } 

pauseRecording

  - (void) pauseRecording { // pause an ongoing recording [recorder pause]; } 
  • Не удалось создать экземпляр контроллера представления по умолчанию для UIMainStoryboardFile 'Main'
  • EXC_BAD_ACCESS при использовании stringWithFormat?
  • iphone 5 4 дюйма
  • Xcode 7.1 Allocations Инструмент SIP Выбрасывает подгонку
  • Как изменить устройство предварительного просмотра в раскадровке Xcode?
  • Как сделать файл Pod из одного проекта и добавить в свой собственный проект в iOS?
  • Построить OpenSSL с помощью Xcode 5
  • Пан жест помешает UISlider
  • Что такое индексы в инспекторе модели данных Core-Data Xcode
  • Скопировать файлы в пакет в зависимости от активной конфигурации
  • Методы анализа SDK не работают в Xcode 6.3 Beta
  • PhoneC: Разработка iOS проста с помощью XCode, Swift3, UITableView, cocatouch, давайте создадим приложения для iPhone, iPad и Macbook.