2012-03-15 21 views
7

Sto provando a catturare l'audio, utilizzando il metodo in this question; con AVCaptureSession e AVCaptureAudioDataOutput. Questo sembra funzionare bene con 1 inconveniente: non funziona nel simulatore. Sia l'AVAudioRecorder, sia la buona vecchia demo demo SpeakHere, funzionano perfettamente nel simulatore, usando il microfono interno sul mio MacBook Pro.AVCaptureSession per l'audio nel simulatore

Il problema è che [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeAudio]null nel simulatore, in modo da codice successivo fallisce con il messaggio (quando si tenta di aggiungere null come input per l'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:].' 

C'è un modo semplice per ottenere questo lavorare nel simulatore?

+0

Non so perché l'installazione di AVCaptureSession non funzioni, tuttavia se non sarà necessario testare la registrazione sul simulatore ma solo sul dispositivo è comunque possibile escludere la parte di registrazione su iOS-Simulator utilizzando: # se TARGET_IPHONE_SIMULATOR // Codice simulatore qui #else // Codice dispositivo "reale" iOS qui #endif Ciò impedirà l'arresto anomalo dell'app sul simulatore. – Markus

risposta

14

La classe AVCaptureDevice non è implementata sul simulatore (almeno al momento della scrittura, forse cambierà in futuro).

Prova ad es.

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

che produrrà un elenco vuoto sul simulatore (ma che elenca tutti i dispositivi di cattura se compilato ed eseguito su un vero iDevice).

Questo tipo di funzionalità deve essere comunque testato su un dispositivo reale (a causa della dipendenza dai dettagli hardware, come la latenza e i formati di esempio supportati), quindi per scopi di test non è importante avere il supporto dei dispositivi nel simulatore . Ma sarebbe davvero bello averlo per scopi dimostrativi.

Per avere una demo in esecuzione sul simulatore, forse è possibile prendere in giro l'input di cattura. Se vuoi davvero dedicare un po 'di tempo a questo, forse puoi usare il AVAudioRecorder per il simulatore (non ho mai usato AVAudioRecorder, quindi non so se funziona o non funziona sul simulatore, ma dalla tua domanda ho letto che lo fa).

+2

Questo è un vero peccato. Mi aspettavo (speravo) che AVAudioRecorder fosse costruito su AVCaptureSession, quindi immagino che non sia così. Sono d'accordo che alla fine voglio testare questa roba su un dispositivo, ma durante i cicli di sviluppo iterativo sarebbe bello se potessi semplicemente usare il simulatore. – Claude

+0

Per questo consiglio di registrare l'audio (utilizzando un dispositivo reale, a seconda del tipo di app che è) e di #ifdef nella riproduzione statica di quel file quando si utilizza il simulatore. – Krumelur

+0

Questo è cambiato, non emette più un array vuoto. Sto usando Xcode 5.0.2. Il simulatore iPad iOS 5.0 restituisce 2 dispositivi: fotocamera frontale, fotocamera posteriore. – neoneye

Problemi correlati