AVCaptureSession для звука в симуляторе
-
14-12-2019 - |
Вопрос
Я пытаюсь записать звук, используя метод, описанный в этот вопрос;с 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:].'
Есть ли простой способ заставить это работать в симуляторе?
Решение
А AVCaptureDevice
класс не реализован в симуляторе (по крайней мере, на момент написания этой статьи, возможно, в будущем он изменится).
Попробуйте, например.
NSLog(@"%@", [AVCaptureDevice devices]);
который создаст пустой список в симуляторе (но будет перечислять все устройства захвата, если он скомпилирован и запущен на реальном iDevice).
Функциональность такого рода в любом случае необходимо тестировать на реальном устройстве (из-за зависимости от деталей оборудования, таких как задержка и поддерживаемые форматы образцов), поэтому для целей тестирования не так важно иметь поддержку устройства в симуляторе.Но было бы действительно неплохо иметь его для демонстрационных целей.
Чтобы запустить демо-версию на симуляторе, возможно, вы сможете имитировать ввод захвата.Если вы действительно хотите потратить на это некоторое время, возможно, вы можете вернуться к AVAudioRecorder
для симулятора (я никогда не использовал AVAudioRecorder, поэтому не могу сказать, работает он или нет на симуляторе, но из вашего вопроса я прочитал, что работает).