我正在尝试使用
this question中的方法捕获音频;使用AVCaptureSession和AVCaptureAudioDataOutput.这似乎工作正常1带来不便:它在模拟器中不起作用. 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,所以我无法分辨它是否在模拟器上工作,但从你的问题我读到它确实).