AVCaptureSession для аудио в симуляторе - PullRequest
7 голосов
/ 15 марта 2012

Я пытаюсь захватить звук, используя метод из этот вопрос ;с AVCaptureSession и AVCaptureAudioDataOutput.Кажется, это работает нормально с одним неудобством: это не работает в симуляторе.И AVAudioRecorder, и старое доброе демонстрационное приложение SpeakHere отлично работают в симуляторе, используя встроенный микрофон на моем MacBook Pro.

Проблема в том, что [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeAudio] дает null в симуляторе, поэтому последующий код не выполняетсяс сообщением (когда он пытается добавить null в качестве ввода в AVCaptureSession):

*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '*** Can't add <AVCaptureDeviceInput: 0x9138b40 [(null)]> because the device does not support AVCaptureSessionPresetHigh.  Use -[AVCaptureDevice supportsAVCaptureSessionPreset:].'

Есть ли простой способ заставить это работать в симуляторе?

1 Ответ

14 голосов
/ 17 марта 2012

Класс AVCaptureDevice не реализован в симуляторе (по крайней мере, на момент написания этой статьи, возможно, он изменится в будущем).

Попробуйте, например,

NSLog(@"%@", [AVCaptureDevice devices]);

, который будетсоздайте пустой список на симуляторе (но в нем будут перечислены все устройства захвата, если они скомпилированы и запущены на реальном iDevice).

Этот вид функциональности в любом случае должен быть протестирован на реальном устройстве (из-за зависимости деталей оборудования)(например, задержки и поддерживаемые форматы), поэтому для целей тестирования не так важно иметь поддержку устройства в симуляторе.Но было бы неплохо иметь его для демонстрационных целей.

Чтобы демо-версия работала на симуляторе, возможно, вы можете смоделировать ввод ввода.Если вы действительно хотите потратить некоторое время на это, возможно, вы можете использовать AVAudioRecorder для симулятора (я никогда не использовал AVAudioRecorder, поэтому я не могу сказать, работает ли он на симуляторе, но по вашему вопросу)Я читал, что это делает).

...