📄 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 + -