QSoundEffect独立声音播放线程 movetothread方式

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

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
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ZLOZL

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值