环境
系统:windows 11
Qt :5.14.1
GNU Make:4.2.1
平台: x86_64-w64-mingw32
taglib版本:2.0.1
下载
编译
吐槽:关于编译,参考了很多博主的文章,基本上都是说使用CMake gui进行编译,但经过测试,总是存在问题。最常见的就是缺少库,比如zlib、uftcpp、cppunit等,最气的就是它要求库的版本,有的库最新版不太好找,折腾了半天库都下载好了,写到CMakeLists.txt里面又识别不到!!!
最终放弃了,选择了另一种编译方法,没想到一下就成功了。
1、创建一个空的文件夹,用来存放编译的内容。我这里是D:/Mylibs/taglib
2、打开命令行之后,跳转到下载的taglib目录
例如:
cd /d D:/cache/taglib2.0.1
3、命令行执行
cmake -G "MinGW Makefiles" -DCMAKE_INSTALL_PREFIX="D:/Mylibs/taglib" -DBUILD_SHARED_LIBS=YES -DWITH_ZLIB=ON -DWITH_MP4=ON -DBUILD_TESTING=OFF
解析:
首先我使用qt是用了mingw编译套件,所以这里我选择了"MinGW Makefiles";
使能了动态库,不编译zlib和cppunit,我这里只用来获取mp3标签,所以MP4功能关掉了;
这条命令是在这里看到的
再次执行:
mingw32-make
mingw32-make install
OK,编译完成。
此时目录中应该有3个文件夹
说明:最开始我是将DBUILD_SHARED_LIBS = NO的,然后在使用过程中会有一些未定义,再次编译之前我没有进行clean,所以我的lib里是同时存在以下内容的,至于到底谁生效了,我猜是dll.a 哈哈哈哈哈。
Qt中使用
在pro文件中添加,注意路径
INCLUDEPATH += $$PWD/taglib2.0.1/include
LIBS += -L$$PWD/taglib2.0.1/lib -ltag -ltag_c
.cpp或.h文件中包含头文件:
#include <taglib2.0.1/include/taglib/tag.h>
#include <taglib2.0.1/include/taglib/fileref.h>
简单的使用就可以参考下载源码目录里面的examples文件夹
还是贴一下我的代码段吧,因为要适配中文内容所以与示例稍有不同
QString filename = "赵雷 - 我记得.mp3";
TagLib::FileRef file(filename.toStdWString().c_str());
if (!file.isNull() && file.tag())
{
TagLib::Tag *tag = file.tag();
TagLib::AudioProperties *properties = file.audioProperties();
QString title = QString::fromStdWString(tag->title().toWString());
QString artist = QString::fromStdWString(tag->artist().toWString());
QString album = QString::fromStdWString(tag->album().toWString());
QString year = QString::number(tag->year());
int duration = properties->length();
#ifdef __DEBUG__
qDebug() << "Title:" << title;
qDebug() << "Artist:" << artist;
qDebug() << "Album:" << album;
qDebug() << "Year:" << year;
qDebug() << "Duration:" << length << "seconds";
qDebug() << "-----------------------------------";
#endif
}
运行结果如下: