2

我想以秒为单位查找歌曲的长度,以便制作 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: 错误: LNK2019: 无法解析的外部符号“__declspec(dllimport) public: __thiscall Phonon::MediaObject::MediaObject(class QObject *)” (_ imp ??0MediaObject@Phonon@@QAE@PAVQObject@@ @Z) 在函数 _main 中引用

我正在使用 QCreator,我的应用程序很简单,只是一个打招呼的窗口(如果我不使用 Phonon,它可以工作);我就是不能让它运行;我已经分配了静态媒体对象,我已经制作了一个 MediaSource 并尝试传递它,但它不起作用(这里它说不能从 MediaSource* 转换为 MediaSource &)。可能是什么问题呢?

4

3 回答 3

1

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

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

于 2012-05-09T22:42:22.830 回答
1

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

于 2012-05-09T22:43:13.613 回答
0

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

于 2012-08-26T18:45:51.447 回答