c++ - 查找歌曲的长度

标签 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: 错误: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/

相关文章:

python - Pyside 或 PyQt 支持 Qt 5.0 和 Qt Quick 2

c++ - QtToolBar 在按钮文本中带有带下划线的快捷键

python - pyqt QTreeWidget 项目下降信号

php - 使用php读取远程mp3文件信息

c++ - 在 Xcode 中静态链接 id3lib 的问题

c++ - 如何使用 3d 渲染缩放 2d 世界?

c++ - C++ 可以做类似 ML case 表达式的事情吗?

c++ - 在 C++ 应用程序中使用 DLL

c++ - 如何使用带线程的 Google 测试

c++ - 当静态或动态初始化时