我收到了比特流问题的错误。我已经跳过了 512 个字节的 id3tag 读取,但是在播放某些歌曲时我仍然无法播放所有歌曲
define MP3_SKIP_SIZE 512
fseek(playerDetails->mp3Fp,MP3_SKIP_SIZE,SEEK_SET);
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 ...
}