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);
        }
    }

  • 5
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Qt提供了QAudioFormat、QAudioDeviceInfo和QAudioDecoder等类,可以用来获取音频文件的信息。 QAudioFormat类包含音频格式的各种参数,如采样率、通道数、采样位数等。通过QAudioDecoder类的setSourceFilename()函数设置音频文件名,然后调用QAudioDecoder的audioFormat()函数即可获取音频文件的格式信息。 QAudioDeviceInfo类可以用来查询系统中可用的音频设备信息,包括输入输出设备、支持的音频格式等。可以使用QAudioDeviceInfo::availableDevices()函数获取系统中所有可用的音频设备列表。 最后,使用QAudioDecoder的audioBufferAvailable()信号和read()函数可以逐一读取音频文件中的数据,并获取音频流的信息,如每帧采样数、时间戳等。通过获取音频流的信息可以实现音频播放和编辑等常见功能。 综上所述,Qt提供了丰富的音频处理类和函数,通过这些类和函数可以方便地获取音频文件的信息,开发各种音频应用程序。 ### 回答2: Qt是一个跨平台的GUI应用程序开发框架,也可以用于处理音频文件和获取音频文件信息。Qt提供了一个名为QMediaMetaData的类,可以使用它来获取音频文件的元数据。 在Qt中,可以通过QMediaPlayer类来打开音频文件,并使用QMediaMetaData类来获取音频文件的信息。以下是一个获取音频文件信息的示例程序: ```c++ #include <QtMultimedia> #include <QDebug> int main(int argc, char *argv[]) { QCoreApplication app(argc, argv); // 打开音频文件 QMediaPlayer player; player.setMedia(QUrl::fromLocalFile("test.mp3")); player.play(); // 获取音频文件元数据 QMediaMetaData metaData = player.metaData(); qDebug() << "Title:" << metaData.value(QMediaMetaData::Title).toString(); qDebug() << "Artist:" << metaData.value(QMediaMetaData::Author).toString(); qDebug() << "Album:" << metaData.value(QMediaMetaData::AlbumTitle).toString(); qDebug() << "Year:" << metaData.value(QMediaMetaData::Year).toInt(); qDebug() << "Duration:" << metaData.value(QMediaMetaData::Duration).toInt() / 1000 << "seconds"; return app.exec(); } ``` 在上述代码中,我们使用QMediaPlayer类打开名为test.mp3音频文件。然后,我们使用QMediaMetaData类获取音频文件的元数据信息,如标题、艺术家、专辑名、发布年份和持续时间等。最后,我们将这些信息输出到控制台中。 需要注意的是,在使用QMediaPlayer类获取音频文件元数据之前,必须先打开音频文件并开始播放。否则,元数据信息将无法获取。 总之,使用Qt框架获取音频文件信息非常简单,只需使用QMediaPlayer类打开音频文件,然后使用QMediaMetaData类获取元数据信息即可。 ### 回答3: Qt是一款功能强大的跨平台应用程序开发框架,可以轻松地获取音频文件的信息,包括文件名、格式、时长、比特率等。开发者可以使用Qt中的多媒体模块来获取音频文件信息。 首先,开发者需要加载音频文件。可以使用Qt中的QMediaPlayer类或QAudioDecoder类来打开音频文件。然后使用QMediaMetaData类来获取音频文件的元数据, 包括作者、专辑、音轨、流派、标题等信息。 例如,以下代码演示了如何加载MP3文件,并从元数据中获取标题和比特率: ```C++ QMediaPlayer mediaPlayer; mediaPlayer.setMedia(QUrl::fromLocalFile("example.mp3")); QString title = mediaPlayer.metaData("Title").toString(); qint64 bitrate = mediaPlayer.metaData("Bitrate").toLongLong(); ``` 另外,如果想获取音频文件的时长,可以使用QMediaPlayer类中的duration()函数。例如: ```C++ qint64 duration = mediaPlayer.duration(); ``` 总之,Qt提供了丰富的功能来获取音频文件信息,开发者可以根据自己的需求选择适合的类库和方法来实现。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值