QT获取音频总时长的方法(使用pcm、mp3等)

1,获取pcm银屏总时长的方法:
输入音频所在路径,通过音频文件大小和采样率的数据计算pcm音频文件的总时长:
qint64 getAudioTime(const QString &filePath)
{
    QFile file(filePath);
    if (file.open(QIODevice::ReadOnly)) {
        qint64 fileSize = file.size();
        qint64 time = fileSize / (16000.0 * 2.0);
        file.close();
        return time;
    }
    return -1;
}

2,通过QMediaPlayer播放并获取MP3等格式的音频:
连接相关信号:
        m_pMediaPlayer = new QMediaPlayer;
        connect(m_pMediaPlayer, SIGNAL(metaDataAvailableChanged(bool)), this, SLOT(OnMetaDataAvailableChanged(bool)));
        connect(m_pMediaPlayer, SIGNAL(durationChanged(qint64)), this, SLOT(onDurationChanged(qint64)));
        connect(m_pMediaPlayer, SIGNAL(stateChanged(QMediaPlayer::State)), this, SLOT(onOriginalStateChanged(QMediaPlayer::State)));
    a,收到durationChanged信号,通过m_pMediaPlayer->duration();即可获得长度,该方法有事拿到的长度不对,应该和音频的压缩方式有关
    b,处理metaDataAvailableChanged,通过"Duration"属性得到总时长,该方式目前项目中一直可用且准确
    void OnMetaDataAvailableChanged(bool available)
    {
        if (available){
            qint64 time = m_pMediaPlayer->metaData("Duration").toInt();
            if (time != 0)
                ui->btn_original_sound->setTotalTime(time / 1000.0);
        }
    }

猜你喜欢

转载自blog.csdn.net/xiaomucgwlmx/article/details/82497138