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();