QSoundEffect独立声音播放线程 movetothread方式
话不多说,先上代码:
- audiothread.h
#ifndef DLTHREAD_H
#define DLTHREAD_H
/**********************************************************************
*@projectName MVRecoTL
*@brief QSoundEffect独立声音播放线程 movetothread方式
*Author: zlozl
*Copyright: zlozl
*Email: zlozl5566@163.com
*QQ: 849414798
*BlogAddress: https://blog.youkuaiyun.com/ZLOZL
*GiteeHome: https://gitee.com/zlozl5566
*Version: V1.0.0.1
*Create Date: 2021-01-07
**********************************************************************/
/*[TODO]
* Date: 2021-05-17
* 频繁切换音频,会导致程序异常退出
*
*/
//import Qt
#include <QtCore>
#include <QObject>
#include <QSoundEffect>
#include <QThread>
#include <QSound>
//import zlozl
#include "app.h"
#include "mvpublic.h"
enum VOICE_TYPE{
VOICE_TOOFAR, //太远(请靠近)
VOICE_TOOCLOSE, //太近(请远离)
VOICE_TAKEOFFMASK, //请摘下口罩
VOICE_TAKEOFFGLASSES, //请取下眼镜
VOICE_OPENEYES, //请睁大眼睛
VOICE_BLINKEYES, //请眨眼
VOICE_TAKEOFFHAT, //请脱下帽子
VOICE_HEADUP, //请抬头
VOICE_HEADDOWN, //请低头
VOICE_DONOTLOOKUP, //请勿抬头
VOICE_DONOTBOW, //请勿低头
VOICE_DONOTSHAKE, //请勿摇头
VOICE_LOOKCAMERA, //请正视镜头
VOICE_SCREENCLICK, //屏幕点击音效
VOICE_STARTFACEENROLL, //开始人脸采集
VOICE_STARTIRISENROLL, //开始虹膜采集
VOICE_STARTFINGERENROLL, //开始指纹采集
VOICE_STARTCREDENROLL, //开始证件采集
VOICE_PLACECCRED, //请放置好证件
VOICE_PRESSFINGER, //请按压指纹
VOICE_GUIEDACTION, //请按照动画提示完成相应动作
VOICE_ENROLLOVERTIME, //采集超时
VOICE_RECOOVERTIME, //识别超时
VOICE_ENROLLSUCCESS, //采集成功
VOICE_RECOPSAA, //识别成功
VOICE_VERIFYSIGN, //请核对采集信息后签字
VOICE_VERIFYCOMMIT, //请核对信息后提交
VOICE_COMMITSUCCESS, //提交成功
};
//第三方声音文件
const QString g_third_voiceFileDirName = "/voice/";
//终端自带语音文件
const QString g_mvtl_voiceFileDirName = "/TLVoice/";
class AudioThread : public QObject
{
Q_OBJECT
public:
explicit AudioThread(QObject *parent = nullptr);
~AudioThread();
Q_DISABLE_COPY(AudioThread);
signals:
void doPlay();
void doStop();
public slots:
//自定义语音类型播放,声音播放优先级最高,单次不循环 会覆盖播放
void play(int type);
//自定义语音类型播放,声音播放优先级最低,单次不循环 不会覆盖播放
void play_lowestPriority(int type);
//播放第三方文件夹下语音名称,声音播放优先级最高,单次不循环 会覆盖播放
void play_thirdFiles(const QString &fileName);
//暂停播放
void stop();
void on_sourceChanged();
void on_statusChanged();
private:
int voice_type;
QSoundEffect* m_peffect;
QThread* m_pthr

本文介绍了如何使用QSoundEffect在C++中创建一个独立的音频播放线程,通过movetothread方法实现优先级控制,并解决频繁音频切换导致的程序异常问题。详细讲解了高优先级和低优先级播放函数,以及第三方文件播放的处理策略。
最低0.47元/天 解锁文章
1314

被折叠的 条评论
为什么被折叠?



