⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 tags.cpp

📁 获取mp3信息, Xing header, ID3 tag, APE tag, VBR header
💻 CPP
字号:
#include "StdAfx.h"
#include ".\tags.h"
#include "mpaexception.h"

#include "id3v1tag.h"
#include "id3v2tag.h"
#include "lyrics3tag.h"
#include "apetag.h"
#include "musicmatchtag.h"

const CTags::FindTagFunctionPtr CTags::m_appendedTagFactories[] = 
{
	(CTags::FindTagFunctionPtr)&CID3V1Tag::FindTag,
	(CTags::FindTagFunctionPtr)&CMusicMatchTag::FindTag,
	(CTags::FindTagFunctionPtr)&CID3V2Tag::FindTag,
	(CTags::FindTagFunctionPtr)&CLyrics3Tag::FindTag,
	(CTags::FindTagFunctionPtr)&CAPETag::FindTag
};

const CTags::FindTagFunctionPtr CTags::m_prependedTagFactories[] = 
{
	(CTags::FindTagFunctionPtr)&CID3V2Tag::FindTag,
	(CTags::FindTagFunctionPtr)&CAPETag::FindTag
};



CTags::CTags(CMPAStream* pStream) :
	m_dwBegin(0), m_dwEnd(pStream->GetSize())
{
	// all appended tags
	/////////////////////////////

	while (FindAppendedTag(pStream))
		;

	// all prepended tags
	/////////////////////////////
	while (FindPrependedTag(pStream))
		;
	
}

CTags::~CTags(void)
{
	for (unsigned int n=0; n<m_Tags.size(); n++)
	{
		delete m_Tags[n];
	}
}

bool CTags::FindPrependedTag(CMPAStream* pStream)
{
	for (int i=0; i < NUMBER_OF_ELEMENTS(m_prependedTagFactories); i++) 
	{
		if (FindTag(m_prependedTagFactories[i], pStream, false))
			return true;
	}
	return false;
}

bool CTags::FindAppendedTag(CMPAStream* pStream)
{
	for (int i=0; i < NUMBER_OF_ELEMENTS(m_appendedTagFactories); i++) 
	{
		if (FindTag(m_appendedTagFactories[i], pStream, true))
			return true;
	}
	return false;
}

bool CTags::FindTag(FindTagFunctionPtr pFindTag, CMPAStream* pStream, bool bAppended)
{
	try
	{
		CTag* pTag = pFindTag(pStream, bAppended, m_dwBegin, m_dwEnd);
		if (pTag)
		{
			if (bAppended)
				m_dwEnd = pTag->GetOffset();
			else
				m_dwBegin = pTag->GetEnd();
			m_Tags.push_back(pTag);
			return true;
		}
	}
	catch(CMPAException& Exc)
	{
		Exc.ShowError();
	}
	return false;
}

CTag* CTags::GetNextTag(unsigned int& nIndex) const
{
	CTag* pTag;
	if (nIndex < m_Tags.size())
		pTag = m_Tags[nIndex];
	else
		pTag = NULL;

	nIndex++;
	return pTag;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -