Кодирование аудио с помощью хромого: преобразование 32-битного числа с плавающей запятой в mp3

У меня возникают трудности с преобразованием 32-битного аудио с плавающей запятой в mp3 с помощью lame. В настоящее время я могу преобразовать звук в mp3, но на выходе есть равномерно распределенные промежутки, которые выглядят так, как будто они вставлены между правильным выходом (ни один из ожидаемых выходных данных не отсутствует).

Ниже показано изображение временной шкалы для вывода звука в Audacity Audio timeline

Ниже приведен код, который я использую:

#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;
}

person jprince14    schedule 10.11.2014    source источник


Ответы (1)


У меня все заработало, мне просто нужно было перейти от использования lame_encode_buffer_interleaved_ieee_float к использованию функции lame_encode_buffer_ieee_float

person jprince14    schedule 12.11.2014