bool HeartBeatPS1Seq::GetHeaderInfo(void) { name() = L"HeartBeatPS1Seq"; if (offset() + 0x10 > rawfile->size()) { return false; } SetPPQN(GetShortBE(offset()+8)); nNumTracks = 16; uint8_t numer = GetByte(offset()+0x0D); uint8_t denom = GetByte(offset()+0x0E); if (numer == 0 || numer > 32) //sanity check return false; uint8_t trackCount = GetByte(offset()+0x0F); if (trackCount > 0 && trackCount <= 16) { nNumTracks = trackCount; } SetEventsOffset(offset() + 0x10); return true; }
bool PS1Seq::GetHeaderInfo(void) { name() = L"PS1 SEQ"; SetPPQN(GetShortBE(offset()+8)); nNumTracks = 16; uint8_t numer = GetByte(offset()+0x0D); uint8_t denom = GetByte(offset()+0x0E); if (numer == 0 || numer > 32) //sanity check return false; VGMHeader* seqHeader = VGMSeq::AddHeader(offset(), 11, L"Sequence Header"); seqHeader->AddSimpleItem(offset(), 4, L"ID"); seqHeader->AddSimpleItem(offset()+0x04, 4, L"Version"); seqHeader->AddSimpleItem(offset()+0x08, 2, L"Resolution of quarter note"); seqHeader->AddTempo(offset()+0x0A, 3); seqHeader->AddSig(offset()+0x0D, 2); // Rhythm (Numerator) and Rhythm (Denominator) (2^n) if (GetByte(offset()+0xF) == 0 && GetByte(offset()+0x10) == 0) { SetEventsOffset(offset() + 0x0F + 4); PS1Seq* newPS1Seq = new PS1Seq(rawfile, offset()+GetShortBE(offset()+0x11)+0x13 - 6); if (!newPS1Seq->LoadVGMFile()) { delete newPS1Seq; } //short relOffset = (short)GetShortBE(curOffset); //AddGenericEvent(beginOffset, 4, L"Jump Relative", NULL, BG_CLR_PINK); //curOffset += relOffset; } else { SetEventsOffset(offset() + 0x0F); } return true; }