亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? mp3fileinfo.cpp

?? mp3
?? CPP
字號:
/*

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

                        MP3FileInfo 1.0
                    -----------------------

  MP3FileInfo is a wrapper class for id3lib, a library capable
  of reading and writing ID3 Tags of MP3 Files. It has a
  simple interface and provides all data as public members.

  Written by Christian Richardt (cr@whizer.net).

  Release history:
    Mai 31, 2003: Version 1.0. First release.

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

*/

/**
  \file    MP3FileInfo.cpp
  \brief   Reads Header and ID3 Tags of MP3 Files
  \date    2003-05-31
  \author  Christian Richardt (cr@whizer.net)
**/


  #include <MP3FileInfo.h>
  #include <assert.h>
  #include <stdio.h>



/* ----------------------- Init and Free ------------------------ */


    /**
      \brief   Initialize and parse all data

      Always Initalize this class by calling Init(). It returns
      false if an error occured.

      You can call Init() as often as you want. All data is being
      freed before extracting the data of the new file.
    **/
  bool MP3FileInfo::Init(const char* cszFilename)
   {
    Free();
    m_bOK = true;

      // copy filename
    szFilename = new char[strlen(cszFilename)+1];
    sprintf(szFilename, cszFilename);

    m_id3tag = new ID3_Tag;
    m_id3tag->Link(szFilename);

    /* Fileinfo */
    bHasLyrics = m_id3tag->HasLyrics();
    bHasV1Tag  = m_id3tag->HasV1Tag();
    bHasV2Tag  = m_id3tag->HasV2Tag();
    nFileSize  = (int)m_id3tag->GetFileSize();

    /* Headerinfo */
    m_parseHeader();
    if(!m_bOK) { Free(); return m_bOK; }

    /* V1 up */
    szAlbum   = m_getNewString(ID3FID_ALBUM);
    szArtist  = m_getNewString(ID3FID_LEADARTIST);
    szComment = m_getNewString(ID3FID_COMMENT);
    szTitle   = m_getNewString(ID3FID_TITLE);
    szTrack   = m_getNewString(ID3FID_TRACKNUM);
    szYear    = m_getNewString(ID3FID_YEAR);

    /* V2 */
    szComposer        = m_getNewString(ID3FID_COMPOSER);
    szCopyright       = m_getNewString(ID3FID_COPYRIGHT);
    szEncodedBy       = m_getNewString(ID3FID_ENCODEDBY);
    szOriginalArtist  = m_getNewString(ID3FID_ORIGARTIST);
    szURL             = m_getNewString(ID3FID_WWWUSER);

    m_parseGenre();
    if(szYear)  sscanf(szYear,  "%i", &nYear);
    if(szTrack) sscanf(szTrack, "%i", &nTrack);

    return m_bOK;
   }


    /**
      \brief   Free all allocated ressources

      You can call Free() as often as you want.
      No error is raised.
    **/
  void MP3FileInfo::Free(void)
   {
    if(m_bOK) // only free if OK
     {
      m_bOK = false;

      if(m_id3tag!=0)
       {
          // in rare cases (e.g. if file is corrupt)
          // "delete m_id3tag" fails ...
        try { delete m_id3tag; } catch(...) {}
        m_id3tag = 0;
       }

      /* fileinfo */
      delete[] szFilename; szFilename = 0; nFileSize = -1;
      bHasLyrics = false; bHasV1Tag = false; bHasV2Tag = false;

      /* headerinfo */
      m_mp3header = 0;
      nVbrBitRate = 0; nBitRate = 0; nCbrBitRate = 0;
      nSampleRate = 0; nLength  = 0;
      delete[] szBitRate;     szBitRate = 0;
      delete[] szMpegLayer;   szMpegLayer = 0;
      delete[] szMpegVersion; szMpegVersion = 0;
      delete[] szChannelMode; szChannelMode = 0;

      /* ID3V1 Tag elements */
      nTrack = 0; nYear = 0;
      delete[] szArtist;  szArtist  = 0;
      delete[] szTitle;   szTitle   = 0;
      delete[] szAlbum;   szAlbum   = 0;
      delete[] szComment; szComment = 0;
      delete[] szTrack;   szTrack   = 0;
      delete[] szYear;    szYear    = 0;
      delete[] szGenre;   szGenre   = 0;

      /* V2 up */
      delete[] szComposer;        szComposer= 0;
      delete[] szCopyright;       szCopyright= 0;
      delete[] szEncodedBy;       szEncodedBy= 0;
      delete[] szOriginalArtist;  szOriginalArtist= 0;
      delete[] szURL;             szURL= 0;
     }
   }


/* ---------------- public member functions ---------------- */


    /// prints all frames the file contains
  void MP3FileInfo::ShowAllFrames(void)
   {
    assert(m_bOK);

      // all FrameIDs
    ID3_FrameID fids[] = { ID3FID_NOFRAME,          ID3FID_AUDIOCRYPTO,     ID3FID_PICTURE,             ID3FID_AUDIOSEEKPOINT,  ID3FID_COMMENT,
                           ID3FID_COMMERCIAL,       ID3FID_CRYPTOREG,       ID3FID_EQUALIZATION2,       ID3FID_EQUALIZATION,    ID3FID_EVENTTIMING,
                           ID3FID_GENERALOBJECT,    ID3FID_GROUPINGREG,     ID3FID_INVOLVEDPEOPLE,      ID3FID_LINKEDINFO,      ID3FID_CDID,
                           ID3FID_MPEGLOOKUP,       ID3FID_OWNERSHIP,       ID3FID_PRIVATE,             ID3FID_PLAYCOUNTER,     ID3FID_POPULARIMETER,
                           ID3FID_POSITIONSYNC,     ID3FID_BUFFERSIZE,      ID3FID_VOLUMEADJ2,          ID3FID_VOLUMEADJ,       ID3FID_REVERB,
                           ID3FID_SEEKFRAME,        ID3FID_SIGNATURE,       ID3FID_SYNCEDLYRICS,        ID3FID_SYNCEDTEMPO,     ID3FID_ALBUM,
                           ID3FID_BPM,              ID3FID_COMPOSER,        ID3FID_CONTENTTYPE,         ID3FID_COPYRIGHT,       ID3FID_DATE,
                           ID3FID_ENCODINGTIME,     ID3FID_PLAYLISTDELAY,   ID3FID_ORIGRELEASETIME,     ID3FID_RECORDINGTIME,   ID3FID_RELEASETIME,
                           ID3FID_TAGGINGTIME,      ID3FID_INVOLVEDPEOPLE2, ID3FID_ENCODEDBY,           ID3FID_LYRICIST,        ID3FID_FILETYPE,
                           ID3FID_TIME,             ID3FID_CONTENTGROUP,    ID3FID_TITLE,               ID3FID_SUBTITLE,        ID3FID_INITIALKEY,
                           ID3FID_LANGUAGE,         ID3FID_SONGLEN,         ID3FID_MUSICIANCREDITLIST,  ID3FID_MEDIATYPE,       ID3FID_MOOD,
                           ID3FID_ORIGALBUM,        ID3FID_ORIGFILENAME,    ID3FID_ORIGLYRICIST,        ID3FID_ORIGARTIST,      ID3FID_ORIGYEAR,
                           ID3FID_FILEOWNER,        ID3FID_LEADARTIST,      ID3FID_BAND,                ID3FID_CONDUCTOR,       ID3FID_MIXARTIST,
                           ID3FID_PARTINSET,        ID3FID_PRODUCEDNOTICE,  ID3FID_PUBLISHER,           ID3FID_TRACKNUM,        ID3FID_RECORDINGDATES,
                           ID3FID_NETRADIOSTATION,  ID3FID_NETRADIOOWNER,   ID3FID_SIZE,                ID3FID_ALBUMSORTORDER,  ID3FID_PERFORMERSORTORDER,
                           ID3FID_TITLESORTORDER,   ID3FID_ISRC,            ID3FID_ENCODERSETTINGS,     ID3FID_SETSUBTITLE,     ID3FID_USERTEXT,
                           ID3FID_YEAR,             ID3FID_UNIQUEFILEID,    ID3FID_TERMSOFUSE,          ID3FID_UNSYNCEDLYRICS,  ID3FID_WWWCOMMERCIALINFO,
                           ID3FID_WWWCOPYRIGHT,     ID3FID_WWWAUDIOFILE,    ID3FID_WWWARTIST,           ID3FID_WWWAUDIOSOURCE,  ID3FID_WWWRADIOPAGE,
                           ID3FID_WWWPAYMENT,       ID3FID_WWWPUBLISHER,    ID3FID_WWWUSER,             ID3FID_METACRYPTO,      ID3FID_METACOMPRESSION,
                           ID3FID_LASTFRAMEID
                         };

      // a frame usually contains one field of the following fields:
    ID3_FieldID fiids[] = { ID3FN_NOFIELD, ID3FN_TEXTENC, ID3FN_TEXT, ID3FN_URL, ID3FN_DATA, ID3FN_DESCRIPTION, ID3FN_OWNER, ID3FN_EMAIL, ID3FN_RATING, ID3FN_FILENAME, ID3FN_LANGUAGE, ID3FN_PICTURETYPE, ID3FN_IMAGEFORMAT, ID3FN_MIMETYPE, ID3FN_COUNTER, ID3FN_ID, ID3FN_VOLUMEADJ, ID3FN_NUMBITS, ID3FN_VOLCHGRIGHT, ID3FN_VOLCHGLEFT, ID3FN_PEAKVOLRIGHT, ID3FN_PEAKVOLLEFT, ID3FN_TIMESTAMPFORMAT, ID3FN_CONTENTTYPE, ID3FN_LASTFIELDID};
    char*       idesc[] = { "No field.", "Text encoding (unicode or ASCII).", "Text field.", "A URL.", "Data field.", "Description field.", "Owner field.", "Email field.", "Rating field.", "Filename field.", "Language field.", "Picture type field.", "Image format field.", "Mimetype field.", "Counter field.", "Identifier/Symbol field.", "Volume adjustment field.", "Number of bits field.", "Volume chage on the right channel.", "Volume chage on the left channel.", "Peak volume on the right channel.", "Peak volume on the left channel.", "SYLT Timestamp Format.", "SYLT content type.", "Last field placeholder."};


    int i=0;
    char* buf = 0;
    ID3_Frame* frame = 0;
    ID3_Field* field = 0;
    while(i<96)
     {
      if(i==2 || i==10) // picture and encapsulated object often fail
       {
        printf("%2i. Skipping\n", i);
        i++; continue;
       }

      try { frame = m_id3tag->Find(fids[i]); }
      catch(...)
       {
        printf("ERROR: SKIPPING FILE (i=%i)\n", i);
        Free();
        return;
       }

      if(frame==0) { i++; continue; } // Frame not found
      printf("%2i. %-35s : ", i, frame->GetDescription());

      buf = m_getNewString(fids[i]);
      if(buf)
       {
        printf("\"%s\"\n", buf);
        delete[] buf;
        frame = 0;
        i++; continue;
       }

      printf("No Text found, but:\n", buf);

      for(int k=1; k<24; k++)
       {
        try
         {
          if(frame->Contains(fiids[k]))
           { printf("%-43s- %s\n", "", idesc[k]); }
         }
        catch(...)
         {
          printf("%-42sERROR: SKIPPING FILE (i=%i; k=%i)\n", "", i, k);
          Free();
          return;
         }
       }
      printf("\n");
      frame = 0;
      i++; continue;
     }
    printf("\n");
   }



/* ---------------- protected member functions ---------------- */

    /**
      \brief   parses the genre of the file

      In ID3V1 Tags, the genre is a simple byte and needs to be
      converted to a string first, but ID3V2 allows arbitrary
      genre descriptions.
    **/
  void MP3FileInfo::m_parseGenre(void)
   {
    if(bHasV2Tag) // Use V2 if present
     {
      szGenre = m_getNewString(ID3FID_CONTENTTYPE);
      return;
     }

    char buf[10];
    if(!m_getString(ID3FID_CONTENTTYPE, buf))
     {
      szGenre = 0;
      return;
     }

    int gid;
    sscanf(buf, "(%i)", &gid); // filter Genre ID

    if(gid >= ID3_NR_OF_V1_GENRES) // genre ID too large
     {
      szGenre = new char[strlen(buf)+1];
      sprintf(szGenre, buf);
      return;
     }

    szGenre = new char[strlen(ID3_V1GENRE2DESCRIPTION(gid))+1];
    sprintf(szGenre, ID3_V1GENRE2DESCRIPTION(gid));
   }

    /// parses header infomation
  void MP3FileInfo::m_parseHeader(void)
   {
    assert(m_bOK);

    m_mp3header = m_id3tag->GetMp3HeaderInfo();
    if(!m_mp3header)
     {
      //printf("\n[Error]:\nGetMp3HeaderInfo() failed!\n(file: %s)\n\n", szFilename);
      Free();
      return;
     }

    nCbrBitRate = m_mp3header->bitrate;
    nVbrBitRate = m_mp3header->vbr_bitrate;
    nSampleRate = m_mp3header->frequency;
    nLength     = m_mp3header->time;

    szBitRate = new char[20];
    if(nVbrBitRate>0)
     {
      sprintf(szBitRate, "%i kbit/s (VBR)", nVbrBitRate/1000);
      nBitRate = nVbrBitRate;
     }
    else
     {
      sprintf(szBitRate, "%i kbit/s", nCbrBitRate/1000);
      nBitRate = nCbrBitRate;
     }


      // MPEG Layer
    szMpegLayer = new char[10];
    switch(m_mp3header->layer)
     {
      case MPEGLAYER_UNDEFINED: sprintf(szMpegLayer, "UNDEFINED"); break;
      case MPEGLAYER_III:       sprintf(szMpegLayer, "Layer III"); break;
      case MPEGLAYER_II:        sprintf(szMpegLayer, "Layer II");  break;
      case MPEGLAYER_I:         sprintf(szMpegLayer, "Layer I");   break;
      default:                  szMpegLayer = 0;
     }

      // MPEG Version
    szMpegVersion = new char[10];
    switch(m_mp3header->version)
     {
      case MPEGVERSION_2_5: sprintf(szMpegVersion, "MPEG 2.5"); break;
      case MPEGVERSION_2:   sprintf(szMpegVersion, "MPEG 2");   break;
      case MPEGVERSION_1:   sprintf(szMpegVersion, "MPEG 1");   break;
      default:              szMpegVersion = 0;
     }

      // Channel Mode
    szChannelMode = new char[15];
    switch(m_mp3header->channelmode)
     {
      case MP3CHANNELMODE_STEREO:         sprintf(szChannelMode, "Stereo");         break;
      case MP3CHANNELMODE_JOINT_STEREO:   sprintf(szChannelMode, "Joint Stereo");   break;
      case MP3CHANNELMODE_DUAL_CHANNEL:   sprintf(szChannelMode, "Dual Channel");   break;
      case MP3CHANNELMODE_SINGLE_CHANNEL: sprintf(szChannelMode, "Single Channel"); break;
      default:                            szChannelMode = 0;
     }
   }


    /// extracts a string
  bool MP3FileInfo::m_getString(ID3_FrameID fid, char* szBuffer)
   {
    assert(m_bOK);

    ID3_Frame* frame = m_id3tag->Find(fid); // frame
    if(frame==0)
     {
      sprintf(szBuffer, "[Not Found]");
      return false;
     }

    if(!frame->Contains(ID3FN_TEXTENC))
     {
      sprintf(szBuffer, "[Contains No Text]");
      return false;
     }

    ID3_Field* field = 0;
    if(frame->Contains(ID3FN_TEXT))
     { field = frame->GetField(ID3FN_TEXT); }

      // String is an URL
    if(frame->Contains(ID3FN_URL) && (field==0))
     { field = frame->GetField(ID3FN_URL); }

    if(field==0)
     {
      delete frame;
      sprintf(szBuffer, "[Error]");
      return false;
     }

    field->SetEncoding(ID3TE_ISO8859_1);
    const char* res = field->GetRawText(); // GetRawUnicodeText
    if(res==0)
     {
      delete frame;
      sprintf(szBuffer, "[Empty]");
      return false;
     }

    sprintf(szBuffer, res);
    return true;
   }


    /// extracts a string
  char* MP3FileInfo::m_getNewString(ID3_FrameID fid)
   {
    assert(m_bOK);

    ID3_Frame* frame = m_id3tag->Find(fid); // find frame
    if(frame==0) { return 0; }

    if(!frame->Contains(ID3FN_TEXTENC))
     { delete frame; return 0; } // frame contains no text

      // look for field type
    ID3_Field* field = 0;
    if(frame->Contains(ID3FN_TEXT)) // Text field
     { field = frame->GetField(ID3FN_TEXT); }

    if(frame->Contains(ID3FN_URL) && (field==0)) // URL field
     { field = frame->GetField(ID3FN_URL); }

    if(field==0) { delete frame; return 0; } // no field found

    field->SetEncoding(ID3TE_ISO8859_1); // use Latin-1 charset

    const char* res = field->GetRawText(); // TODO: GetRawUnicodeText
    char* buf = new char[strlen(res)+1]; // new string
    sprintf(buf, res); // copy

    return buf;
   }

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
一区二区三区欧美在线观看| 欧美丰满一区二区免费视频| 在线观看成人小视频| 91麻豆精品国产综合久久久久久 | 亚洲免费在线视频| 天堂久久一区二区三区| 国内精品久久久久影院薰衣草| 成人深夜福利app| 欧美精品日韩一区| 国产精品丝袜黑色高跟| 亚洲一区在线电影| 国产精品亚洲专一区二区三区| 日本韩国一区二区三区| 日韩欧美一级二级三级久久久| 国产精品剧情在线亚洲| 强制捆绑调教一区二区| av在线一区二区三区| 日韩三级免费观看| 1000精品久久久久久久久| 青椒成人免费视频| 色婷婷精品大在线视频| 久久蜜桃av一区二区天堂| 亚洲超碰精品一区二区| 大桥未久av一区二区三区中文| 91精品婷婷国产综合久久性色| 国产精品国产三级国产| 九九视频精品免费| 欧美亚洲免费在线一区| 国产精品久久久久久久久久久免费看 | 美女一区二区视频| 91香蕉国产在线观看软件| 精品国产免费一区二区三区四区| 亚洲精品成人a在线观看| 国产精品一区二区黑丝| 欧美精品久久一区| 亚洲乱码国产乱码精品精小说 | 国产精品视频观看| 日本午夜一本久久久综合| 91麻豆国产在线观看| 国产午夜精品在线观看| 日韩av不卡一区二区| 欧美综合天天夜夜久久| 国产精品电影一区二区| 国产精品456露脸| 日韩精品中文字幕一区二区三区 | 欧美精品高清视频| 亚洲色欲色欲www| 国产99久久久精品| 久久综合久久综合久久| 六月婷婷色综合| 欧美日韩久久久一区| 一级做a爱片久久| 91麻豆精品视频| 亚洲欧洲日产国码二区| 国产成人精品一区二区三区四区 | 国产成人在线网站| 91精品国产色综合久久不卡蜜臀| 亚洲成人动漫精品| 欧美日韩一区二区三区四区 | 91精品国产综合久久精品app | 欧美另类z0zxhd电影| 亚洲最大成人综合| 国产99一区视频免费| 久久新电视剧免费观看| 国产综合久久久久久久久久久久| 日韩一区二区视频在线观看| 奇米一区二区三区av| 欧美年轻男男videosbes| 天天av天天翘天天综合网色鬼国产 | 国产偷国产偷亚洲高清人白洁| 精品一二三四在线| 精品国产区一区| 极品美女销魂一区二区三区| 精品剧情v国产在线观看在线| 久久精品99国产精品| 久久尤物电影视频在线观看| 国产米奇在线777精品观看| 精品久久久影院| 国产激情视频一区二区三区欧美| 久久精品日产第一区二区三区高清版 | 色诱视频网站一区| 国产精品卡一卡二| 97超碰欧美中文字幕| 伊人性伊人情综合网| 欧美日韩在线精品一区二区三区激情| 亚洲成av人片一区二区| 欧美一区二区三区男人的天堂| 男女男精品视频网| 久久久久亚洲综合| av一区二区不卡| 亚洲一级二级在线| 日韩三级电影网址| 国产激情视频一区二区在线观看| 国产精品久久久久久久久动漫| 一本色道a无线码一区v| 午夜精品一区在线观看| 欧美mv日韩mv国产网站app| 国产福利不卡视频| 一区二区三区小说| 4438x亚洲最大成人网| 国产麻豆精品95视频| 最新久久zyz资源站| 欧美日韩久久久久久| 国内精品写真在线观看| 自拍偷在线精品自拍偷无码专区| 欧美性色黄大片手机版| 久久99热这里只有精品| 中文字幕一区二区三区不卡| 色8久久精品久久久久久蜜| 日韩福利视频导航| 亚洲国产精品99久久久久久久久| 欧洲亚洲精品在线| 国内精品第一页| 一区二区三区免费网站| 日韩欧美国产三级电影视频| av电影在线观看一区| 午夜在线成人av| 国产亚洲成aⅴ人片在线观看 | 亚洲第一综合色| 精品国产伦一区二区三区观看方式| 不卡的av电影| 久久精品99国产国产精| 亚洲激情自拍视频| 26uuu亚洲| 精品视频色一区| 国产成人av电影在线观看| 亚洲国产人成综合网站| 国产午夜一区二区三区| 欧美日韩国产电影| 成人福利在线看| 秋霞电影网一区二区| 中文字幕人成不卡一区| 91精品国产一区二区人妖| jlzzjlzz国产精品久久| 精品一区二区三区久久久| 一个色在线综合| 国产精品视频观看| 精品理论电影在线| 欧美日韩免费一区二区三区视频| 国产成人在线视频免费播放| 日本视频免费一区| 夜色激情一区二区| 国产精品美女一区二区| 日韩精品在线一区二区| 欧美日精品一区视频| 99热这里都是精品| 国产福利91精品一区| 日本视频免费一区| 亚洲国产精品一区二区www| 亚洲欧洲日韩av| 国产女人18毛片水真多成人如厕| 日韩免费观看2025年上映的电影| 91久久久免费一区二区| 99久久伊人网影院| 国产成人免费av在线| 玖玖九九国产精品| 日韩一区精品字幕| 一区二区三区免费网站| 亚洲素人一区二区| 国产精品国产三级国产三级人妇| 久久久久久久电影| 26uuu精品一区二区三区四区在线| 正在播放一区二区| 欧美精品一二三区| 欧美日韩国产一级二级| 在线影院国内精品| 一本久道中文字幕精品亚洲嫩| 成人99免费视频| 粉嫩在线一区二区三区视频| 国产一区二区看久久| 国产在线播放一区三区四| 日本美女一区二区三区视频| 日韩激情一区二区| 五月天亚洲精品| 午夜久久电影网| 亚洲成人午夜影院| 婷婷成人综合网| 日韩成人午夜电影| 日韩黄色免费网站| 日韩av不卡一区二区| 免费观看一级特黄欧美大片| 日韩av电影一区| 麻豆国产欧美日韩综合精品二区| 美女一区二区三区| 国产在线播放一区三区四| 国产精品18久久久久久久网站| 国产成人av电影在线观看| 国产aⅴ综合色| kk眼镜猥琐国模调教系列一区二区| eeuss鲁一区二区三区| 99久久久精品| 色哦色哦哦色天天综合| 欧美日韩在线播放三区四区| 3d动漫精品啪啪| 日韩精品在线看片z| 欧美激情一区二区三区四区| 国产精品久久久久aaaa| 一区二区三区四区在线播放| 视频一区二区三区在线| 狠狠色丁香婷婷综合久久片|