我想在几秒钟内找到歌曲的长度,以便我可以制作 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
的状态。