Qt播放音效或音乐使用QSoundEffect类

一、QSoundEffect类介绍

QSoundEffect是一个用于播放音效的Qt类。它提供了一种简单的方式来加载和播放音效文件。

QSoundEffect的用法非常简单。首先,通过调用setSource()方法,你可以指定要播放的音效文件的路径。然后,通过调用play()方法,你可以开始播放音效。你还可以通过设置其他属性来控制音效的音量、循环播放、音效音调、音效速度等。

QSoundEffect支持多种音频格式,包括WAV、MP3、OGG等。

QSoundEffect还提供了一些方法,如pause()、stop()、isPlaying()等,以便你可以进一步控制音效的播放。

总之,QSoundEffect是一个简单易用的Qt类,用于播放音效。它提供了一种方便的方式来加载和播放音效文件,并提供了一些属性和方法来控制音效的播放。

二、QSoundEffect单例类封装

.hpp

cpp 复制代码
#ifndef SOUNDEFFECTHELPER_H
#define SOUNDEFFECTHELPER_H

#include <QObject>
#include <QSoundEffect>
#include <QUrl>
#include <QDebug>

class SoundEffectHelper : public QObject
{
    Q_OBJECT
private:
    explicit SoundEffectHelper(QObject *parent = nullptr);
    SoundEffectHelper(const SoundEffectHelper&) = delete;
    SoundEffectHelper operator=(const SoundEffectHelper &) = delete;
public:
    typedef enum
    {
        musicKeyPress,
        musicFailed,
        musicSuccess,
        musicToast,
        musicMax,
    }music;
    static SoundEffectHelper *getInstance()
    {
        if(instance == nullptr)
            instance = new SoundEffectHelper();
        return instance;
    }
    void play(music m);
private:
    void valueInit();

private:
    static SoundEffectHelper *instance;
    QSoundEffect soundEffectBuf[musicMax];
};

#endif // SOUNDEFFECTHELPER_H

.cpp

cpp 复制代码
#include "soundEffectHelper.h"

SoundEffectHelper *SoundEffectHelper::instance = nullptr;

SoundEffectHelper::SoundEffectHelper(QObject *parent)
    : QObject{parent}
{
    this->valueInit();
    qDebug()<<"dsfsdfsd";
}
void SoundEffectHelper::valueInit()
{
    soundEffectBuf[musicKeyPress].setSource(QUrl::fromLocalFile(":/music/music/button.wav"));
    soundEffectBuf[musicKeyPress].setLoopCount(1);// 音频循环的次数
    soundEffectBuf[musicKeyPress].setVolume(1.0f);// 音量

    soundEffectBuf[musicFailed].setSource(QUrl::fromLocalFile(":/music/music/failed.wav"));
    soundEffectBuf[musicFailed].setLoopCount(1);// 音频循环的次数
    soundEffectBuf[musicFailed].setVolume(1.0f);// 音量

    soundEffectBuf[musicSuccess].setSource(QUrl::fromLocalFile(":/music/music/success.wav"));
    soundEffectBuf[musicSuccess].setLoopCount(1);// 音频循环的次数
    soundEffectBuf[musicSuccess].setVolume(1.0f);// 音量

    soundEffectBuf[musicToast].setSource(QUrl::fromLocalFile(":/music/music/toast.wav"));
    soundEffectBuf[musicToast].setLoopCount(1);// 音频循环的次数
    soundEffectBuf[musicToast].setVolume(1.0f);// 音量
}
void SoundEffectHelper::play(music m)
{
    if(m > musicMax)
    {
        qWarning()<<"invalid music value!";
        return;
    }
    soundEffectBuf[m].play();
}
相关推荐
Dxy12393102168 分钟前
Python使用XPath定位元素:动态计算与函数调用
开发语言·python
小小码农Come on9 分钟前
QT实现线程4种方法
qt
Evand J22 分钟前
【MATLAB代码介绍】三种CT模型的IMM(交互式多模型)对目标高精度定位
开发语言·matlab·ct·imm·交互式多模型·多模型·转弯
AC赳赳老秦24 分钟前
OpenClaw权限管理实操:团队共享Agent,设置操作权限,保障数据安全
服务器·开发语言·前端·javascript·excel·deepseek·openclaw
geovindu36 分钟前
go: Proxy Pattern
开发语言·后端·设计模式·golang·代理模式
langsiming41 分钟前
【无标题】
java·开发语言·数据库
꧁细听勿语情꧂43 分钟前
合并两个有序表、判断链表的回文结构、相交链表、环的链表一和二
c语言·开发语言·数据结构·算法
Rust语言中文社区44 分钟前
【Rust日报】2026-04-24 Vizia 0.4 发布——纯 Rust 声明式响应式 GUI 框架
开发语言·后端·rust
普通网友1 小时前
JavaScript:ESLint+Prettier 规范代码格式
开发语言·javascript·ecmascript
t***5441 小时前
如何在 Dev-C++ 中切换编译器
java·开发语言·c++