似乎 QMediaPlayer 不读取播放列表文件的标签,而无需执行当前曲目的 play() 方法。有没有办法强制从 QMediaPlayer 播放列表中读取标签而不播放它?
对不起,如果这是一个菜鸟问题,但我花了很多时间进行搜索。
谢谢
似乎 QMediaPlayer 不读取播放列表文件的标签,而无需执行当前曲目的 play() 方法。有没有办法强制从 QMediaPlayer 播放列表中读取标签而不播放它?
对不起,如果这是一个菜鸟问题,但我花了很多时间进行搜索。
谢谢
不要浪费时间使用 QMediaPlayer 读取标签(这个解决方案效果很好,但对于列表中的许多文件来说很难),只需使用 TagLib 或其他开源库即可。
例如,在 Qt 中使用 TagLib 的 3 个简单步骤:
1.从源代码编译taglib:
$ pwd
/home/user/taglib-1.9.1
$ cmake .
$ make
部署标签库的工作实例就足够了。真的 :)
2.在您的项目中包含头文件和库,只需将此或您的自定义路径添加到项目文件中:
unix:!macx: LIBS += -L$$PWD/3rdparty/taglib-1.9.1/taglib/ -ltag
INCLUDEPATH += $$PWD/3rdparty/taglib-1.9.1/taglib/Headers
DEPENDPATH += $$PWD/3rdparty/taglib-1.9.1/taglib/Headers
3.使用它,非常简单的功能从文件中获取媒体标签,在这个例子中艺术家和曲目标题:
#include <fileref.h>
#include <tag.h>
QString gettags(QString mediafile){
QString string;
TagLib::FileRef file(mediafile.toUtf8());
TagLib::String artist_string = file.tag()->artist();
TagLib::String title_string = file.tag()->title();
QString artist = QString::fromStdWString(artist_string.toWString());
QString title = QString::fromStdWString(title_string.toWString());
string = artist + " - " + title;
return string;
}
对于当前的 QT/OSX,使用这个项目文件片段(更改您系统的路径)
QMAKE_MACOSX_DEPLOYMENT_TARGET = 10.11
LIBS += -L/Users/sir/prg.qt/TuneMerge/taglib-1.11.1/taglib/ -ltag -lz
INCLUDEPATH += /Users/sir/prg.qt/TuneMerge/taglib-1.11.1/
INCLUDEPATH += /Users/sir/prg.qt/TuneMerge/taglib-1.11.1/taglib/
INCLUDEPATH += /Users/sir/prg.qt/TuneMerge/taglib-1.11.1/taglib/toolkit/
DEPENDPATH += /Users/sir/prg.qt/TuneMerge/taglib-1.11.1/taglib