1. 程式人生 > >Qt Creator 呼叫第三方庫libZPlay 解析音訊檔案 標題、專輯、檔名、藝術家

Qt Creator 呼叫第三方庫libZPlay 解析音訊檔案 標題、專輯、檔名、藝術家

libZPlay

libZPlay庫集成了所有支援格式(mp3, mp2, mp1, ogg, flac, ac3, aac, oga, wav and pcm )的編碼解碼器。

一、官網下載sdk

http://libzplay.sourceforge.net/

二、pro檔案修改:





unix:!macx|win32: LIBS += -L$$PWD/libs/libzplay/ -llibzplay

INCLUDEPATH += $$PWD/libs/libzplay
DEPENDPATH += $$PWD/libs/libzplay

win32:!win32-g++: PRE_TARGETDEPS += $$PWD/libs/libzplay/libzplay.lib
else:unix:!macx|win32-g++: PRE_TARGETDEPS += $$PWD/libs/libzplay/libzplay.a

三、libzplay.dll放到程式執行目錄


四、程式碼編寫

//獲取指定目錄下所有歌曲資訊
void LocalMusicModel::parseMusicInfo(QString path)
{
    QList<songInfo> songRecords;
    QStringList dirList=path.split(",");
    QString temp;
    foreach (temp, dirList) {
        temp=temp.right(temp.length()-8);
        QDir dir(temp);
        dir.setNameFilters(QStringList() << "*.mp3" << "*.flac" << "*.wav");
        QFileInfoList fileList=dir.entryInfoList();
        QFileInfo fileInfo;

        foreach (fileInfo, fileList) {
            TID3InfoEx id3_info;
            //如果直接使用LoadFileID3Ex函式,會得不到時長資訊
            if(player->OpenFile((const char*) fileInfo.absoluteFilePath().toLocal8Bit(),sfAutodetect))
                if(player->LoadID3Ex(&id3_info,1))
                {
                    songInfo tempSongInfo;
                    tempSongInfo.title = QString::fromLocal8Bit(id3_info.Title);    //音樂標題
                    tempSongInfo.Artist = QString::fromLocal8Bit(id3_info.Artist);  //歌手
                    tempSongInfo.path = fileInfo.absoluteFilePath();                //路徑
                    tempSongInfo.album = QString::fromLocal8Bit(id3_info.Album);    //專輯
                    // get stream info,獲取時長資訊
                    TStreamInfo pInfo;
                    player->GetStreamInfo(&pInfo);
                    tempSongInfo.duration =pInfo.Length.sec;
                    songRecords.append(tempSongInfo);
                }
                else
                {
                    qDebug() << QString("No ID3 data:%1\r\n\r\n").arg(QString::fromLocal8Bit(player->GetError()));
                }
            else
            {
                qDebug() << "LoadID3Ex faild";
            }
        }
    }
}

五、獲取歌曲資訊


六、音訊播放

    if(zplayer->OpenFile("f:\\music\\Justin Bieber-Love Yourself.mp3", sfAutodetect) == 0)
       {
          return;
       }
    zplayer->Play();