AVAudioRecorder не сохраняет файл
Я борюсь с AVAudioRecorder (и Player) сейчас. У меня есть приложение, в котором есть три простые кнопки для записи / воспроизведения / остановки вызовов, и я использую AVAudioRecorder и AVAudioPlayer для записи и воспроизведения звука. Прямо сейчас, когда я тестирую приложение (как на iPhone, так и в симуляторе), я получаю Cocoa 260 - файл не найден, исключение при попытке воспроизвести то, что я только что записал. При печати пути к URL-адресу файла AVAudioRecorder, я получаю URL-адрес файла в папке, которая не существует на моем компьютере (работает на симуляторе. Мой код выглядит следующим образом:
- (void)viewDidLoad
{
[super viewDidLoad];
_plyBtn.enabled = NO;
_stopBtn.enabled = NO;
NSArray *dirPaths;
NSString *docsDir;
dirPaths = NSSearchPathForDirectoriesInDomains(NSDocumentationDirectory, NSUserDomainMask, YES);
docsDir = dirPaths[0];
NSString *soundFilePath = [docsDir stringByAppendingPathComponent:@"test.caf"];
NSURL *soundFileURL = [NSURL fileURLWithPath:soundFilePath];
NSDictionary *recordSettings = [NSDictionary dictionaryWithObjectsAndKeys:
[NSNumber numberWithInt:AVAudioQualityMin],
AVEncoderAudioQualityKey,
[NSNumber numberWithInt:16],
AVEncoderBitRateKey,
[NSNumber numberWithInt:2],
AVNumberOfChannelsKey,
[NSNumber numberWithFloat:44100.0],
AVSampleRateKey,
nil];
NSError *error = nil;
_rec = [[AVAudioRecorder alloc] initWithURL:soundFileURL settings:recordSettings error:&error];
if(error){
NSLog(@"error: %@", [error localizedDescription]);
} else {
[_rec prepareToRecord];
}
NSLog(@"path: %@", soundFileURL);
}
Я понятия не имею, почему этот NSLog внизу печатает неверный путь к файлу... Как я уже сказал, я не получаю сообщение об ошибке при записи, но при попытке воспроизвести звук, который я записал позже. Вот моя игровая функция:
- (IBAction)playAudio:(id)sender {
if(!_rec.recording){
_recBtn.enabled = NO;
_stopBtn.enabled = YES;
NSError *error1;
NSError *error2;
NSData *soundFile = [[NSData alloc] initWithContentsOfURL:_rec.url options:NSDataReadingMappedIfSafe error:&error1];
_ply = [[AVAudioPlayer alloc] initWithData:soundFile error:&error2];
//_ply = [[AVAudioPlayer alloc] initWithContentsOfURL:_rec.url error:&error];
_ply.delegate = self;
if(error1){
NSLog(@"error: %@", [error1 localizedDescription]);
} else if (error2) {
NSLog(@"error: %@", [error2 localizedDescription]);
} else {
[_ply play];
}
}
}
Это не похоже на работу:
- (IBAction)recordAudio:(id)sender {
NSLog(@"recordAudio called");
_plyBtn.enabled = NO;
_stopBtn.enabled = YES;
[_rec record];
}
Спасибо за любую помощь заранее:)
1 ответ
Возможно, путь записи был неверным.
NSDocumentationDirectory... Разве это не должно быть NSDocumentDirectory?