J'essaie de capturer une image lors d'un aperçu en direct de la caméra, par AVFoundation captureStillImageAsynchronouslyFromConnection . Jusqu'à présent, le programme fonctionne comme prévu. Cependant, comment puis-je couper le son de l'obturateur?
89
Réponses:
J'ai utilisé ce code une fois pour capturer le son de l'obturateur par défaut iOS (voici la liste des noms de fichiers audio https://github.com/TUNER88/iOSSystemSoundsLibrary ):
Ensuite, j'ai utilisé une application tierce pour extraire
photoShutter.caf
du répertoire Documents (DiskAid pour Mac). Étape suivante, j'ai ouvertphotoShutter.caf
l'éditeur audio Audacity et appliqué l'effet d'inversion, cela ressemble à ceci avec un zoom élevé:Ensuite, j'ai enregistré ce son
photoShutter2.caf
et essayé de jouer ce son juste avantcaptureStillImageAsynchronouslyFromConnection
:Et cela fonctionne vraiment! Je fais des tests plusieurs fois, à chaque fois que je n'entends aucun son d'obturateur :)
Vous pouvez obtenir un son déjà inversé, capturé sur iPhone 5S iOS 7.1.1 à partir de ce lien: https://www.dropbox.com/s/1echsi6ivbb85bv/photoShutter2.caf
la source
Ma solution dans Swift
Lorsque vous appelez la
AVCapturePhotoOutput.capturePhoto
méthode pour capturer une image comme le code ci-dessous.Les méthodes AVCapturePhotoCaptureDelegate seront appelées. Et le système essaie de jouer le son de l'obturateur après son
willCapturePhotoFor
appel. Ainsi, vous pouvez disposer du son système parwillCapturePhotoFor
méthode.Voir également
la source
AudioServicesDisposeSystemSoundID(1108)
est appelée. Avez-vous des solutions pour cela? :)Méthode 1: Vous ne savez pas si cela fonctionnera, mais essayez de lire un fichier audio vierge juste avant d'envoyer l'événement de capture.
Pour lire un clip, ajoutez le
Audio Toolbox
cadre#include <AudioToolbox/AudioToolbox.h>
et lisez le fichier audio comme celui-ci immédiatement avant de prendre la photo:Voici un fichier audio vierge si vous en avez besoin. https://d1sz9tkli0lfjq.cloudfront.net/items/0Y3Z0A1j1H2r1c0z3n3t/blank.wav
________________________________________________________________________________________________________________________________________
Méthode 2: Il existe également une alternative si cela ne fonctionne pas. Tant que vous n'avez pas besoin d'une bonne résolution, vous pouvez saisir une image du flux vidéo , évitant ainsi complètement le son de l'image.
________________________________________________________________________________________________________________________________________
Méthode 3: Une autre façon de faire serait de prendre une «capture d'écran» de votre application. Faites-le de cette façon:
Si vous souhaitez que cela remplisse tout l'écran avec un aperçu du flux vidéo afin que votre capture d'écran soit bonne:
la source
J'ai pu faire fonctionner cela en utilisant ce code dans la fonction snapStillImage et cela fonctionne parfaitement pour moi sur iOS 8.3 iPhone 5. J'ai également confirmé qu'Apple ne rejettera pas votre application si vous l'utilisez (ils n'ont pas rejeté mien)
N'oubliez pas d'être gentil et de réactiver le son lorsque votre application revient!
la source
Je vis au Japon, donc je ne peux pas couper le son lorsque nous prenons des photos pour des raisons de sécurité. En vidéo, cependant, l'audio est désactivé. Je ne comprends pas pourquoi.
La seule façon de prendre une photo sans le son de l'obturateur est d'utiliser AVCaptureVideoDataOutput ou AVCaptureMovieFileOutput. Pour analyser l'image fixe AVCaptureVideoDataOutput est le seul moyen. Dans l'exemple de code AVFoundatation,
Dans mon 3GS, il est très lourd lorsque je règle CMTimeMake (1, 1); // Une image par seconde.
Dans l'exemple de code WWDC 2010, FindMyiCone, j'ai trouvé le code suivant,
Lorsque cette API est utilisée, le timing n'est pas accordé, mais l'API est appelée séquentiellement. Je ce que ce sont les meilleures solutions.
la source
Vous pouvez également prendre une image d'un flux vidéo pour capturer une image (pas en pleine résolution).
Il est utilisé ici pour capturer des images à de courts intervalles:
la source
Voir cet article pour un autre type de réponse: Capturez l'image à partir du tampon d'image. La capture d'écran pendant l'aperçu vidéo échoue
la source
La seule solution possible à laquelle je peux penser serait de couper le son de l'iPhone quand ils appuient sur le bouton "Prendre une photo", puis de le réactiver une seconde plus tard.
la source
Une astuce courante dans de tels cas est de savoir si le framework appelle une certaine méthode pour cet événement, puis d'écraser temporairement cette méthode, annulant ainsi son effet.
Je suis désolé mais je ne suis pas assez bon pour vous dire tout de suite si cela fonctionne dans ce cas. Vous pouvez essayer la commande "nm" sur les exécutables du framework pour voir s'il existe une fonction nommée qui a un nom convenable, ou utiliser gdb avec le simulateur pour tracer où elle va.
Une fois que vous savez quoi écraser, il y a ces fonctions de distribution ObjC de bas niveau que vous pouvez utiliser pour rediriger la recherche de fonctions, je crois. Je pense que je l'ai fait il y a quelque temps, mais je ne me souviens pas des détails.
J'espère que vous pourrez utiliser mes conseils pour rechercher sur Google quelques solutions à ce problème. Bonne chance.
la source