Ios 音频模拟器中的AVCaptureSession

Ios 音频模拟器中的AVCaptureSession,ios,avfoundation,avcapturesession,Ios,Avfoundation,Avcapturesession,我正在尝试捕获音频,使用中的方法;使用AVCaptureSession和AVCaptureAudioDataOutput。这似乎工作得很好,但有一个不便之处:它在模拟器中不工作。AVAudioRecorder和旧的SpeakHere演示应用程序都可以在模拟器中正常工作,使用MacBook Pro上的内置麦克风 问题是[AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeAudio]在模拟器中给出null,因此后续代码失败,并显示消息(当它尝

我正在尝试捕获音频,使用中的方法;使用AVCaptureSession和AVCaptureAudioDataOutput。这似乎工作得很好,但有一个不便之处:它在模拟器中不工作。AVAudioRecorder和旧的SpeakHere演示应用程序都可以在模拟器中正常工作,使用MacBook Pro上的内置麦克风

问题是
[AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeAudio]
在模拟器中给出
null
,因此后续代码失败,并显示消息(当它尝试将
null
添加为AVCaptureSession的输入时):

***由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因:***无法添加,因为设备不支持AVCaptureSessionPresetHigh。使用-[AVCaptureDevice supportsAVCaptureSessionPreset:]

有没有一种简单的方法可以让它在模拟器中工作?

模拟器上没有实现
AVCaptureDevice
类(至少在撰写本文时,它可能会在将来发生变化)

试试看

NSLog(@"%@", [AVCaptureDevice devices]);
这将在模拟器上生成一个空列表(但如果在真实的iDevice上编译和运行,将列出所有捕获设备)

无论如何,这种功能都需要在真实设备上进行测试(由于硬件细节的依赖性,例如支持的延迟和样本格式),因此,出于测试目的,在模拟器中提供设备支持并不重要。但如果能将其用于演示目的,那就太好了


要在模拟器上运行演示,可能您可以模拟捕获输入。如果你真的想花点时间在它上面,也许你可以在模拟器上使用
AVAudioRecorder
(我从来没有使用过AVAudioRecorder,所以我不知道它在模拟器上是否起作用,但从你的问题看,我知道它起作用了)。

我不知道为什么AVCaptureSession设置不起作用,但是,如果您不一定需要在模拟器上测试录制,而只需要在设备上测试录制,那么您仍然可以使用以下方法排除iOS模拟器上的录制部分:#如果目标#IPHONE#模拟器//simulator code here#else//“Real”iOS设备code here#endif这将防止模拟器上的应用程序崩溃。这真是太遗憾了。我原以为(希望)AVAudioRecorder是建立在AVCaptureSession之上的,所以我想情况并非如此。我同意最终我想在一台设备上测试这些东西,但在迭代开发周期中,如果我可以使用模拟器,那就太好了。为此,我建议录制音频(使用真实的设备,取决于它是什么类型的应用程序)并在使用模拟器时静态播放该文件。这已经改变了,它不再输出空数组。我使用的是Xcode 5.0.2。iPad iOS 5.0模拟器返回两个设备:前摄像头和后摄像头。从Xcode 6.1开始,使用iOS 8模拟器时,
(lldb)po[avcaptureDevices]()
,显示没有音频捕获设备。
NSLog(@"%@", [AVCaptureDevice devices]);