8 votes

AVCaptureSession pour l'audio dans le simulateur

J'essaie de capturer de l'audio, en utilisant la méthode dans cette question ; avec AVCaptureSession et AVCaptureAudioDataOutput. Cela semble fonctionner correctement avec un seul inconvénient : cela ne fonctionne pas dans le simulateur. AVAudioRecorder et la bonne vieille application de démonstration SpeakHere fonctionnent bien dans le simulateur, en utilisant le microphone interne de mon MacBook Pro.

Le problème est que [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeAudio] donne null dans le simulateur, de sorte que le code suivant échoue avec le message (lorsqu'il essaie d'ajouter null comme entrée de 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:].'

Existe-t-il un moyen simple de faire fonctionner ce système dans le simulateur ?

14voto

Krumelur Points 8935

Le AVCaptureDevice n'est pas implémentée dans le simulateur (du moins à ce jour, mais cela changera peut-être à l'avenir).

Essayez par exemple

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

qui produira une liste vide sur le simulateur (mais qui listera tous les périphériques de capture si elle est compilée et exécutée sur un véritable iDevice).

Ce type de fonctionnalité doit de toute façon être testé sur un appareil réel (en raison de la dépendance à l'égard des détails matériels, tels que la latence et les formats d'échantillonnage pris en charge), de sorte qu'à des fins de test, il n'est pas si important de disposer d'un support d'appareil dans le simulateur. Pour les tests, il n'est donc pas très important que le simulateur prenne en charge les appareils, mais ce serait bien de l'avoir à des fins de démonstration.

Pour avoir une démo fonctionnant sur le simulateur, vous pouvez peut-être simuler l'entrée de capture. Si vous voulez vraiment y passer du temps, vous pouvez peut-être vous rabattre sur la fonction AVAudioRecorder pour le simulateur (je n'ai jamais utilisé AVAudioRecorder, je ne peux donc pas dire s'il fonctionne ou non sur le simulateur, mais d'après votre question, j'ai lu que c'était le cas).

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X