
#include	"stdafx.h"
#include	"MidSearch.h"

//////////////////////////////////////////////////////////////////////////////////////////
//	コンストラクタ

CMidSearch::CMidSearch()
{
	InitHed( "MThd\0\0\0\x06", 8 );
}

//////////////////////////////////////////////////////////////////////////////////////////
//	マウント

void	CMidSearch::Mount(
	CArcFile*			pclArc							// アーカイブ
	)
{
	SFileInfo			stFileInfo;

	// 先頭位置の取得

	stFileInfo.start = pclArc->GetArcPointer();

	// トラック数の取得

	WORD				wTracks;

	pclArc->SeekCur( (GetHedSize() + 2) );
	pclArc->Read( &wTracks, 2 );
	pclArc->ConvEndian( &wTracks );

	pclArc->SeekCur( 2 );

	// 終端位置の取得

	for( WORD wCnt = 0 ; wCnt < wTracks ; wCnt++ )
	{
		BYTE				abtMark[4];

		pclArc->Read( abtMark, 4 );

		if( memcmp( abtMark, "MTrk", 4 ) != 0 )
		{
			// 不正なMIDI

			return;
		}

		// トラックサイズの取得

		DWORD				dwTrackSize;

		pclArc->Read( &dwTrackSize, 4 );
		pclArc->ConvEndian( &dwTrackSize );

		// 次のトラックへ

		pclArc->SeekCur( dwTrackSize );
	}

	stFileInfo.end = pclArc->GetArcPointer();

	// ファイルサイズ取得

	stFileInfo.sizeOrg = stFileInfo.end - stFileInfo.start;
	stFileInfo.sizeCmp = stFileInfo.sizeOrg;

	// プログレスバーを進める

	pclArc->GetProg()->UpdatePercent( stFileInfo.sizeOrg );

	pclArc->AddFileInfo( stFileInfo, GetCtFile(), _T(".mid") );
}
