使用Qt通过TagLib获取mp3封面

时间:2015-03-23 16:34:04

标签: c++ qt taglib

我在大学里为我的课程项目制作了一个音乐人。我是一名一年级学生,所以我不是专业程序员。

我使用的是Qt 5.4和QtCreator 3.3.1。我已经包含了bass.dll和TagLib库来处理audiofiles。我想做的是获得这首歌的封面艺术,并将其传递给我的播放器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和id​​3v2tag.h

2 个答案:

答案 0 :(得分:1)

不确定您找到id3v3frame.h的位置(最新版本附带id3v2frame.h),但TagLib::ID3v2::FrameList中已声明id3v2tag.h

答案 1 :(得分:0)

您可以使用ffmpeg探索解决方案。

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