シミュレータ内のオーディオのavcaptureSession
-
14-12-2019 - |
質問
この質問;
オーディオをキャプチャしようとしています。AvCaptureSessionとAvcaptureAudioDataOutputを使用して。これは1つの不便でうまく機能するようです:シミュレータでは機能しません。AvaudioRecorderと古き古い話されたデモアプリは両方とも、MacBook Proの内部マイクを使用してシミュレータでうまく機能します。
問題は、[AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeAudio]
がシミュレータ内のnull
を与えるため、後続のコードはメッセージで失敗します(AvcapturesSessionへの入力としてnull
を追加しようとすると):
*** 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
クラスはシミュレータ上で実装されていません(少なくともその書き込み時点で、将来変化する可能性があります)。
e.gを試してください。
NSLog(@"%@", [AVCaptureDevice devices]);
.
これはシミュレータ上の空のリストを生成します(ただし、Real IDEViceでコンパイルされて実行されている場合はすべてのキャプチャデバイスをリストします)。
この種の機能は、とにかく実際の装置でテストする必要があります(レイテンシやサポートされているサンプルフォーマットなどのハードウェアの詳細依存性のため)、テスト目的で、シミュレータでデバイスサポートを受けることが重要ではありません。しかし、それは実際にデモ目的のためにそれを持っているのはうれしいです。
シミュレータ上でデモを実行するために、キャプチャ入力をモックすることができます。あなたが本当にそれに時間を過ごしたいのなら、シミュレータのAVAudioRecorder
にフォールバックすることができます(私はavaudioRecorderを使用しませんでしたので、それがそうでないかどうか、またはシミュレータに取り組んでいないかどうかはわかりません)それはそうです)。