2015-06-04 11 views
1

Я пытаюсь преобразовать WAV-файл в файл MP3, используя LAME.Lame Encoding iOS в очереди

Я использую этот код. Я хочу сделать это в фоновом режиме (или в очереди). Поскольку входной файл большой, он может полностью контролировать его до завершения. Может ли кто-нибудь помочь мне сделать это?

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

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

lame_t lame = lame_init(); 
lame_set_in_samplerate(lame, 44100); 
lame_set_VBR(lame, vbr_default); 
lame_init_params(lame); 

do { 
    read = fread(pcm_buffer, 2*sizeof(short int), PCM_SIZE, pcm); 
    NSLog(@""); 
    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); 

} while (read != 0); 

lame_close(lame); 
fclose(mp3); 
fclose(pcm); 
+0

Вы можете попробовать блоки для достижения ваших требований. –

ответ

0

Я бы использовал серийный NSOperationQueue для кодирования.

NSOperationQueue *queue = [[NSOperationQueue alloc] init]; 
queue.maxConcurrentOperationCount = 1; 
#ifdef __IPHONE_8_0 
queue.qualityOfService = /* a NSQualityOfService */; 
#endif 

Вы можете добавить работу, как это:

[queue addOperationWithBlock:^{ 

    /* Encoding code goes here */ 

    dispatch_async(dispatch_get_main_queue(), ^{ 

     /* Report operation status on completion (delegate, notification, etc...) 

    }]; 

}];