【问题标题】:How to get the total time of an audio file?如何获取音频文件的总时间?
【发布时间】:2014-08-25 15:51:08
【问题描述】:

如何获取音频文件的总时间?我正在尝试这个:

QMediaPlayer* audioPlayer = new QMediaPlayer();
audioPlayer->setMedia(QUrl::fromLocalFile("F:/Audio/mysong.mp3"));
audioPlayer->duration(); // return 0

但函数总是返回 0。我在 Windows 8 上使用最新版本的 Qt。

【问题讨论】:

  • 之前好像有人问过:stackoverflow.com/questions/20828151/…
  • 好的,但是如何获取QMediaPlayer的QAudioBuffer呢?
  • 顺便问一下,您是否尝试连接到durationChanged
  • 好的,谢谢,我会在我的项目中搜索错误。
  • 即使你尝试玩也得零吗?还有,errorString() 方法返回什么?

标签: c++ qt qt5 qmediaplayer qtmultimedia


【解决方案1】:

是的,我发现错误,是类型转换(qint64) 为了获得持续时间,您需要使用“durationChanged”信号。

//get duration in durationChanged signal.
connect(audioPlayer, SIGNAL(positionChanged(qint64)), this, SLOT(setPositionSlider(qint64)));
//Old function
void Widget::setPositionSlider(qint64 i)
{
    ui->PositionSlider->setValue(i / duration * 100); //0 I thought it was converted into double.
}
//New function
void Widget::setPositionSlider(qint64 i)
{
    ui->PositionSlider->setValue(i / 1000);
}

【讨论】:

  • 其实这和类型转换无关。 QMediaPlayer 异步工作。这意味着当您调用 ->duration() 时,该文件尚未加载且尚未开始播放。在执行的那个时候,QMediaPlayer 根本不知道持续时间。不幸的是,除了派生之外,没有简单的方法可以使文件的加载阻塞。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-10-27
  • 2013-03-01
  • 2014-02-08
  • 2010-11-17
  • 2020-06-02
  • 1970-01-01
  • 2011-07-10
相关资源
最近更新 更多