QSoundEffect Class
QSoundEffect 类提供了一种播放低延迟音效的方法。更多
头文件: | #include <QSoundEffect> |
CMake.QSoundEffect 类 | find_package(Qt6 REQUIRED COMPONENTS Multimedia) target_link_libraries(mytarget PRIVATE Qt6::Multimedia) |
qmake: | QT += multimedia |
在 QML 中: | SoundEffect |
继承: | QObject |
公共类型
属性
|
公共功能
QSoundEffect(QObject *parent = nullptr) | |
QSoundEffect(const QAudioDevice &audioDevice, QObject *parent = nullptr) | |
virtual | ~QSoundEffect() override |
QAudioDevice | audioDevice() |
bool | isLoaded() const |
bool | isMuted() const |
bool | isPlaying() const |
int | loopCount() const |
int | loopsRemaining() const |
void | setAudioDevice(const QAudioDevice &device) |
void | setLoopCount(int loopCount) |
void | setMuted(bool muted) |
void | setSource(const QUrl &url) |
void | setVolume(float volume) |
QUrl | source() const |
QSoundEffect::Status | status() const |
float | volume() const |
公共插槽
信号
void | audioDeviceChanged() |
void | loadedChanged() |
void | loopCountChanged() |
void | loopsRemainingChanged() |
void | mutedChanged() |
void | playingChanged() |
void | sourceChanged() |
void | statusChanged() |
void | volumeChanged() |
静态公共成员
QStringList | supportedMimeTypes() |
详细说明
该类允许以较低延迟的方式播放未压缩的音频文件(通常为 WAV 文件),适用于响应用户操作的 "反馈 "类声音(例如虚拟键盘声音、弹出对话框的正反馈或游戏声音)。如果低延迟并不重要,可以考虑使用QMediaPlayer 类,因为它支持更多的媒体格式,而且资源消耗较少。
本例展示了如何播放循环播放、略显安静的声音效果:
QSoundEffect effect; effect.setSource(QUrl::fromLocalFile("engine.wav")); effect.setLoopCount(QSoundEffect::Infinite); effect.setVolume(0.25f); effect.play();
通常情况下,音效应重复使用,这样可以提前完成所有解析和准备工作,只在必要时才触发。这有助于降低音频播放的延迟。
MyGame() : m_explosion(this) { m_explosion.setSource(QUrl::fromLocalFile("explosion.wav")); m_explosion.setVolume(0.25f); // Set up click handling etc. connect(clickSource, &QPushButton::clicked, &m_explosion, &QSoundEffect::play); } private: QSoundEffect m_explosion;
由于 QSoundEffect 需要稍多的资源来实现低延迟播放,因此平台可能会限制同时播放音效的数量。
成员类型文档
enum QSoundEffect::Loop
常数 | 值 | 说明 |
---|---|---|
QSoundEffect::Infinite | -2 | 作为setLoopCount() 的参数,用于无限循环 |
enum QSoundEffect::Status
常数 | 值 | 说明 |
---|---|---|
QSoundEffect::Null | 0 | 未设置源代码或源代码为空。 |
QSoundEffect::Loading | 1 | SoundEffect 正在尝试加载信号源。 |
QSoundEffect::Ready | 2 | 信号源已加载并可播放。 |
QSoundEffect::Error | 3 | 操作过程中发生错误,如加载信号源失败。 |
属性文档
audioDevice : QAudioDevice
返回QAudioDevice 实例。
访问功能:
QAudioDevice | audioDevice() |
void | setAudioDevice(const QAudioDevice &device) |
通知信号:
void | audioDeviceChanged() |
loops : int
该属性用于保存声音的播放次数。值为 0 或 1 表示声音只播放一次;设置为SoundEffect.Infinite 可启用无限循环。
该值可在音效播放时更改,在这种情况下,它将把剩余的循环次数更新为新值。
访问功能:
int | loopCount() const |
void | setLoopCount(int loopCount) |
通知信号:
void | loopCountChanged() |
[read-only]
loopsRemaining : const int
该属性包含音效自行停止前剩余的循环次数,或QSoundEffect::Infinite (如果loops 中已设置)。
访问功能:
int | loopsRemaining() const |
通知信号:
void | loopsRemainingChanged() |
muted : bool
该属性提供了一种控制静音的方法。true
的值将使该效果静音。
访问功能:
通知信号:
void | mutedChanged() |
[read-only]
playing : const bool
此属性表示音效是否正在播放。
访问功能:
bool | isPlaying() const |
通知信号:
void | playingChanged() |
source : QUrl
该属性包含要播放的声音的 URL。要让SoundEffect 试图加载音源,URL 必须存在,应用程序必须在指定目录下有读取权限。
访问功能:
通知信号:
void | sourceChanged() |
[read-only]
status : const Status
该属性显示QSoundEffect::Status 枚举中音效的当前状态。
访问功能:
QSoundEffect::Status | status() const |
Notifier 信号:
void | statusChanged() |
volume : float
该属性用于设置音效播放的音量,从 0.0(静音)到 1.0(全音量)。
访问功能:
Notifier 信号:
void | volumeChanged() |
成员函数 文档
[explicit]
QSoundEffect::QSoundEffect(QObject *parent = nullptr)
使用给定的parent 创建 QSoundEffect。
[explicit]
QSoundEffect::QSoundEffect(const QAudioDevice &audioDevice, QObject *parent = nullptr)
使用给定的audioDevice 和parent 创建 QSoundEffect。
[override virtual noexcept]
QSoundEffect::~QSoundEffect()
破坏该音效。
bool QSoundEffect::isLoaded() const
返回音效是否已完成加载source() 。
bool QSoundEffect::isMuted() const
返回此音效是否静音
注: muted 属性的获取函数。
bool QSoundEffect::isPlaying() const
如果当前正在播放音效,则返回 true,否则返回 false
注: 属性playing 的获取函数。
[signal]
void QSoundEffect::loadedChanged()
当加载状态发生变化时,会发出loadedChanged
信号。
int QSoundEffect::loopCount() const
返回该音效在停止前的总播放次数。
有关当前剩余的循环次数,请参阅loopsRemaining() 方法。
注: 属性loops 的获取函数。
另请参阅 setLoopCount() 方法。
[signal]
void QSoundEffect::loopCountChanged()
loopCountChanged
信号会在初始循环数发生变化时发出。
注: 属性loops 的通知信号。
[signal]
void QSoundEffect::loopsRemainingChanged()
当剩余循环次数发生变化时,会发出loopsRemainingChanged
信号。
注: 属性loopsRemaining 的通知信号。
[signal]
void QSoundEffect::mutedChanged()
当静音状态发生变化时,会发出mutedChanged
信号。
注: 属性muted 的通知信号。
[slot]
void QSoundEffect::play()
开始播放音效,循环播放循环属性中指定次数的音效。
[signal]
void QSoundEffect::playingChanged()
当播放属性发生变化时,会发出playingChanged
信号。
注: 属性playing 的通知信号。
void QSoundEffect::setLoopCount(int loopCount)
将播放该音效的总次数设置为loopCount 。
将循环次数设为 0 或 1 表示音效只播放一次;通过QSoundEffect::Infinite
则表示无限重复。循环次数可以在音效播放时更改,在这种情况下,它会将剩余的循环次数更新为新的loopCount 。
注: 属性loops 的设置函数。
另请参阅 loopCount() 和loopsRemaining()。
void QSoundEffect::setMuted(bool muted)
设置是否使该音效的播放静音。
如果muted 为 true,重放将被静音(消音),否则重放将以当前指定的volume() 进行。
注: 属性muted 的设置函数。
另请参阅 isMuted() 。
void QSoundEffect::setSource(const QUrl &url)
将当前要播放的 URL 设置为url 。
注: 属性source 的设置函数。
另请参阅 source() 。
void QSoundEffect::setVolume(float volume)
将音效音量设置为volume 。
音量从0.0
(静音)到1.0
(全音量)线性缩放。超出此范围的值将被箝位。
默认音量为1.0
。
用户界面音量控制通常应以非线性方式缩放。例如,使用对数刻度会使感知响度产生线性变化,而这正是用户通常期望从音量控制中获得的效果。更多详情,请参阅QtAudio::convertVolume() 。
注: 属性volume 的设置函数。
另请参阅 volume() 。
QUrl QSoundEffect::source() const
返回当前播放源的 URL
注: 属性源的获取函数。
另请参阅 setSource().
[signal]
void QSoundEffect::sourceChanged()
sourceChanged
信号会在源被更改时发出。
注: 属性source 的通知信号。
QSoundEffect::Status QSoundEffect::status() const
返回此音效的当前状态。
注: 属性状态的获取函数。
[signal]
void QSoundEffect::statusChanged()
当状态属性发生变化时,会发出statusChanged
信号。
注: 属性status 的通知信号。
[slot]
void QSoundEffect::stop()
停止当前播放。
[static]
QStringList QSoundEffect::supportedMimeTypes()
返回该平台支持的 MIME 类型列表。
float QSoundEffect::volume() const
返回此音效的当前音量,从 0.0(无声)到 1.0(最大音量)。
注:音量 属性的获取函数。
另请参阅 setVolume().
[signal]
void QSoundEffect::volumeChanged()
volumeChanged
信号在音量发生变化时发出。
注: 属性volume 的通知信号。
© 2025 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.