Запись аудио на iPhone: ошибка с setPreferredIOBufferDuration - PullRequest
3 голосов
/ 11 ноября 2009

Я следовал документации Apple для записи звука на iPhone, используя класс AVAudioSession. Я могу установить несколько свойств без ошибок (setActive, setCategory, setPreferredHardwareSampleRate), но не могу заставить пример кода Apple работать на setPreferredIOBufferDuration.

Вот мой код:

- (void) initX {
 NSError *setPreferenceError = nil;
 NSTimeInterval preferredBufferDuration = 0.005;

 [[AVAudioSession sharedInstance]
  setPreferredIOBufferDuration: preferredBufferDuration
  error: &setPreferenceError];

 if (setPreferenceError != nil) {
  NSLog( @"%@", setPreferenceError );
 }
}

Создает следующий вывод:

Ошибка домена = NSOSStatusErrorDomain Code = 561211770 «Операция не может быть завершена. (Ошибка OSStatus 561211770.)» *

Я вызываю этот метод из основного делегата приложения, как часть метода applicationDidFinishLaunching. Все, что я делаю, это инициализирую вещи на этом этапе. Я импортировал AVFoundation / AVFoundation.h после добавления AVFoundation.framework в проект.

1 Ответ

1 голос
/ 27 марта 2010

Похоже, что это ошибка в коде Apple; используйте вместо этого чистый интерфейс C:

OSStatus propertySetError = 0;
Float32 preferredBufferDuration = 0.005;
propertySetError = AudioSessionSetProperty(kAudioSessionProperty_PreferredHardwareIOBufferDuration, sizeof(preferredBufferDuration), &preferredBufferDuration);

Затем, чтобы проверить наличие ошибок, используйте

if (propertySetError) NSLog(@"Failed to set shorter I/O buffer on AVAudioSession, code %d", propertySetError);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...