如何使用Qt 5.1获取歌曲的长度?

3

如何在Qt 5.1 API中获取歌曲长度?我认为可以使用Length元数据来读取,但我不确定是否所有音频文件都有该元数据。


请看这个链接是否有帮助:https://dev59.com/VmvXa4cB1Zd3GeqPH09o - Digital_Reality
请参考以下链接:http://qt-project.org/doc/qt-5.0/qtmultimedia/qmediaplayer.html#duration-prop - leemes
@Digital_Reality:这并不提供Qt的方式来实现它(phonon或taglib不是Qt的一部分)。此外,链接似乎已经失效了。我认为有人需要修复它。 - László Papp
@LaszloPapp 我想两种方法都提到了,但似乎链接坏了。没关系。 - Digital_Reality
@LaszloPapp:一回到家我就得试试QAudioBuffer的duration属性。我不想使用QMediaPlayer的duration,因为它可能会改变。我需要列出歌曲名称以及它们的长度,所以QMediaPlayer的duration似乎不是一个合适的方法。 - Donotalo
2个回答

4
你似乎在寻找“duration(持续时间)”属性。
这是QML的解决方案: duration : int 该属性以毫秒为单位保存媒体的持续时间。
如果媒体没有固定的持续时间(例如实时流),则将为0。
这是C++的解决方案: qint64 QAudioBuffer::duration() const 返回此缓冲区中音频的持续时间(以微秒为单位)。
这取决于/format()和frameCount()。

给定歌曲文件的完整路径,我该如何获取它的时长? - Donotalo
@Donotalo:你试过QAudioBuffer audioBuffer(myFile.readAll()...);吗? - László Papp
请问您能提供一个可用的代码吗?QAudioBuffer构造函数似乎需要QAudioFormat。 - Donotalo
@Donotalo:请尝试访问http://qt-project.org/doc/qt-5/qaudiodeviceinfo.html#preferredFormat。 - László Papp
使用 QAudioBuffer::duration() 获取歌曲长度似乎太重了。首先,我需要检测音频的格式。对于一个随机文件,我不知道如何使用 Qt 检测音频格式。我相信你的解决方案将适用于录制音频 - 在这种情况下,我将知道格式和相关设置。 - Donotalo

0
另一种实现方法是使用 QMediaPlayer。一个例子如下:
QMediaPlayer *player = new QMediaPlayer;
player->setMedia(QUrl::fromLocalFile("C:/Users/Music/mySong.mp4"));
qDebug()<<"Song duration: "<<player->duration();

希望这可以帮助到您。


这还不够好。根据Qt文档中关于QMediaPlayer::setMedia的说明:注意:此函数在记录媒体的指定源后立即返回。它不等待媒体完成加载,也不检查错误。请监听mediaStatusChanged()和error()信号,在媒体加载完成和加载期间发生错误时得到通知。因此,您需要设置一个事件循环并等待。 - Danol

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接