我正在使用 LAME 将 WAV 文件(从音频 CD 中提取)转换为 MP3。转换结果很好,除了在文件的最开始有一个“点击”的声音。点击在歌曲本身之前几乎需要 0.5 秒。
char *input_file = argv[1];
char *output_file = argv[2];
FILE *pcm = fopen(input_file, "rb");
FILE *mp3 = fopen(output_file, "wb+");
size_t nread;
int ret, nwrite;
const int PCM_SIZE = 1152;
const int MP3_SIZE = 1152;
short pcm_buffer[PCM_SIZE * 2];
unsigned char mp3_buffer[MP3_SIZE];
lame_t lame = lame_init();
// Can not put these lines at the end of conversion
id3tag_set_title(lame, "Still reminds me");
id3tag_set_artist(lame, "Anggun");
lame_set_VBR(lame, vbr_mt);
lame_set_VBR_quality(lame, 2);
ret = lame_init_params(lame);
do {
nread = fread(pcm_buffer, sizeof(short), PCM_SIZE * 2, pcm);
if (nread != 0) {
// Is this the cause of the single click?
int nsamples = nread / 2;
short buffer_l[nsamples];
short buffer_r[nsamples];
int j = 0;
int i = 0;
for (i = 0; i < nsamples; i++) {
buffer_l[i] = pcm_buffer[j++];
buffer_r[i] = pcm_buffer[j++];
}
nwrite = lame_encode_buffer(lame, buffer_l, buffer_r, nsamples,
mp3_buffer, MP3_SIZE);
} else {
nwrite = lame_encode_flush(lame, mp3_buffer, MP3_SIZE);
}
fwrite(mp3_buffer, nwrite, 1, mp3);
} while (nread != 0);
lame_close(lame);
fclose(mp3);
fclose(pcm);
这是怎么回事?我在这里想念什么?