我想在几秒钟内找到一首歌的长度,以便我可以制作一个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()
只给我时间,但是我想要那些信息,关于是否播放了歌曲;我需要这些信息才能将其写入文件中。
LATER EDIT:
我正在尝试使用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:错误:LNK2019:未解析的外部符号“__declspec(dllimport)public:__ thiscall Phonon :: MediaObject :: MediaObject(class QObject *)”(_ imp ?? 0MediaObject @ Phonon @@ QAE @ PAVQObject @@@ Z)在函数_main中引用
我正在使用QCreator,我的应用程序很简单,只是一个打招呼的窗口(如果我不使用Phonon,它会起作用);我只是无法让它运行;我已经分配了静态mediaObject,我已经制作了一个MediaSource并尝试传递它,但它不起作用(这里说它不能从MediaSource *转换到MediaSource&amp;)。可能是什么问题?
答案 0 :(得分:1)
您可以使用Phonon::MediaObject::totalTime()
以毫秒为单位获取歌曲的长度。
id3lib不提供直接查找歌曲长度的功能,因为曲目长度不是ID3v1或ID3v2“标准”的一部分。它们仅用于标记。如果在尝试问题中的代码时得到0,则可能意味着尚未设置这些标记。如docs中所述,“如果找不到这样的帧,则Find()方法将返回NULL指针。”
答案 1 :(得分:1)
正确设置媒体源后使用MediaObject::totalTime
答案 2 :(得分:0)
我建议您使用totalTimeChanged(qint64 newTotalTime)
信号。捕获轨道长度的方法比较谨慎,因为您无需手动检查mediaObject
的状态。