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

📄 id3tag.cpp

📁 更新mp3
💻 CPP
📖 第 1 页 / 共 2 页
字号:
/////////////////////////////////////////////////////////////////////////////// Copyright (c) 2000 John Adcock.  All rights reserved.///////////////////////////////////////////////////////////////////////////////// This library is free software; you can redistribute it and/or modify it// under the terms of the GNU Library General Public License as published by// the Free Software Foundation; either version 2 of the License, or (at your// option) any later version.//// This library is distributed in the hope that it will be useful, but WITHOUT// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or// FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Library General Public// License for more details.//// You should have received a copy of the GNU Library General Public License// along with this library; if not, write to the Free Software Foundation,// Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.// The id3lib authors encourage improvements and optimisations to be sent to// the id3lib coordinator.  Please see the README file for details on where to// send such submissions.  See the AUTHORS file for a list of people who have// contributed to id3lib.  See the ChangeLog file for a list of changes to// id3lib.  These files are distributed with id3lib at// http://download.sourceforge.net/id3lib////////////////////////////////////////////////////////////////////////////////// ID3Tag.cpp : Implementation of CID3Tag/////////////////////////////////////////////////////////////////////////////// Change Log//// Date          Developer             Changes//// 05 Jan 2000   John Adcock           Original Release// 26 Apr 2000   John Adcock           Got working with id3lib 3.7.3// 18 Aug 2000   Philip Oldaker        Added Picture Functionality///////////////////////////////////////////////////////////////////////////////#include "stdafx.h"#include "ID3COM.h"#include "ID3Tag.h"#include "config.h"#include "ID3Frame.h"#include "ID3Field.h"#include "EnumFields.h"#include "id3/misc_support.h"#include "math.h"/////////////////////////////////////////////////////////////////////////////// CID3TagCID3Tag::CID3Tag(){	m_ID3Tag = new ID3_Tag();}CID3Tag::~CID3Tag(){	if(m_ID3Tag != NULL)	{		delete m_ID3Tag;	}}STDMETHODIMP CID3Tag::InterfaceSupportsErrorInfo(REFIID riid){	static const IID* arr[] =	{		&IID_IID3ComTag	};	for (int i=0; i < sizeof(arr) / sizeof(arr[0]); i++)	{		if (InlineIsEqualGUID(*arr[i],riid))			return S_OK;	}	return S_FALSE;}STDMETHODIMP CID3Tag::Link(BSTR *FileName){	USES_CONVERSION;		if(FileName == NULL)	{		return E_INVALIDARG;	}	try	{		m_ID3Tag->Link(OLE2A(*FileName));	}	catch (...)	{		return AtlReportError(CLSID_ID3ComTag, "An unexpected error has occurred", IID_IID3ComTag, E_UNEXPECTED);	}	return S_OK;}STDMETHODIMP CID3Tag::Clear(){	try	{		m_ID3Tag->Clear();	}	catch (...)	{		return AtlReportError(CLSID_ID3ComTag, "An unexpected error has occurred", IID_IID3ComTag, E_UNEXPECTED);	}	return S_OK;}STDMETHODIMP CID3Tag::get_HasChanged(VARIANT_BOOL *pVal){	try	{		*pVal = VARIANT_FALSE;		if(m_ID3Tag->HasChanged())		{			*pVal = VARIANT_TRUE;		}		else		{			*pVal = VARIANT_FALSE;		}		return S_OK;	}	catch (...)	{		return AtlReportError(CLSID_ID3ComTag, "An unexpected error has occurred", IID_IID3ComTag, E_UNEXPECTED);	}}STDMETHODIMP CID3Tag::FindFrame(eID3FrameTypes FrameID, VARIANT_BOOL CreateNewIfNotFound, IID3ComFrame** pVal){	try	{		*pVal = NULL;		ID3_Frame* pFrame = m_ID3Tag->Find((enum ID3_FrameID)FrameID);		if(CreateNewIfNotFound == VARIANT_TRUE && pFrame == NULL)		{			pFrame = new ID3_Frame((enum ID3_FrameID)FrameID);			m_ID3Tag->AttachFrame(pFrame);		}		if(pFrame != NULL)		{			*pVal = CID3Frame::CreateObject(this, pFrame);			(*pVal)->AddRef();		}		return S_OK;	}	catch (...)	{		return AtlReportError(CLSID_ID3ComTag, "An unexpected error has occurred", IID_IID3ComTag, E_UNEXPECTED);	}}STDMETHODIMP CID3Tag::get__NewEnum(IUnknown** pRetVal){	*pRetVal = CEnumFields::CreateObject(this);	(*pRetVal)->AddRef();	return S_OK;}STDMETHODIMP CID3Tag::get_Count(long *pVal){	try	{		*pVal = 0;		*pVal = m_ID3Tag->NumFrames();		return S_OK;	}	catch (...)	{		*pVal = 0;		return AtlReportError(CLSID_ID3ComTag, "An unexpected error has occurred", IID_IID3ComTag, E_UNEXPECTED);	}}STDMETHODIMP CID3Tag::get_Item(long FrameNum, IID3ComFrame** pVal){	try	{		*pVal = NULL;        ID3_Frame* pFrame = NULL;        ID3_Tag::Iterator* it = m_ID3Tag->CreateIterator();        pFrame = it->GetNext();        while(FrameNum)        {            pFrame = it->GetNext();            --FrameNum;        }        delete it;        if(pFrame != NULL)        {		    *pVal = CID3Frame::CreateObject(this, pFrame);		    (*pVal)->AddRef();        }		return S_OK;	}	catch (...)	{		return AtlReportError(CLSID_ID3ComTag, "An unexpected error has occurred", IID_IID3ComTag, E_UNEXPECTED);	}}STDMETHODIMP CID3Tag::SaveV1Tag(){	try	{		m_ID3Tag->Update(ID3TT_ID3V1);		return S_OK;	}	catch (...)	{		return AtlReportError(CLSID_ID3ComTag, "An unexpected error has occurred", IID_IID3ComTag, E_UNEXPECTED);	}}STDMETHODIMP CID3Tag::StripV1Tag(){	try	{		m_ID3Tag->Strip(ID3TT_ID3V1);		return S_OK;	}	catch (...)	{		return AtlReportError(CLSID_ID3ComTag, "An unexpected error has occurred", IID_IID3ComTag, E_UNEXPECTED);	}}STDMETHODIMP CID3Tag::SaveV2Tag(){	try	{		m_ID3Tag->Update(ID3TT_ID3V2);		return S_OK;	}	catch (...)	{		return AtlReportError(CLSID_ID3ComTag, "An unexpected error has occurred", IID_IID3ComTag, E_UNEXPECTED);	}}STDMETHODIMP CID3Tag::StripV2Tag(){	try	{		m_ID3Tag->Strip(ID3TT_ID3V2);		return S_OK;	}	catch (...)	{		return AtlReportError(CLSID_ID3ComTag, "An unexpected error has occurred", IID_IID3ComTag, E_UNEXPECTED);	}}STDMETHODIMP CID3Tag::get_Artist(BSTR *pVal){	USES_CONVERSION;	try	{		*pVal = NULL;		char* RetStr = NULL;		RetStr = ID3_GetArtist(m_ID3Tag);		*pVal = SysAllocString(A2W(RetStr));		if(RetStr != NULL)		{			delete [] RetStr;		}		return S_OK;	}	catch (...)	{		return AtlReportError(CLSID_ID3ComTag, "An unexpected error has occurred", IID_IID3ComTag, E_UNEXPECTED);	}}STDMETHODIMP CID3Tag::put_Artist(BSTR newVal){	USES_CONVERSION;	try	{		ID3_Frame *pFrame;		if((pFrame = m_ID3Tag->Find(ID3FID_LEADARTIST)) == NULL &&			(pFrame = m_ID3Tag->Find(ID3FID_BAND)) == NULL &&			(pFrame = m_ID3Tag->Find(ID3FID_CONDUCTOR)) == NULL &&			(pFrame = m_ID3Tag->Find(ID3FID_COMPOSER)) == NULL)		{			pFrame = new ID3_Frame(ID3FID_LEADARTIST);			m_ID3Tag->AttachFrame(pFrame);		}		pFrame->Field(ID3FN_TEXT) = OLE2A(newVal);		return S_OK;	}	catch (...)	{		return AtlReportError(CLSID_ID3ComTag, "An unexpected error has occurred", IID_IID3ComTag, E_UNEXPECTED);	}}STDMETHODIMP CID3Tag::get_Album(BSTR *pVal){	USES_CONVERSION;	char* RetStr = NULL;	try	{		*pVal = NULL;		RetStr = ID3_GetAlbum(m_ID3Tag);		*pVal = SysAllocString(A2W(RetStr));		if(RetStr != NULL)		{			delete [] RetStr;		}		return S_OK;	}	catch (...)	{		return AtlReportError(CLSID_ID3ComTag, "An unexpected error has occurred", IID_IID3ComTag, E_UNEXPECTED);	}}STDMETHODIMP CID3Tag::put_Album(BSTR newVal){	USES_CONVERSION;	try	{		ID3_AddAlbum(m_ID3Tag, OLE2A(newVal), true);		return S_OK;	}	catch (...)	{		return AtlReportError(CLSID_ID3ComTag, "An unexpected error has occurred", IID_IID3ComTag, E_UNEXPECTED);	}}STDMETHODIMP CID3Tag::get_Title(BSTR *pVal){	USES_CONVERSION;	char* RetStr = NULL;	try	{		*pVal = NULL;		RetStr = ID3_GetTitle(m_ID3Tag);		*pVal = SysAllocString(A2W(RetStr));		if(RetStr != NULL)		{			delete [] RetStr;		}		return S_OK;	}	catch (...)	{		return AtlReportError(CLSID_ID3ComTag, "An unexpected error has occurred", IID_IID3ComTag, E_UNEXPECTED);	}}STDMETHODIMP CID3Tag::put_Title(BSTR newVal){	USES_CONVERSION;	try	{		ID3_AddTitle(m_ID3Tag, OLE2A(newVal), true);		return S_OK;	}	catch (...)	{		return AtlReportError(CLSID_ID3ComTag, "An unexpected error has occurred", IID_IID3ComTag, E_UNEXPECTED);	}}STDMETHODIMP CID3Tag::get_Comment(BSTR *pVal){	USES_CONVERSION;	try	{		*pVal = NULL;		char* RetStr = NULL;		RetStr = ID3_GetComment(m_ID3Tag);		*pVal = SysAllocString(A2W(RetStr));		if(RetStr != NULL)		{			delete [] RetStr;		}		return S_OK;	}	catch (...)	{		return AtlReportError(CLSID_ID3ComTag, "An unexpected error has occurred", IID_IID3ComTag, E_UNEXPECTED);	}}STDMETHODIMP CID3Tag::put_Comment(BSTR newVal){	USES_CONVERSION;	try	{		ID3_AddComment(m_ID3Tag, OLE2A(newVal), STR_V1_COMMENT_DESC, true);		return S_OK;	}	catch (...)	{		return AtlReportError(CLSID_ID3ComTag, "An unexpected error has occurred", IID_IID3ComTag, E_UNEXPECTED);	}}STDMETHODIMP CID3Tag::get_Genre(long *pVal){	try	{		*pVal = 255;		*pVal = ID3_GetGenreNum(m_ID3Tag);		return S_OK;	}	catch (...)	{		return AtlReportError(CLSID_ID3ComTag, "An unexpected error has occurred", IID_IID3ComTag, E_UNEXPECTED);	}}STDMETHODIMP CID3Tag::put_Genre(long newVal){	try	{		ID3_AddGenre(m_ID3Tag, newVal, true);		return S_OK;	}	catch (...)	{		return AtlReportError(CLSID_ID3ComTag, "An unexpected error has occurred", IID_IID3ComTag, E_UNEXPECTED);	}}STDMETHODIMP CID3Tag::get_Year(BSTR *pVal){	USES_CONVERSION;	try	{		*pVal = 0;		char* RetStr = NULL;		RetStr = ID3_GetYear(m_ID3Tag);		*pVal = SysAllocString(A2W(RetStr));		if(RetStr != NULL)		{			delete [] RetStr;		}		return S_OK;	}	catch (...)	{		return AtlReportError(CLSID_ID3ComTag, "An unexpected error has occurred", IID_IID3ComTag, E_UNEXPECTED);	}

⌨️ 快捷键说明

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