gpt4 book ai didi

c++ - 求一首歌的长度

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:55:26 24 4
gpt4 key购买 nike

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

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

最佳答案

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

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

关于c++ - 求一首歌的长度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10525119/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com