C++ 寻找歌曲的长度

C++ 寻找歌曲的长度,c++,qt,id3lib,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); 但是我的框架是空的。我尝试了其他参数并进行了操作,比如ID3FID

我想以秒为单位找到一首歌的长度,这样我就可以制作一个M3U格式的播放列表,但我不知道如何从文件中获取这些信息。我正在使用id3lib和Qt

我试过:

ID3_Frame* myFrame = myTag.Find(ID3FID_SONGLEN);
ID3_Frame* myFrame = myTag.Find(ID3FID_TIME);
ID3_Frame* myFrame = myTag.Find(ID3FID_SIZE);
但是我的框架是空的。我尝试了其他参数并进行了操作,比如
ID3FID\u相册
。我真的不知道该试什么。我在id3lib API中没有找到任何内容

我知道Qt可以给我这些信息,但我不能使用id3lib吗

后期编辑:我读到
MediaObject::totalTime()
仅在播放歌曲时提供时间,但我需要有关歌曲播放与否的信息;我需要这些信息才能将其写入文件

稍后编辑:

我试图使用Qt的声子来计算长度,但我收到了很多错误

#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;
#包括
#包括
#包括
#包括
/*东西*/
Phonon::MediaObject*MediaObject=新的Phonon::MediaObject();
QString文件名(“D:/melodie.mp3”);
mediaObject->setCurrentSource(文件名);
cout totalTime()您可以使用以毫秒为单位获取歌曲的长度


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

正确设置媒体源后使用
totalTimeChanged(qint64 newTotalTime)
信号。这是一种更仔细的捕获曲目长度的方法,因为您不需要手动检查
mediaObject
的状态