📄 id3v2tag.c
字号:
{ /* Provide the item or subitem's text, if requested. */ if (pnmv->item.mask & LVIF_TEXT) { ID3ITEM *pItem = (ID3ITEM *) (pnmv->item.lParam); lstrcpy(pnmv->item.pszText, pItem->aCols[pnmv->item.iSubItem]); }}ID3ITEM *pItem;int editItemIndex;BOOL CALLBACK EditTextFrameProc(HWND hwndDlg, UINT message, WPARAM wParam, LPARAM lParam){ LV_ITEM lvi; switch (message) { case WM_INITDIALOG: SetDlgItemText(hwndDlg, IDC_TEXTFRAMENAME, pItem->aCols[0]); SetDlgItemText(hwndDlg, IDC_EDITTEXTFRAME, pItem->aCols[1]); switch (pItem->frameId) { case ID3FID_ALBUM: case ID3FID_BPM: case ID3FID_COMPOSER: case ID3FID_COPYRIGHT: case ID3FID_DATE: case ID3FID_PLAYLISTDELAY: case ID3FID_ENCODEDBY: case ID3FID_LYRICIST: case ID3FID_FILETYPE: case ID3FID_TIME: case ID3FID_CONTENTGROUP: case ID3FID_TITLE: case ID3FID_SUBTITLE: case ID3FID_INITIALKEY: case ID3FID_LANGUAGE: case ID3FID_SONGLEN: case ID3FID_MEDIATYPE: case ID3FID_ORIGALBUM: case ID3FID_ORIGFILENAME: case ID3FID_ORIGLYRICIST: case ID3FID_ORIGARTIST: case ID3FID_ORIGYEAR: case ID3FID_FILEOWNER: case ID3FID_LEADARTIST: case ID3FID_BAND: case ID3FID_CONDUCTOR: case ID3FID_MIXARTIST: case ID3FID_PARTINSET: case ID3FID_PUBLISHER: case ID3FID_TRACKNUM: case ID3FID_RECORDINGDATES: case ID3FID_NETRADIOSTATION: case ID3FID_NETRADIOOWNER: case ID3FID_SIZE: case ID3FID_ISRC: case ID3FID_ENCODERSETTINGS: case ID3FID_YEAR: case ID3FID_WWWAUDIOFILE: case ID3FID_WWWARTIST: case ID3FID_WWWAUDIOSOURCE: case ID3FID_WWWCOMMERCIALINFO: case ID3FID_WWWCOPYRIGHT: case ID3FID_WWWPUBLISHER: case ID3FID_WWWPAYMENT: case ID3FID_WWWRADIOPAGE: case ID3FID_CONTENTTYPE: { EnableWindow(GetDlgItem(hwndDlg, IDC_TEXTFRAMENAME), FALSE); EnableWindow(GetDlgItem(hwndDlg, IDC_EDITTEXTFRAME), TRUE); break; } case ID3FID_USERTEXT: case ID3FID_COMMENT: case ID3FID_UNSYNCEDLYRICS: case ID3FID_WWWUSER: { EnableWindow(GetDlgItem(hwndDlg, IDC_TEXTFRAMENAME), TRUE); EnableWindow(GetDlgItem(hwndDlg, IDC_EDITTEXTFRAME), TRUE); break; } default: EnableWindow(GetDlgItem(hwndDlg, IDOK), FALSE); EnableWindow(GetDlgItem(hwndDlg, IDC_TEXTFRAMENAME), FALSE); EnableWindow(GetDlgItem(hwndDlg, IDC_EDITTEXTFRAME), FALSE); break; } return TRUE; case WM_COMMAND: switch (LOWORD(wParam)) { case IDOK: { GetDlgItemText(hwndDlg, IDC_TEXTFRAMENAME, pItem->aCols[0], 1024); GetDlgItemText(hwndDlg, IDC_EDITTEXTFRAME, pItem->aCols[1], 1024); lvi.mask = LVIF_TEXT | LVIF_IMAGE | LVIF_PARAM | LVIF_STATE; lvi.state = 0; lvi.stateMask = 0; lvi.pszText = LPSTR_TEXTCALLBACK; /* app. maintains text */ lvi.iImage = 0; lvi.iItem = editItemIndex; lvi.iSubItem = 0; lvi.lParam = (LPARAM)pItem; /* item data */ /* Add the item. */ ListView_SetItem(m_hwndList, &lvi); ListView_Update(m_hwndList, editItemIndex); } /* Fall through */ case IDCANCEL: EndDialog(hwndDlg, wParam); return TRUE; } } return FALSE;}/* Double clicking means editing a frame */BOOL List_EditData(HWND hwndApp, HWND hwndList){ LV_ITEM lvi; BOOL result; /* First get the selected item */ int index = ListView_GetNextItem(hwndList, -1, LVNI_SELECTED); m_hwndList = hwndList; if (index != -1) { lvi.mask = LVIF_PARAM; lvi.iItem = index; lvi.iSubItem = 0; if (ListView_GetItem(hwndList, &lvi) == TRUE) { pItem = (ID3ITEM*)lvi.lParam; editItemIndex = lvi.iItem; result = DialogBox(hInstance_for_id3editor, MAKEINTRESOURCE(IDD_EDITTEXTFRAME), hwndApp, EditTextFrameProc); if (LOWORD(result) == IDOK) return TRUE; } } return FALSE;}/* Delete the selected frame */BOOL List_DeleteSelected(HWND hwndApp, HWND hwndList){ int items; /* First get the selected item */ int index = ListView_GetNextItem(hwndList, -1, LVNI_SELECTED); if (index != -1) ListView_DeleteItem(hwndList, index); items = ListView_GetItemCount(hwndList); if (index != -1) return TRUE; else return FALSE;}/* Save the ID3 to the file */void List_SaveID3(HWND hwndApp, HWND hwndList, char *filename){ LV_ITEM lvi; ID3ITEM *pItem1; int i, items; ID3Tag *tag; ID3Frame *frame; ID3Field *field; /* Strip the tag first, before completely rewriting it */ if ((tag = ID3Tag_New()) != NULL) { ID3Tag_Link(tag, filename); ID3Tag_Strip(tag, ID3TT_ALL); ID3Tag_Clear(tag); if (SendMessage(GetDlgItem(hwndApp, IDC_ID3V2TAG), BM_GETCHECK, 0, 0) == BST_UNCHECKED) { /* No frames saved */ ID3Tag_Delete(tag); EnableWindow(GetDlgItem(hwndApp, IDC_ID3V2TAG), FALSE); ListView_DeleteAllItems(hwndList); return; } /* First get the number of items */ items = ListView_GetItemCount(hwndList); if (items > 0) { for (i = 0; i < items; i++) { lvi.mask = LVIF_PARAM; lvi.iItem = i; lvi.iSubItem = 0; if (ListView_GetItem(hwndList, &lvi) == TRUE) { pItem1 = (ID3ITEM*)lvi.lParam; frame = ID3Frame_NewID(pItem1->frameId); switch (pItem1->frameId) { case ID3FID_ALBUM: case ID3FID_BPM: case ID3FID_COMPOSER: case ID3FID_CONTENTTYPE: case ID3FID_COPYRIGHT: case ID3FID_DATE: case ID3FID_PLAYLISTDELAY: case ID3FID_ENCODEDBY: case ID3FID_LYRICIST: case ID3FID_FILETYPE: case ID3FID_TIME: case ID3FID_CONTENTGROUP: case ID3FID_TITLE: case ID3FID_SUBTITLE: case ID3FID_INITIALKEY: case ID3FID_LANGUAGE: case ID3FID_SONGLEN: case ID3FID_MEDIATYPE: case ID3FID_ORIGALBUM: case ID3FID_ORIGFILENAME: case ID3FID_ORIGLYRICIST: case ID3FID_ORIGARTIST: case ID3FID_ORIGYEAR: case ID3FID_FILEOWNER: case ID3FID_LEADARTIST: case ID3FID_BAND: case ID3FID_CONDUCTOR: case ID3FID_MIXARTIST: case ID3FID_PARTINSET: case ID3FID_PUBLISHER: case ID3FID_TRACKNUM: case ID3FID_RECORDINGDATES: case ID3FID_NETRADIOSTATION: case ID3FID_NETRADIOOWNER: case ID3FID_SIZE: case ID3FID_ISRC: case ID3FID_ENCODERSETTINGS: case ID3FID_YEAR: { field = ID3Frame_GetField(frame, ID3FN_TEXT); ID3Field_SetASCII(field, pItem1->aCols[1]); ID3Tag_AddFrame(tag, frame); break; } case ID3FID_USERTEXT: case ID3FID_COMMENT: /* Can also contain an extra language field (but not used now) */ case ID3FID_UNSYNCEDLYRICS: /* Can also contain an extra language field (but not used now) */ { field = ID3Frame_GetField(frame, ID3FN_DESCRIPTION); ID3Field_SetASCII(field, pItem1->aCols[0]); field = ID3Frame_GetField(frame, ID3FN_TEXT); ID3Field_SetASCII(field, pItem1->aCols[1]); ID3Tag_AddFrame(tag, frame); break; } case ID3FID_WWWAUDIOFILE: case ID3FID_WWWARTIST: case ID3FID_WWWAUDIOSOURCE: case ID3FID_WWWCOMMERCIALINFO: case ID3FID_WWWCOPYRIGHT: case ID3FID_WWWPUBLISHER: case ID3FID_WWWPAYMENT: case ID3FID_WWWRADIOPAGE: { field = ID3Frame_GetField(frame, ID3FN_URL); ID3Field_SetASCII(field, pItem1->aCols[1]); ID3Tag_AddFrame(tag, frame); break; } case ID3FID_WWWUSER: { field = ID3Frame_GetField(frame, ID3FN_DESCRIPTION); ID3Field_SetASCII(field, pItem1->aCols[0]); field = ID3Frame_GetField(frame, ID3FN_URL); ID3Field_SetASCII(field, pItem1->aCols[1]); ID3Tag_AddFrame(tag, frame); break; } default: break; } } } ID3Tag_UpdateByTagType(tag, ID3TT_ID3V2); } ID3Tag_Delete(tag); }}/* Get the title from the file */void GetID3FileTitle(char *filename, char *title, char *format){ ID3Tag *tag; ID3Frame *frame; ID3Field *field; char buffer[255]; int some_info = 0; char *in = format; char *out = title; char *bound = out + (MAX_PATH - 10 - 1); if ((tag = ID3Tag_New()) != NULL) { ID3Tag_Link(tag, filename); while (*in && out < bound) { switch (*in) { case '%': ++in; break; default: *out++ = *in++; continue; } /* handle % escape sequence */ switch (*in++) { case '0': if ((frame = ID3Tag_FindFrameWithID(tag, ID3FID_TRACKNUM)) != NULL) { int size; field = ID3Frame_GetField(frame, ID3FN_TEXT); size = ID3Field_GetASCII(field, buffer, 255, 1); lstrcpy(out, buffer); out += size; some_info = 1; } break; case '1': if ((frame = ID3Tag_FindFrameWithID(tag, ID3FID_LEADARTIST)) != NULL) { int size; field = ID3Frame_GetField(frame, ID3FN_TEXT); size = ID3Field_GetASCII(field, buffer, 255, 1); lstrcpy(out, buffer); out += size; some_info = 1; } break; case '2': if ((frame = ID3Tag_FindFrameWithID(tag, ID3FID_TITLE)) != NULL) { int size; field = ID3Frame_GetField(frame, ID3FN_TEXT); size = ID3Field_GetASCII(field, buffer, 255, 1); lstrcpy(out, buffer); out += size; some_info = 1; } break; case '3': if ((frame = ID3Tag_FindFrameWithID(tag, ID3FID_ALBUM)) != NULL) { int size; field = ID3Frame_GetField(frame, ID3FN_TEXT); size = ID3Field_GetASCII(field, buffer, 255, 1); lstrcpy(out, buffer); out += size; some_info = 1; } break; case '4': if ((frame = ID3Tag_FindFrameWithID(tag, ID3FID_YEAR)) != NULL) { int size; field = ID3Frame_GetField(frame, ID3FN_TEXT); size = ID3Field_GetASCII(field, buffer, 255, 1); lstrcpy(out, buffer); out += size; some_info = 1; } break; case '5': if ((frame = ID3Tag_FindFrameWithID(tag, ID3FID_COMMENT)) != NULL) { int size; field = ID3Frame_GetField(frame, ID3FN_TEXT); size = ID3Field_GetASCII(field, buffer, 255, 1); lstrcpy(out, buffer); out += size; some_info = 1; } break; case '6': if ((frame = ID3Tag_FindFrameWithID(tag, ID3FID_CONTENTTYPE)) != NULL) { int size; char *tmp; field = ID3Frame_GetField(frame, ID3FN_TEXT); size = ID3Field_GetASCII(field, buffer, 255, 1); tmp = GetGenre(buffer); lstrcpy(out, tmp); out += size; some_info = 1; } break; case '7': { char *p=filename+lstrlen(filename); int len = 0; while (*p != '\\' && p >= filename) { p--; len++; } lstrcpy(out, ++p); out += len; some_info = 1; break; } } } *out = '\0'; ID3Tag_Delete(tag); } if (!some_info) { char *p=filename+lstrlen(filename); while (*p != '\\' && p >= filename) p--; lstrcpy(title,++p); }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -