使用 LAME 将音频文件从 .wav 转换为 MP3 时出现问题

Issue while converting audio file from .wav to MP3 using LAME

我正在为我的 iOS 应用程序尝试使用 LAME 将线性 PCM 音频文件 (.wav) 转换为 MP3。我成功地做到了,除了一个问题,创建的 MP3 文件比原始的 .wav 文件小。对于 30 秒的 wav 文件,创建的 MP3 文件为 27 秒,最后 3 秒的音频被切断。对于 5 分钟的音频,大约 30 秒的音频在生成的 MP3 中被截断。

我不太确定是什么导致了这个问题,我试过改变一些东西但没有任何效果。有人可以帮助我并将我推向正确的方向吗?

这是我为此使用的代码。

    int read, write;
    FILE *pcm = fopen([mergeFile cStringUsingEncoding:1], "rb");  //source
    fseek(pcm, 4*1024, SEEK_CUR);                                   //skip file header
    FILE *mp3 = fopen([mp3FilePath cStringUsingEncoding:1], "wb");  //output

    const int PCM_SIZE = 8192;
    const int MP3_SIZE = 8192;
    short int pcm_buffer[PCM_SIZE*2];
    unsigned char mp3_buffer[MP3_SIZE];

    lame_t lame = lame_init();
    lame_set_in_samplerate(lame, 44100);
    lame_set_VBR(lame, vbr_default);
    lame_init_params(lame);

    do {
        read = fread(pcm_buffer, 2*sizeof(short int), PCM_SIZE, pcm);
        NSLog(@"");
        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);



    } while (read != 0);




    lame_close(lame);
    fclose(mp3);
    fclose(pcm);

我做了同样的任务,它对我来说工作得很好。我在上面的代码中看到的唯一区别是你必须用 lame_set_VBR(lame, vbr_off);

替换 lame_set_VBR(lame, vbr_default); 这个语句

这应该可以正常工作。请检查此更改。