2009-02-20 11 views
14

Je réalise une application d'enregistrement iPhone qui doit soumettre le fichier son en tant que fichier .wav à un serveur externe.Enregistrement du son en WAV sur l'iphone

A partir de l'exemple SpeakHere, je suis en mesure d'enregistrer le son en tant que fichier, mais seulement comme .caf

Est-ce que quelqu'un sait comment enregistrer comme un wav au lieu? Ou comment convertir des fichiers .caf en .wav sur l'iphone? (La conversion doit se produire sur le téléphone)

EDIT:

Je me demande si quelque chose peut être fait avec l'aide kAudioFileWAVEType au lieu de kAudioFileCAFType dans AudioFileCreateWithURL

Répondre

19

Eh oui, la clé est kAudioFileWAVEType

AudioFileCreateWithURL (
      audioFileURL, 
      kAudioFileWAVEType, 
      &audioFormat, 
      kAudioFileFlags_EraseFile, 
      &audioFileID 
     ); 

Changement WAVE de la CAF dans l'exemple SpeakHere provoque la enregistrement pour être comme wav. J'ai également éditer la même chose dans la classe de lecture, et a changé le nom de fichier pour être Recording.wav

+0

Soyez prudent. AVAudioFileTypeKey avec kAudioFileWAVEType est uniquement disponible sur iOS 11.0 ou plus récent – CFIFok

2

Jetez un oeil à libsndfile. C'est une bibliothèque C bien utilisée (y compris par Audacity) pour travailler avec beaucoup de formats de fichiers. Il supporte la lecture et l'écriture d'une variété de formats CAF et WAV. Les codes CAF File structure et WAV format sont assez similaires. Si le pire arrive au pire, la conversion ne devrait pas être trop difficile.

Cela impliquerait de prendre le morceau de données audio et de le copier dans le fichier WAV, et d'utiliser les informations dans le morceau de description audio pour ajouter un sous-bloc fmt équivalent pour le fichier WAV. C'est une copie d'octet assez simple.

Cependant, soyez conscient (comme Eric a souligné) il y a des problèmes de licences, voir: Can the Libsndfile library be used on the iPhone iOS?

+1

Merci. J'ai utilisé le lien de format WAV pour confirmer que l'enregistrement fonctionnait. J'avais un problème pour envoyer des données à mon serveur. – matt

+1

J'ai voté parce que le fichier libsndfile ne peut pas être utilisé sur l'iPhone: http://stackoverflow.com/questions/4939268/can-the-libsndfile-library-be-used-on-the-iphone-ios –

+0

Merci pour le commentaire. Vous pouvez toujours l'utiliser en liant statiquement dans votre code (ou au moins la réponse que vous mentionnez le dit), mais cela vaut la peine de mentionner dans la réponse ici. Je vais l'ajouter –

Questions connexes