【问题标题】:Getting mp3 cover art via TagLib using Qt使用 Qt 通过 TagLib 获取 mp3 封面艺术
【发布时间】:2015-03-23 16:34:04
【问题描述】:

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

我正在使用 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

【问题讨论】:

    标签: c++ qt taglib


    【解决方案1】:

    不确定你在哪里找到id3v3frame.h(最新版本附带id3v2frame.h),但TagLib::ID3v2::FrameList 声明在id3v2tag.h 中。

    【讨论】:

    • 只是印刷错误,fxd。当然是指 id3v2。 id3v2tag.h 也包含在我的项目中。
    • 是否包含在mainwindow.cppmainwindow.h 中?
    • mainwindow.cpp。但是,将它包含在头文件中并没有帮助,因为头文件本身不包含任何 TagLib 部分。
    • Errors 第 553 行是带有 frameList 声明的行
    • 你的 taglib 头文件有问题。你用什么taglib版本?
    【解决方案2】:

    您可以通过ffmpeg 探索解决方案。

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

    【讨论】:

      猜你喜欢
      • 2014-06-18
      • 2017-06-04
      • 2010-09-25
      • 2011-09-26
      • 1970-01-01
      • 2013-07-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多