📄 id3tag.cpp
字号:
}
STDMETHODIMP CID3Tag::put_Year(BSTR newVal)
{
USES_CONVERSION;
try
{
ID3_AddYear(m_ID3Tag, OLE2A(newVal), true);
}
catch (...)
{
return AtlReportError(CLSID_ID3ComTag, "An unexpected error has occurred", IID_IID3ComTag, E_UNEXPECTED);
}
return S_OK;
}
STDMETHODIMP CID3Tag::get_Track(long *pVal)
{
try
{
*pVal = -1;
*pVal = ID3_GetTrackNum(m_ID3Tag);
return S_OK;
}
catch (...)
{
return AtlReportError(CLSID_ID3ComTag, "An unexpected error has occurred", IID_IID3ComTag, E_UNEXPECTED);
}
}
STDMETHODIMP CID3Tag::put_Track(long newVal)
{
try
{
ID3_AddTrack(m_ID3Tag, (uchar)newVal, 0, true);
return S_OK;
}
catch (...)
{
return AtlReportError(CLSID_ID3ComTag, "An unexpected error has occurred", IID_IID3ComTag, E_UNEXPECTED);
}
}
STDMETHODIMP CID3Tag::get_LastPlayed(DATE *pVal)
{
try
{
*pVal = 0;
ID3_Frame *pFrame = m_ID3Tag->Find(ID3FID_USERTEXT, ID3FN_DESCRIPTION, "LastPlayed");
if (pFrame != NULL)
{
char* szLastPlayed = ID3_GetString(pFrame, ID3FN_TEXT);
if(szLastPlayed != NULL)
{
*pVal = atof(szLastPlayed);
delete [] szLastPlayed;
}
}
return S_OK;
}
catch (...)
{
return AtlReportError(CLSID_ID3ComTag, "An unexpected error has occurred", IID_IID3ComTag, E_UNEXPECTED);
}
}
STDMETHODIMP CID3Tag::put_LastPlayed(DATE newVal)
{
try
{
ID3_Frame *pFrame = m_ID3Tag->Find(ID3FID_USERTEXT, ID3FN_DESCRIPTION, "LastPlayed");
if(pFrame == NULL)
{
pFrame = new ID3_Frame(ID3FID_USERTEXT);
pFrame->Field(ID3FN_DESCRIPTION) = "LastPlayed";
pFrame->Field(ID3FN_TEXTENC) = ID3TE_ASCII;
m_ID3Tag->AttachFrame(pFrame);
}
char Buffer[40];
sprintf(Buffer, "%6.7f", newVal);
pFrame->Field(ID3FN_TEXT) = Buffer;
return S_OK;
}
catch (...)
{
return AtlReportError(CLSID_ID3ComTag, "An unexpected error has occurred", IID_IID3ComTag, E_UNEXPECTED);
}
}
STDMETHODIMP CID3Tag::get_HasV1Tag(VARIANT_BOOL *pVal)
{
try
{
*pVal = VARIANT_FALSE;
if (m_ID3Tag->HasTagType(ID3TT_ID3V1))
{
*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::get_HasV2Tag(VARIANT_BOOL *pVal)
{
try
{
*pVal = VARIANT_FALSE;
if (m_ID3Tag->HasTagType(ID3TT_ID3V2))
{
*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::get_HasLyrics(VARIANT_BOOL *pVal)
{
try
{
if (m_ID3Tag->HasTagType(ID3TT_LYRICS))
{
*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::FindFrameString(eID3FrameTypes FrameID, eID3FieldTypes FieldType, BSTR FindString, VARIANT_BOOL CreateNewIfNotFound, IID3ComFrame** pVal)
{
try
{
*pVal = NULL;
ID3_Frame* pFrame = m_ID3Tag->Find((enum ID3_FrameID)FrameID, (enum ID3_FieldID)FieldType, FindString);
if(CreateNewIfNotFound == VARIANT_TRUE && pFrame == NULL)
{
pFrame = new ID3_Frame((enum ID3_FrameID)FrameID);
pFrame->Field((enum ID3_FieldID)FieldType) = FindString;
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_PlayCount(BSTR EMailAddress, long *pVal)
{
try
{
*pVal = 0;
ID3_Frame *pFrame = m_ID3Tag->Find(ID3FID_POPULARIMETER, ID3FN_EMAIL, EMailAddress);
if (pFrame != NULL)
{
*pVal = pFrame->Field(ID3FN_COUNTER).Get();
}
return S_OK;
}
catch (...)
{
return AtlReportError(CLSID_ID3ComTag, "An unexpected error has occurred", IID_IID3ComTag, E_UNEXPECTED);
}
}
STDMETHODIMP CID3Tag::put_PlayCount(BSTR EMailAddress, long newVal)
{
try
{
ID3_Frame *pFrame = m_ID3Tag->Find(ID3FID_POPULARIMETER, ID3FN_EMAIL, EMailAddress);
if(pFrame == NULL)
{
pFrame = new ID3_Frame(ID3FID_POPULARIMETER);
pFrame->Field(ID3FN_EMAIL) = EMailAddress;
m_ID3Tag->AttachFrame(pFrame);
}
pFrame->Field(ID3FN_COUNTER) = newVal;
return S_OK;
}
catch (...)
{
return AtlReportError(CLSID_ID3ComTag, "An unexpected error has occurred", IID_IID3ComTag, E_UNEXPECTED);
}
}
STDMETHODIMP CID3Tag::get_Popularity(BSTR EMailAddress, short *pVal)
{
try
{
*pVal = 0;
ID3_Frame *pFrame = m_ID3Tag->Find(ID3FID_POPULARIMETER, ID3FN_EMAIL, EMailAddress);
if (pFrame != NULL)
{
*pVal = (short)pFrame->Field(ID3FN_RATING).Get();
}
return S_OK;
}
catch (...)
{
return AtlReportError(CLSID_ID3ComTag, "An unexpected error has occurred", IID_IID3ComTag, E_UNEXPECTED);
}
}
STDMETHODIMP CID3Tag::put_Popularity(BSTR EMailAddress, short newVal)
{
try
{
ID3_Frame *pFrame = m_ID3Tag->Find(ID3FID_POPULARIMETER, ID3FN_EMAIL, EMailAddress);
if(pFrame == NULL)
{
pFrame = new ID3_Frame(ID3FID_POPULARIMETER);
pFrame->Field(ID3FN_EMAIL) = EMailAddress;
m_ID3Tag->AttachFrame(pFrame);
}
pFrame->Field(ID3FN_RATING) = newVal;
return S_OK;
}
catch (...)
{
return AtlReportError(CLSID_ID3ComTag, "An unexpected error has occurred", IID_IID3ComTag, E_UNEXPECTED);
}
}
STDMETHODIMP CID3Tag::get_TagCreated(DATE *pVal)
{
try
{
*pVal = 0;
ID3_Frame *pFrame = m_ID3Tag->Find(ID3FID_USERTEXT, ID3FN_DESCRIPTION, "TagCreated");
if (pFrame != NULL)
{
char* szTagCreated = ID3_GetString(pFrame, ID3FN_TEXT);
if(szTagCreated != NULL)
{
*pVal = atof(szTagCreated);
delete [] szTagCreated;
}
}
return S_OK;
}
catch (...)
{
return AtlReportError(CLSID_ID3ComTag, "An unexpected error has occurred", IID_IID3ComTag, E_UNEXPECTED);
}
}
STDMETHODIMP CID3Tag::put_TagCreated(DATE newVal)
{
try
{
ID3_Frame *pFrame = m_ID3Tag->Find(ID3FID_USERTEXT, ID3FN_DESCRIPTION, "TagCreated");
if(pFrame == NULL)
{
pFrame = new ID3_Frame(ID3FID_USERTEXT);
pFrame->Field(ID3FN_DESCRIPTION) = "TagCreated";
pFrame->Field(ID3FN_TEXTENC) = ID3TE_ASCII;
m_ID3Tag->AttachFrame(pFrame);
}
char Buffer[40];
sprintf(Buffer, "%6.7f", newVal);
pFrame->Field(ID3FN_TEXT) = Buffer;
return S_OK;
}
catch (...)
{
return AtlReportError(CLSID_ID3ComTag, "An unexpected error has occurred", IID_IID3ComTag, E_UNEXPECTED);
}
}
STDMETHODIMP CID3Tag::get_PercentVolumeAdjust(double *pVal)
{
try
{
*pVal = 100;
ID3_Frame *pFrame = m_ID3Tag->Find(ID3FID_USERTEXT, ID3FN_DESCRIPTION, "PercentVolAdj");
if (pFrame != NULL)
{
char* szVolAdjust = ID3_GetString(pFrame, ID3FN_TEXT);
if(szVolAdjust != NULL)
{
*pVal = atof(szVolAdjust);
delete [] szVolAdjust;
}
}
return S_OK;
}
catch (...)
{
return AtlReportError(CLSID_ID3ComTag, "An unexpected error has occurred", IID_IID3ComTag, E_UNEXPECTED);
}
}
STDMETHODIMP CID3Tag::put_PercentVolumeAdjust(double newVal)
{
try
{
ID3_Frame *pFrame = m_ID3Tag->Find(ID3FID_USERTEXT, ID3FN_DESCRIPTION, "PercentVolAdj");
if(pFrame == NULL)
{
pFrame = new ID3_Frame(ID3FID_USERTEXT);
pFrame->Field(ID3FN_DESCRIPTION) = "PercentVolAdj";
pFrame->Field(ID3FN_TEXTENC) = ID3TE_ASCII;
m_ID3Tag->AttachFrame(pFrame);
}
char Buffer[40];
sprintf(Buffer, "%6.7f", newVal);
pFrame->Field(ID3FN_TEXT) = Buffer;
return S_OK;
}
catch (...)
{
return AtlReportError(CLSID_ID3ComTag, "An unexpected error has occurred", IID_IID3ComTag, E_UNEXPECTED);
}
}
STDMETHODIMP CID3Tag::put_Padding(VARIANT_BOOL newVal)
{
try
{
m_ID3Tag->SetPadding(newVal == VARIANT_TRUE);
return S_OK;
}
catch (...)
{
return AtlReportError(CLSID_ID3ComTag, "An unexpected error has occurred", IID_IID3ComTag, E_UNEXPECTED);
}
}
STDMETHODIMP CID3Tag::put_UnSync(VARIANT_BOOL newVal)
{
try
{
m_ID3Tag->SetUnsync(newVal == VARIANT_TRUE);
return S_OK;
}
catch (...)
{
return AtlReportError(CLSID_ID3ComTag, "An unexpected error has occurred", IID_IID3ComTag, E_UNEXPECTED);
}
}
STDMETHODIMP CID3Tag::get_VersionString(BSTR *pVal)
{
USES_CONVERSION;
try
{
// this buffer needs to be overly large
// for some unexplained reason
// if the size is small you get what?
char Buffer[1024];
sprintf(Buffer, "id3com %d.%d.%d Compiled %s %s", _ID3LIB_MAJOR_VERSION,
_ID3LIB_MINOR_VERSION,
_ID3LIB_PATCH_VERSION,
__DATE__,
__TIME__);
*pVal = SysAllocString(A2W(Buffer));
return S_OK;
}
catch (...)
{
return AtlReportError(CLSID_ID3ComTag, "An unexpected error has occurred", IID_IID3ComTag, E_UNEXPECTED);
}
}
STDMETHODIMP CID3Tag::RemoveFrame(eID3FrameTypes FrameID)
{
// TODO: Add your implementation code here
HRESULT hr=S_OK;
try
{
ID3_Frame* pFrame = m_ID3Tag->Find((enum ID3_FrameID)FrameID);
if (pFrame)
{
/* pTag is an ID3_Tag */
delete m_ID3Tag->RemoveFrame(pFrame);
}
else
hr = E_POINTER;
}
catch (...)
{
return AtlReportError(CLSID_ID3ComTag, "An unexpected error has occurred", IID_IID3ComTag, E_UNEXPECTED);
}
return hr;
}
STDMETHODIMP CID3Tag::RemoveFrameByNum(long FrameNum)
{
HRESULT hr=S_OK;
try
{
ID3_Frame* pFrame = NULL;
ID3_Tag::Iterator* it = m_ID3Tag->CreateIterator();
pFrame = it->GetNext();
while(FrameNum)
{
pFrame = it->GetNext();
--FrameNum;
}
delete it;
if(pFrame)
{
/* pTag is an ID3_Tag */
delete m_ID3Tag->RemoveFrame(pFrame);
}
else
{
hr = E_POINTER;
}
}
catch (...)
{
return AtlReportError(CLSID_ID3ComTag, "An unexpected error has occurred", IID_IID3ComTag, E_UNEXPECTED);
}
return hr;
}
///////////////////////////////////////////////////////
// End Added Philip Oldaker 12-Aug 2000
///////////////////////////////////////////////////////
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -