Почему я получаю сообщение об ошибке: проблема потока битов, повторная синхронизация при воспроизведении mp3-песен? - PullRequest
0 голосов
/ 05 октября 2018

Я получаю сообщение об ошибке битового потока.Я уже пропускаю чтение id3tag на 512 байт, но все же не могу воспроизвести все песни, пока воспроизводятся некоторые песни

define MP3_SKIP_SIZE  512
fseek(playerDetails->mp3Fp,MP3_SKIP_SIZE,SEEK_SET);

1 Ответ

0 голосов
/ 26 мая 2019

Размер тегов ID3 ​​является переменным, он не обязательно составляет 512 байт.

Вы можете использовать id3lib , чтобы узнать размер тегов ID3:



#include <id3/tag.h>

// Get size of ID3 tags 

size_t getID3TagSize(const char* filename)
{
    ID3_Tag myTag(filename);

    return myTag.Size();
}



#include <lame.h>

void decodeMp3(const char* fileName)
{
    size_t mp3TagSize = getID3TagSize(fileName);

    f.open(fileName, std::ios::binary);

    f.seekg(mp3TagSize); //Skip ID3 tags

    std::array<unsigned char, 1024*1024> buffer;

    f.read(reinterpret_cast<char*>(&buffer[0]), buffer.size());

    auto count = f.gcount();

    hip_t lameInput = hip_decode_init();

    mp3data_struct mp3data{ 0 };

    std::array<short, 1024 * 1024 * 8> pcm_l;
    std::array<short, 1024 * 1024 * 8> pcm_r;

    int decodeResult = hip_decode_headers(lameInput, &buffer[0], count, &pcm_l[0], &pcm_r[0], &mp3data);


    //... Continue decoding ...

}

...