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