2010-09-21 42 views
5

J'essaye d'enregistrer du son et de le convertir en d'autres formats sonores. J'utilise classe AVAudioRecorder pour enregistrer et ce sont les paramètres d'enregistrement que j'ai utilisé ..Convertir le son enregistré dans l'iphone d'un format à l'autre dire wav au mp3

NSDictionary *recordSetting = [[NSMutableDictionary alloc] init]; 
[recordSetting setValue:[NSNumber numberWithInt:kAudioFormatLinearPCM] forKey:AVFormatIDKey];//kAudioFormatMicrosoftGSM,kAudioFormatLinearPCM 
[recordSetting setValue:[NSNumber numberWithFloat:8000] forKey:AVSampleRateKey]; 
[recordSetting setValue:[NSNumber numberWithInt: 2] forKey:AVNumberOfChannelsKey]; 
[recordSetting setValue :[NSNumber numberWithInt:16] forKey:AVLinearPCMBitDepthKey]; 
[recordSetting setValue :[NSNumber numberWithBool:NO] forKey:AVLinearPCMIsBigEndianKey]; 
[recordSetting setValue :[NSNumber numberWithBool:NO] forKey:AVLinearPCMIsFloatKey]; 

enregistrement fonctionne à merveille. Maintenant, je veux convertir ce fichier audio au format mp3. Puis-je le faire avec le framework AudioToolBox. J'ai essayé

AudioStreamBasicDescription sourceFormat,destinationFormat; 
//Setting up source Format setting..here wav 
sourceFormat.mSampleRate = 8000.0; 
sourceFormat.mFormatID = kAudioFormatLinearPCM; 
sourceFormat.mFormatFlags = kAudioFormatFlagIsSignedInteger ; 
sourceFormat.mBytesPerPacket = 4; 
sourceFormat.mFramesPerPacket = 1; 
sourceFormat.mBytesPerFrame = 4; 
sourceFormat.mChannelsPerFrame = 2; 
sourceFormat.mBitsPerChannel = 16; 

destinationFormat.mSampleRate = 8000.0; 
destinationFormat.mFormatID = kAudioFormatMPEGLayer3; 
destinationFormat.mFormatFlags = 0; 
destinationFormat.mBytesPerPacket = 4; 
destinationFormat.mFramesPerPacket = 1; 
destinationFormat.mBytesPerFrame = 4; 
destinationFormat.mChannelsPerFrame = 2; 
destinationFormat.mBitsPerChannel = 16; 

OSStatus returnCode  =  AudioConverterNew(&sourceFormat,&destinationFormat,&converter); 
if (returnCode) { 
    NSLog(@"error getting converter : %d",returnCode); 
    return; 
} 

La fonction AudioConverterNew() me donne erreur de kAudioConverterErr_FormatNotSupported ('fmt'). J'ai essayé avec différentes combinaisons mFormatID et mFormatFlag. Mais chaque fois que l'un des operant (source ou destination) est mp3, je reçois cette erreur. Maintenant s'il vous plaît aidez-moi avec ces questions.

  1. Peut-on utiliser le cadre AudioToolbox et fonctions pour convertir les sons entre comprimé et non format compressé (À l'heure actuelle, je veux convertir entre .wav et .mp3). Dans la documentation AudioConverterNew ils disent "Encodage et décodage entre PCM linéaire et formats compressés est pris en charge". Mais ils ne sont pas disant spécifiquement qui compressé formats.

  2. Si la réponse à la question 1 est « non » alors quel cadre dois-je utiliser pour convertir le son entre ci-dessus formats mentionnés?

  3. Non lié au-dessus de 2, mais peut personne me donner un lien vers les sites Web où l'information sur différents formats sonores (wav, mp3, aac etc) et leurs numériques représentations (cpm, LPCM, etc.) afin que je peux comprendre qui utilise quoi.

Répondre

1

Quelques réponses

  1. Oui, vous pouvez utiliser le cadre de AudioToolbox pour convertir les sons, sauf dans le cas du format .mp3. En raison de problèmes de droits d'auteur, mp3 n'est pas disponible en tant que format cible dans le cadre.

  2. Si vous voulez convertir en mp3, vous aurez probablement besoin d'utiliser les bibliothèques LAME: http://lame.cvs.sourceforge.net/viewvc/lame/lame/USAGE

  3. Voici un pour la spécification .mp3: http://mpgedit.org/mpgedit/mpeg_format/MP3Format.html Les autres formats que vous pouvez trouver assez facilement via le web Recherche

espoir qui aide