Размер тегов 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 ...
}