使用 Qt 通过 TagLib 获取 mp3 封面艺术

Getting mp3 cover art via TagLib using Qt

我正在为我在大学的课程项目制作一个音频播放器。我是一年级学生,所以我不是专业的程序员。

我正在使用 Qt 5.4 和 QtCreator 3.3.1。我已经包含 bass.dll 和 TagLib 库来处理音频文件。我想做的是获取歌曲的封面艺术并将其传递给播放器 GUI 上的 QLabel(或任何其他小部件,如果更方便的话)。 我还没有真正弄清楚该怎么做。我一直在寻找例子,但我总是以错误或错误的例子告终。下面是我尝试使用的最后一个代码。

TagLib::MPEG::File file(reinterpret_cast<const wchar_t*>(curSong->path.constData()));
TagLib::ID3v2::Tag *m_tag = file.ID3v2Tag(true);
TagLib::ID3v2::FrameList frameList = m_tag->frameList("APIC");
   if(frameList.isEmpty()) {
       return QImage();
   }

   TagLib::ID3v2::AttachedPictureFrame *coverImg = static_cast<TagLib::ID3v2::AttachedPictureFrame *>(frameList.front());

   QImage coverQImg;
   coverQImg.loadFromData((const uchar *) coverImg->picture().data(), coverImg->picture().size());

   return coverQImg;

这个对我不起作用,因为它会导致错误,例如

C:\Qt\Projects\audioPlayer\mainwindow.cpp:553: error: undefined reference to `TagLib::List<TagLib::ID3v2::Frame*>::List(TagLib::List<TagLib::ID3v2::Frame*> const&)'

我想我搞砸了图书馆,但我确定我已经包括了 id3v2frame.h 和 id3v2tag.h

您可以探索 ffmpeg 的解决方案。

ffmpeg -i input.mp3 -an -vcodec copy cover.jpg

不确定您甚至在哪里找到 id3v3frame.h(最新版本随 id3v2frame.h 一起提供)但是 TagLib::ID3v2::FrameListid3v2tag.h 中声明。