コード例 #1
0
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;
}
コード例 #2
0
ファイル: OrgSeq.cpp プロジェクト: jimbo1qaz/vgmtrans
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
}
コード例 #3
0
ファイル: AkaoSeq.cpp プロジェクト: soneek/vgmtrans
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
}
コード例 #4
0
ファイル: KonamiGXSeq.cpp プロジェクト: soneek/vgmtrans
bool KonamiGXSeq::GetHeaderInfo(void)
{
	//nNumTracks = GetByte(dwOffset+8);
	SetPPQN(0x30);

	wostringstream	theName;
	theName << L"Konami GX Seq";
	name = theName.str();
	return true;
}
コード例 #5
0
ファイル: TriAcePS1Seq.cpp プロジェクト: vgmtrans/vgmtrans
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;
}
コード例 #6
0
ファイル: HOSA.cpp プロジェクト: soneek/vgmtrans
//==============================================================
//		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
}
コード例 #7
0
ファイル: PS1Seq.cpp プロジェクト: ArtFromCode/vgmtrans
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;
}
コード例 #8
0
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
}