我想以秒为单位找到一首歌曲的长度,以便我可以制作一个 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 &)。可能是什么问题?
最佳答案
您可以使用Phonon::MediaObject::totalTime()
获取歌曲的长度(以毫秒为单位)。
id3lib 不提供直接查找歌曲长度的函数,因为轨道长度不是 ID3v1 或 ID3v2“标准”的一部分。它们仅用于标记。如果您在尝试问题中的代码时得到 0,则可能意味着这些标签尚未设置。如 docs 中所述,“...如果找不到这样的帧,Find() 方法将返回 NULL 指针。”
关于c++ - 查找歌曲的长度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10525119/