Как получить общее время аудиофайла?

Как получить общее время аудиофайла? Я пытаюсь это:

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

но все время функция возвращает 0. Использую последнюю версию Qt на Windows 8.


person user3430722    schedule 04.07.2014    source источник
comment
Похоже, об этом уже спрашивали: stackoverflow.com/questions/20828151/   -  person lpapp    schedule 04.07.2014
comment
хорошо, но как я могу получить QAudioBuffer из QMediaPlayer?   -  person user3430722    schedule 04.07.2014
comment
Кстати, вы пытались подключиться к durationChanged?   -  person lpapp    schedule 04.07.2014
comment
Хорошо, спасибо, я поищу ошибку в своем проекте.   -  person user3430722    schedule 04.07.2014
comment
Вы также получаете ноль, даже если попытаетесь сыграть в нее? Кроме того, что возвращает метод errorString()?   -  person lpapp    schedule 04.07.2014


Ответы (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);
}
person user3430722    schedule 04.07.2014
comment
На самом деле, это не имеет ничего общего с преобразованием типов. QMediaPlayer работает асинхронно. Это означает, что к тому времени, когда вы вызываете -›duration(), файл еще не был загружен и еще не начал воспроизводиться. В этот момент выполнения QMediaPlayer просто еще не знает продолжительность. К сожалению, кроме извлечения, нет простого способа сделать загрузку файла блокирующей. - person TheSHEEEP; 29.11.2016