diff --git a/RecorderDemo/RecorderDemo/ConvertAudio/ConvertAudioFile.m b/RecorderDemo/RecorderDemo/ConvertAudio/ConvertAudioFile.m index 8e7fc6e..c7901e6 100644 --- a/RecorderDemo/RecorderDemo/ConvertAudio/ConvertAudioFile.m +++ b/RecorderDemo/RecorderDemo/ConvertAudio/ConvertAudioFile.m @@ -11,7 +11,6 @@ @interface ConvertAudioFile () @property (nonatomic, assign) BOOL stopRecord; -@property (nonatomic, assign) BOOL isSleep; @end @implementation ConvertAudioFile @@ -44,12 +43,12 @@ - (void)conventToMp3WithCafFilePath:(NSString *)cafFilePath callback:(void(^)(BOOL result))callback { - NSLog(@"convert begin!!"); + NSLog(@"convert begin!!"); __weak typeof(self) weakself = self; dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ - + weakself.stopRecord = NO; - + @try { int read, write; @@ -69,6 +68,7 @@ - (void)conventToMp3WithCafFilePath:(NSString *)cafFilePath long curpos; BOOL isSkipPCMHeader = NO; + BOOL finish = NO; do { curpos = ftell(pcm); @@ -92,20 +92,30 @@ - (void)conventToMp3WithCafFilePath:(NSString *)cafFilePath write = lame_encode_buffer_interleaved(lame, pcm_buffer, read, mp3_buffer, MP3_SIZE); fwrite(mp3_buffer, write, 1, mp3); NSLog(@"read %d bytes", write); - weakself.isSleep = NO; - } else { - weakself.isSleep = YES; + } + // 停止录音时 length 不够 PCM_SIZE * 2 导致漏转的问题 + else if (weakself.stopRecord && length) { + read = (int)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); + finish = YES; + } + else { + [NSThread sleepForTimeInterval:0.05]; NSLog(@"sleep"); } - - } while (!weakself.stopRecord || !weakself.isSleep); + } while (!finish); read = (int)fread(pcm_buffer, 2 * sizeof(short int), PCM_SIZE, pcm); write = lame_encode_flush(lame, mp3_buffer, MP3_SIZE); - + NSLog(@"read %d bytes and flush to mp3 file", write); lame_mp3_tags_fid(lame, mp3); - + lame_close(lame); fclose(mp3); fclose(pcm); @@ -123,7 +133,7 @@ - (void)conventToMp3WithCafFilePath:(NSString *)cafFilePath NSLog(@"convert mp3 finish!!! %@", mp3FilePath); } }); - + } /** @@ -170,18 +180,18 @@ + (void)conventToMp3WithCafFilePath:(NSString *)cafFilePath read = (int)fread(pcm_buffer, 2*sizeof(short int), PCM_SIZE, pcm); if (read == 0) { - write = lame_encode_flush(lame, mp3_buffer, MP3_SIZE); - + 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_mp3_tags_fid(lame, mp3); - + lame_close(lame); fclose(mp3); fclose(pcm); @@ -202,3 +212,4 @@ + (void)conventToMp3WithCafFilePath:(NSString *)cafFilePath } @end +