Estoy usando lame para convertir un archivo WAV (extraído de un CD de audio) en MP3. El resultado de la conversión está bien, excepto que al principio del archivo hay un solo sonido de "clic". El clic tarda casi 0,5 segundos antes de la canción en sí.Haga clic en el sonido al principio cuando use Lame
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);
¿Qué está pasando? ¿Qué extraño aquí?
Eso es brillante. Siempre debería usar una solución orientada a resultados. Creo que usaré este truco hasta que resuelva el problema. ¡Gracias, amigo! – sancho21