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 OrgSeq::GetHeaderInfo(void) { waitTime = GetShort(dwOffset + 6); beatsPerMeasure = GetByte(dwOffset + 8); SetPPQN(GetByte(dwOffset + 9)); name = L"Org Seq"; uint32_t notesSoFar = 0; //this must be used to determine the length of the entire seq for (int i = 0; i < 16; i++) { if (GetShort(dwOffset + 0x16 + i * 6)) //if there are notes in this track { nNumTracks++; //well then, we might as well say it exists OrgTrack *newOrgTrack = new OrgTrack(this, dwOffset + 0x12 + 16 * 6 + notesSoFar * 8, GetShort(0x16 + i * 6) * 8, i); newOrgTrack->numNotes = GetShort(dwOffset + 0x16 + i * 6); newOrgTrack->freq = GetShort(dwOffset + 0x12 + i * 6); newOrgTrack->waveNum = GetByte(dwOffset + 0x14 + i * 6); newOrgTrack->numNotes = GetShort(dwOffset + 0x16 + i * 6); aTracks.push_back(newOrgTrack); notesSoFar += newOrgTrack->numNotes; } } unLength = 0x12 + 6 * 16 + notesSoFar * 8; return true; //successful }
bool AkaoSeq::GetHeaderInfo(void) { //first do a version check to see if it's older or newer version of AKAO sequence format if (GetWord(dwOffset+0x2C) == 0) { nVersion = VERSION_3; //assoc_ss_id = GetShort(0x14 + dwOffset); id = GetShort(0x14 + dwOffset); seq_id = GetShort(0x4 + dwOffset); } else if (GetWord(dwOffset+0x1C) == 0) { nVersion = VERSION_2; return false; } else { nVersion = VERSION_1; return false; } name = L"Akao Seq"; VGMHeader* hdr = AddHeader(dwOffset, 0x40); hdr->AddSig(dwOffset, 4); hdr->AddSimpleItem(dwOffset+0x4, 2, L"ID"); hdr->AddSimpleItem(dwOffset+0x6, 2, L"Size"); hdr->AddSimpleItem(dwOffset+0x14, 2, L"Associated Sample Set ID"); hdr->AddSimpleItem(dwOffset+0x20, 4, L"Number of Tracks (# of true bits)"); hdr->AddSimpleItem(dwOffset+0x30, 4, L"Instrument Data Pointer"); hdr->AddSimpleItem(dwOffset+0x34, 4, L"Drumkit Data Pointer"); SetPPQN(0x30); nNumTracks = GetNumPositiveBits(GetWord(dwOffset+0x20)); unLength = GetShort(dwOffset+6); //There must be either a melodic instrument section, a drumkit, or both. We determiine //the start of the InstrSet based on whether a melodic instrument section is given. U32 instrOff = GetWord(dwOffset + 0x30); U32 drumkitOff = GetWord(dwOffset + 0x34); if (instrOff != 0) instrOff += 0x30 + dwOffset; if (drumkitOff != 0) drumkitOff += 0x34 + dwOffset; U32 instrSetLength; if (instrOff != 0) instrSetLength = unLength - (instrOff - dwOffset); else instrSetLength = unLength - (drumkitOff - dwOffset); instrset = new AkaoInstrSet(rawfile, instrSetLength, instrOff, drumkitOff, id, L"Akao Instr Set"); if (!instrset->LoadVGMFile()) { delete instrset; instrset = NULL; } return true; //successful }
bool KonamiGXSeq::GetHeaderInfo(void) { //nNumTracks = GetByte(dwOffset+8); SetPPQN(0x30); wostringstream theName; theName << L"Konami GX Seq"; name = theName.str(); return true; }
bool TriAcePS1Seq::GetHeaderInfo(void) { SetPPQN(0x30); header = AddHeader(dwOffset, 0xD5); header->AddSimpleItem(dwOffset + 2, 2, L"Size"); header->AddSimpleItem(dwOffset + 0xB, 4, L"Song title"); header->AddSimpleItem(dwOffset + 0xF, 1, L"BPM"); header->AddSimpleItem(dwOffset + 0x10, 2, L"Time Signature"); unLength = GetShort(dwOffset + 2); AlwaysWriteInitialTempo(GetByte(dwOffset + 0xF)); return true; }
//============================================================== // Get the information of HOSA header //-------------------------------------------------------------- // Input // Nothing // Output // flag true = successful // false = error // Memo // VGMSeq::LoadMain() から call される。 //============================================================== bool HOSASeq::GetHeaderInfo(void) { name = L"HOSA Seq"; //this object name // About the unLength, if (unLength==0), // "VGMSeq::LoadMain()" will calculate the unLength after "SeqTrack::LoadTrack()". nNumTracks = GetByte(dwOffset+0x06); //BYTE (8bit) assocHOSA_ID = 0x00; // Add the new object "VGMHeader" in this object "HOSASeq"(Super class:"VGMContainerItem") // Delect object is in "VGMContainerItem::~VGMContainerItem()" VGMHeader* hdr = AddHeader(dwOffset, 0x0050); hdr->AddSig(dwOffset, 4); hdr->AddSimpleItem(dwOffset+0x06, 1, L"Quantity of Tracks"); SetPPQN(0x30); //Timebase return true; //successful }
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; }
bool CompileSnesSeq::GetHeaderInfo(void) { SetPPQN(SEQ_PPQN); VGMHeader* header = AddHeader(dwOffset, 0); header->AddSimpleItem(dwOffset, 1, L"Number of Tracks"); nNumTracks = GetByte(dwOffset); if (nNumTracks == 0 || nNumTracks > 8) { return false; } uint32_t curOffset = dwOffset + 1; for (uint8_t trackIndex = 0; trackIndex < nNumTracks; trackIndex++) { std::wstringstream trackName; trackName << L"Track " << (trackIndex + 1); VGMHeader* trackHeader = header->AddHeader(curOffset, 14, trackName.str().c_str()); trackHeader->AddSimpleItem(curOffset, 1, L"Channel"); trackHeader->AddSimpleItem(curOffset + 1, 1, L"Flags"); trackHeader->AddSimpleItem(curOffset + 2, 1, L"Volume"); trackHeader->AddSimpleItem(curOffset + 3, 1, L"Volume Envelope"); trackHeader->AddSimpleItem(curOffset + 4, 1, L"Vibrato"); trackHeader->AddSimpleItem(curOffset + 5, 1, L"Transpose"); trackHeader->AddTempo(curOffset + 6, 1); trackHeader->AddSimpleItem(curOffset + 7, 1, L"Branch ID (Channel #)"); trackHeader->AddSimpleItem(curOffset + 8, 2, L"Score Pointer"); trackHeader->AddSimpleItem(curOffset + 10, 1, L"SRCN"); trackHeader->AddSimpleItem(curOffset + 11, 1, L"ADSR"); trackHeader->AddSimpleItem(curOffset + 12, 1, L"Pan"); trackHeader->AddSimpleItem(curOffset + 13, 1, L"Reserved"); curOffset += 14; } return true; //successful }