qt6音频播放

#include <QCoreApplication>
#include <QAudioSink>
#include <QMediaDevices>
#include <QFile>
#include <QTimer>
#include <QDebug>

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);

    // 1. 设置格式
    QAudioFormat format;
    format.setSampleRate(44100);
    format.setChannelCount(2);
    format.setSampleFormat(QAudioFormat::Int16);

    // 2. 打开 PCM 文件
    QFile *file = new QFile("D:/Github/Qt_Widget/TestAudioOutPut/out.pcm");
    if (!file->open(QIODevice::ReadOnly)) {
        qWarning() << "无法打开 PCM 文件";
        return -1;
    }

    // 3. 创建音频输出
    QAudioDevice outputDevice = QMediaDevices::defaultAudioOutput();
    QAudioSink *audio = new QAudioSink(outputDevice, format, &a);

    // 4. 启动播放
    audio->start(file);

    // 5. 定时器输出播放进度(每秒)
    QTimer *timer = new QTimer(&a);
    QObject::connect(timer, &QTimer::timeout, [&]() {
        qint64 elapsedUs = audio->elapsedUSecs();
        double seconds = elapsedUs / 1'000'000.0;
        qDebug().nospace() << "播放进度: " << seconds << " 秒";
    });
    timer->start(1000);

    // 6. 播放结束时退出
    QObject::connect(audio, &QAudioSink::stateChanged, [&](QAudio::State state) {
        if (state == QAudio::IdleState || state == QAudio::StoppedState) {
            qDebug() << "播放完成,退出程序";
            timer->stop();
            file->close();
            audio->stop();
            a.quit();
        }
    });

    return a.exec();
}
posted @ 2025-07-25 12:40  丘狸尾  阅读(58)  评论(0)    收藏  举报