2008-11-09 8 views
12

Un enregistreur vocal n'a pas besoin d'audio non compressé PCM linéaire. Compressé AMR ferait bien. Le cadre intégré d'iPhone pour l'audio d'enregistrement est assez simple, mais les seuls exemples que j'ai trouvé pour la mise en place du format audio (qui viennent d'Apple) utilisent PCM linéaire. J'ai essayé plusieurs autres combinaisons de valeurs, mais je n'arrive pas à trouver quelque chose qui fonctionne.Comment puis-je enregistrer le format audio AMR sur l'iPhone?

Est-ce que quelqu'un a un code qui enregistre effectivement AMR?

Edit: Le format AMR est l'une des options permettant de définir le type de données, mais les autres options (taille du paquet, la taille d'image, etc.) ne semblent pas correspondre, peu importe ce que je les mets à.

Edit: Voici ce que j'ai pour la version PCM:

/* 
If we want to use AMR instead of PCM: 
AMR Format: 
Sampling Frequency: 8 kHz/13-bit (160 samples for 20 ms frames), filtered to 200-3400 Hz 
eight source codecs : 12.2, 1.2, 7.95, 7.40, 6.70, 5.90, 5.15, 4.75 kbit/s 
generated frame length: 244, 204, 159, 148, 134, 118, 103, 95 bits per frame 
*/ 
format->mFormatID = kAudioFormatLinearPCM; 
format->mSampleRate = 8000.0; //8 kHz 
format->mFramesPerPacket = 1; //1 frame per packet 
format->mChannelsPerFrame = 1; //Mono 
format->mBytesPerFrame = 2;  //8/bits per frame (round up) 
format->mBytesPerPacket = 2; //Same as bytes per frame 
format->mBitsPerChannel = 16; //16-bit audio 
format->mReserved = 0;   //always 0 
format->mFormatFlags = kLinearPCMFormatFlagIsBigEndian | 
         kLinearPCMFormatFlagIsSignedInteger | 
         kLinearPCMFormatFlagIsPacked; 

Répondre

13

codec AMR est pas pris en charge l'encodage/l'enregistrement sur l'iPhone, mais il est pris en charge pour la lecture: c'est la raison existe la constante kAudioFormatAMR.

Official api dit que les formats d'encodage pris en charge sont:

  • ALAC (Apple Lossless) ~> kAudioFormatAppleLossless
  • iLBC (Internet Low Bitrate Codec, pour la parole) ~> kAudioFormatiLBC
  • IMA/ADPCM (IMA4) ~> kAudioFormatAppleIMA4
  • PCM linéaire ~> kAudioFormatLinearPCM
  • μ-loi ~> kAudioFormatULaw
  • une loi ~> kAudioFormatALaw

Vous pouvez essayer un de ces formats ou utiliser une open source encodeur AMR goldenmean suggère.

modifier: lien api officiel Mise à jour

2

Je suppose que le format de codec AMR est pas pris en charge mon application enregistreur vocal iPhone. Peut-être que l'on peut essayer d'intégrer une implémentation open-source de l'encodeur AMR dans le cadre applicatif iPhone de la pomme et essayer de stocker l'audio dans un format encodé AMR. (Je ne sais pas si c'est autorisé par Apple par leur NDA/licence).

-AD

1

Vous pouvez enregistrer de l'audio à un tampon non compressé PCM linéaire (circulaire ou anneau), et, dans un autre thread, convertir des données dans ce tampon, en utilisant votre propre moteur de compression AMR (ou autre), avant enregistrer les données audio compressées dans un fichier.

Questions connexes