2017-07-28 3 views
0

Je suis en train de faire la conversion du fichier wav en MP3 en utilisant Samplerate 16000. Après la conversion de la qualité de l'audio n'est pas bon et sa vitesse semble être une augmentation. Où que cela a bien fonctionné si le taux d'échantillonnage de conversion audio mis à 8000. J'ai créé la méthode pour Wav au format mp3:Comment convertir wav en mp3 pour samplerate 16000?

+(void)convertFromWavToMp3:(NSString *)filePath FileName:(NSString *)kFileName SampleRate:(int)kSampleRate failAction:(WavToMp3CompletionBlock)failBlock successAction:(WavToMp3CompletionBlock)successBlock 

{

NSLog(@"%@", [filePath stringByDeletingLastPathComponent]); 

NSString *mp3FileName = kFileName; 
mp3FileName = [mp3FileName stringByAppendingString:@".mp3"]; 
NSString *mp3FilePath = [[filePath stringByDeletingLastPathComponent] stringByAppendingPathComponent:mp3FileName]; 

NSLog(@"%@", mp3FilePath); 

@try { 
    int read, write; 

    NSFileManager *filemgr; 
    filemgr = [NSFileManager defaultManager]; 
    char const *path_cstr = [filemgr fileSystemRepresentationWithPath:filePath]; 

    FILE *pcm = fopen(path_cstr, "rb"); //source 
    fseek(pcm, 4*1024, SEEK_CUR);         //skip file header 
    FILE *mp3 = fopen([mp3FilePath cStringUsingEncoding:1], "wb"); //output 

    const int PCM_SIZE = 16384; 
    const int MP3_SIZE = 16384; 
    short int pcm_buffer[PCM_SIZE*2]; 
    unsigned char mp3_buffer[MP3_SIZE]; 

    lame_t lame = lame_init(); 
    lame_set_in_samplerate(lame, 8000); 
    lame_set_num_channels(lame, 1); 
    lame_set_VBR(lame, vbr_default); 
    // lame_set_brate(lame, 128); 

    lame_set_quality(lame, 0); 
    lame_set_brate(lame, 128); 

    lame_set_num_samples(lame, 8000); 
    lame_set_out_samplerate(lame, 8000); 
    lame_set_mode(lame, 3); 

    lame_init_params(lame); 

    lame_print_config(lame); 

    do { 
     read = fread(pcm_buffer, 2*sizeof(short int), PCM_SIZE, pcm); 
     if (read == 0) 
      write = lame_encode_flush(lame, mp3_buffer, MP3_SIZE); 
     else 
      write = lame_encode_buffer_interleaved(lame, pcm_buffer, read, mp3_buffer, MP3_SIZE); 

     fwrite(mp3_buffer, write, 1, mp3); 

    } while (read != 0); 

    lame_close(lame); 
    fclose(mp3); 
    fclose(pcm); 
    successBlock(true); 
} 
@catch (NSException *exception) { 
    NSLog(@"%@",[exception description]); 
    failBlock(false); 
} 
@finally { 

} 
+0

S'il vous plaît vérifier ma réponse. –

+0

est ma réponse utile pour vous? –

Répondre

1

Pour convertir vague à l'utilisation mp3 peut utiliser le ExtAudioFileConverter classe: https://github.com/lixing123/ExtAudioFileConverter

Pour convertir la fréquence d'échantillonnage mp3 16000:

ExtAudioConverter* converter = [[ExtAudioConverter alloc] init]; 
converter.outputSampleRate = 16000; 
converter.outputNumberChannels = 2; 
converter.outputBitDepth = BitDepth_16; 
converter.outputFormatID = kAudioFormatLinearPCM; 
converter.outputFileType = kAudioFileMP3Type; 

converter.inputFile = @"Desktop/input.wav"; 
converter.outputFile = @"Desktop/output.mp3"; 
[converter convert];