admin 管理员组文章数量: 1086019
Qt6.3.1播放音频文件QAudioSink
1、概述
案例:使用Qt播放pcm音频文件。
步骤:
1.自定义一个QIODevice
2.封装XAudioPlayer,调用步骤如下
a.创建QMediaDevices
b.从QMediaDevices中获取默认的音频播放设备QAudioDevice
c.从QAudioDevice中获取播放格式QAudioFormat
d.创建QAudioSink,并将默认音频输出设备和格式传递进去,之后的暂停,继续,开始、停止操作全部都是通过QAudioSink来操作的
3.调用startPlay方法播放
本文福利,莬费领取Qt开发学习资料包、技术视频,内容包括(C++语言基础,Qt编程入门,QT信号与槽机制,QT界面开发-图像绘制,QT网络,QT数据库编程,QT项目实战,QSS,OpenCV,Quick模块,面试题等等)↓↓↓↓↓↓见下面↓↓文章底部点击莬费领取↓↓
2、代码示例
1.XIODevice.h 自定义QIODevice头文件
#ifndef XIODEVICE_H
#define XIODEVICE_H#include <QObject>
#include <QFile>
#include <QIODevice>class XIODevice : public QIODevice
{
public:XIODevice();~XIODevice();void start();void stop();qint64 readData(char *data,qint64 maxlen) override;qint64 writeData(const char *data, qint64 len) override;
private:QFile inputFile;
};#endif // XIODEVICE_H
2.XIODevice.cpp文件
#include "xiodevice.h"
#include <QDebug>XIODevice::XIODevice()
{inputFile.setFileName("D:/wei.yang/tony/tool/qtworkspace/XPlayer/out.pcm");inputFile.open(QIODevice::ReadOnly);}void XIODevice::start(){open(QIODevice::ReadOnly);}void XIODevice::stop(){close();}/*** 扬声器缺少数据时会自动调用这个方法* @brief XAudioPlayer::readData* @param data* @param maxlen* @return*/
qint64 XIODevice::readData(char *data,qint64 maxlen){inputFile.read(data,maxlen);qDebug()<<"读取文件数据:"<<maxlen;return maxlen;
}qint64 XIODevice::writeData(const char *data, qint64 len){Q_UNUSED(data);Q_UNUSED(len);return 0;
}
XIODevice::~XIODevice()
{inputFile.close();}
3.XAudioPlayer.h头文件
#ifndef XAUDIOPLAYER_H
#define XAUDIOPLAYER_H#include <QObject>
#include <QFile>
#include <QIODevice>
#include <QAudioFormat>
#include <QMediaDevices>
#include <QAudioSink>
#include <QAudioDevice>
#include "xiodevice.h"class XAudioPlayer : public QObject
{Q_OBJECT
public:explicit XAudioPlayer(QObject *parent = nullptr);~XAudioPlayer();void onPause();void onResume();void startPlay();void stopPlay();private:QAudioSink *audioSink;QMediaDevices *outputDevices;QAudioDevice outputDevice;QAudioSink *audioSinkOutput;XIODevice *xIoDevice;signals:};#endif // XAUDIOPLAYER_H
4.XAudioPlayer.cpp文件
#include "xaudioplayer.h"
#include <QDebug>XAudioPlayer::XAudioPlayer(QObject *parent): QObject{parent}
{outputDevices = new QMediaDevices(this);outputDevice = outputDevices->defaultAudioOutput();QAudioFormat format = outputDevice.preferredFormat();// ChannelConfigStereo is 2, Int16 is 2qDebug("sampleRate: %d, channelCount: %d, sampleFormat: %d",format.sampleRate(), format.channelCount(), format.sampleFormat());xIoDevice = new XIODevice();audioSinkOutput = new QAudioSink(outputDevice, format);// xIoDevice->start();// audioSinkOutput->start(xIoDevice);}
/*** 开始* @brief XAudioPlayer::startPlay*/
void XAudioPlayer::startPlay(){xIoDevice->start();audioSinkOutput->start(xIoDevice);
}/*** 停止* @brief XAudioPlayer::stopPlay*/
void XAudioPlayer::stopPlay(){xIoDevice->stop();audioSinkOutput->stop();}
/*** 暂停* @brief onPause*/
void XAudioPlayer::onPause(){audioSinkOutput->suspend();
}
/*** 继续* @brief onResume*/
void XAudioPlayer::onResume(){audioSinkOutput->resume();
}/*** 析构函数* @brief XAudioPlayer::~XAudioPlayer*/
XAudioPlayer::~XAudioPlayer(){xIoDevice->stop();audioSinkOutput->stop();
}
5.外部类调用XAudioPlayer并执行播放函数
XAudioPlayer audioPlayer;audioPlayer.startPlay();
本文福利,莬费领取Qt开发学习资料包、技术视频,内容包括(C++语言基础,Qt编程入门,QT信号与槽机制,QT界面开发-图像绘制,QT网络,QT数据库编程,QT项目实战,QSS,OpenCV,Quick模块,面试题等等)↓↓↓↓↓↓见下面↓↓文章底部点击莬费领取↓↓
本文标签: Qt631播放音频文件QAudioSink
版权声明:本文标题:Qt6.3.1播放音频文件QAudioSink 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.roclinux.cn/b/1686730657a30345.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论