查找歌曲的长度

  • 本文关键字:查找 c++ qt id3lib
  • 更新时间 :
  • 英文 :


我想在几秒钟内找到歌曲的长度,以便我可以制作 M3U 格式的播放列表,但我不知道如何从文件中获取该信息。我正在使用id3lib和Qt。

我试过:

ID3_Frame* myFrame = myTag.Find(ID3FID_SONGLEN);
ID3_Frame* myFrame = myTag.Find(ID3FID_TIME);
ID3_Frame* myFrame = myTag.Find(ID3FID_SIZE);

但 myFrame 是 NULL。我尝试了其他参数并工作,例如ID3FID_ALBUM.我真的不知道该尝试什么。我在id3lib API中没有找到任何东西。

我知道Qt可以给我这些信息,但我不能使用id3lib吗?

后来编辑:我读到MediaObject::totalTime()只有在播放歌曲时才给我时间,但我想要这些信息,关于歌曲是否播放;我需要此信息才能将其写入文件中。

后期编辑:

我正在尝试使用Qt的Phonon作为长度,但是我收到了很多错误。

#include <Phonon/MediaSource>
#include <Phonon/MediaObject>
#include <iostream>
#include <Qstring>
/* stuff */
Phonon::MediaObject *mediaObject = new Phonon::MediaObject();
QString fileName("D:/melodie.mp3");
mediaObject->setCurrentSource(fileName);
cout << mediaObject->totalTime() << endl;

我得到很多未解析的外部符号

main.obj:-1: error: LNK2019: 未解析的外部符号 "__declspec(dllimport( public: __thiscall Phonon::MediaObject::MediaObject(class QObject *(" (_imp??0MediaObject@Phonon@@QAE@PAVQObject@@@Z( 在函数_main中引用

我正在使用QCreator,我的应用程序很简单,只是一个说你好(如果我不使用Phonon,它可以工作(;我只是无法让它运行;我已经分配了静态mediaObject,我做了一个MediaSource并试图传递它,但它不起作用(这里它说不能从MediaSource*到MediaSource&(。可能是什么问题?

您可以使用

Phonon::MediaObject::totalTime()来获取歌曲的长度(以毫秒为单位(。

id3lib 不提供直接查找歌曲长度的功能,因为曲目长度不是 ID3v1 或 ID3v2"标准"的一部分。它们仅用于标记。如果您在尝试问题中的代码时得到 0,则可能意味着尚未设置这些标签。如文档中所述,"...如果找不到这样的帧,Find(( 方法将返回一个 NULL 指针。

正确设置媒体源后使用 MediaObject::totalTime

我建议你使用totalTimeChanged(qint64 newTotalTime)信号。捕获轨道长度是更小心的方法,因为您不需要手动检查mediaObject的状态。

相关内容

  • 没有找到相关文章

最新更新