2015-06-04 24 views
1

我試圖用LAME將WAV文件轉換成MP3文件。Lame編碼隊列中的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...) 

    }]; 

}];