У меня возникают трудности с преобразованием 32-битного аудио с плавающей запятой в mp3 с помощью lame. В настоящее время я могу преобразовать звук в mp3, но на выходе есть равномерно распределенные промежутки, которые выглядят так, как будто они вставлены между правильным выходом (ни один из ожидаемых выходных данных не отсутствует).
Ниже показано изображение временной шкалы для вывода звука в Audacity
Ниже приведен код, который я использую:
#include <stdio.h>
#include <lame/lame.h>
int main(void)
{
int read, write;
FILE *pcm = fopen("file.pcm", "rb");
FILE *mp3 = fopen("file.mp3", "wb");
const int PCM_SIZE = 10000;
const int MP3_SIZE = 10000;
unsigned char mp3_buffer[MP3_SIZE];
float pcm_buffer[PCM_SIZE*2];
lame_t lame = lame_init();
lame_set_in_samplerate(lame, (48000/2)); //The sampling rate of the input file is 48MHz
//but the output sounds like its on fast-forward when input sample rate is set to 48MHz
lame_set_VBR(lame, vbr_off); // also tried vbr_default
lame_set_out_samplerate(lame, 16000);
lame_init_params(lame);
do {
read = fread(pcm_buffer, sizeof(float), PCM_SIZE, pcm);
printf("read = %d\n",read);
if (read == 0)
write = lame_encode_flush(lame, mp3_buffer, MP3_SIZE);
else
write = lame_encode_buffer_interleaved_ieee_float(lame, pcm_buffer, read, mp3_buffer, MP3_SIZE);
fwrite(mp3_buffer, write, 1, mp3);
} while (read != 0);
lame_close(lame);
fclose(mp3);
fclose(pcm);
return 0;
}