QSpatialSound Class
三维空间中的声音对象。更多内容...
| 标题: | #include <QSpatialSound> |
| CMake: | find_package(Qt6 REQUIRED COMPONENTS SpatialAudio) target_link_libraries(mytarget PRIVATE Qt6::SpatialAudio) |
| qmake: | QT += spatialaudio |
| 继承自: | QObject |
公共类型
| enum class | DistanceModel { Logarithmic, Linear, ManualAttenuation } |
| enum | Loops { Infinite, Once } |
属性
|
|
公共函数
| QSpatialSound(QAudioEngine *engine) | |
| virtual | ~QSpatialSound() override |
| bool | autoPlay() const |
| float | directivity() const |
| float | directivityOrder() const |
| float | distanceCutoff() const |
| QSpatialSound::DistanceModel | distanceModel() const |
| QAudioEngine * | engine() const |
| int | loops() const |
| float | manualAttenuation() const |
| float | nearFieldGain() const |
| float | occlusionIntensity() const |
| QVector3D | position() const |
| QQuaternion | rotation() const |
| void | setAutoPlay(bool autoPlay) |
| void | setDirectivity(float alpha) |
| void | setDirectivityOrder(float alpha) |
| void | setDistanceCutoff(float cutoff) |
| void | setDistanceModel(QSpatialSound::DistanceModel model) |
| void | setLoops(int loops) |
| void | setManualAttenuation(float attenuation) |
| void | setNearFieldGain(float gain) |
| void | setOcclusionIntensity(float occlusion) |
| void | setPosition(QVector3D pos) |
| void | setRotation(const QQuaternion &q) |
| void | setSize(float size) |
| void | setSource(const QUrl &url) |
| void | setVolume(float volume) |
| float | size() const |
| QUrl | source() const |
| float | volume() const |
公共槽位
信号
| void | autoPlayChanged() |
| void | directivityChanged() |
| void | directivityOrderChanged() |
| void | distanceCutoffChanged() |
| void | distanceModelChanged() |
| void | loopsChanged() |
| void | manualAttenuationChanged() |
| void | nearFieldGainChanged() |
| void | occlusionIntensityChanged() |
| void | positionChanged() |
| void | rotationChanged() |
| void | sizeChanged() |
| void | sourceChanged() |
| void | volumeChanged() |
详细说明
QSpatialSound 表示三维空间中的可听对象。您可以定义其在空间中的位置和方向,设置其正在播放的声音,并为该对象设定音量。
该对象可以具有不同的衰减行为,主要朝一个方向或球面方向发声,并表现得仿佛被其他对象遮挡一样。
成员类型文档
enum class QSpatialSound::DistanceModel
定义声音音量随与听众距离的变化而变化的规律。
| 常数 | 值 | 描述 |
|---|---|---|
QSpatialSound::DistanceModel::Logarithmic | 0 | 音量随距离呈对数递减。 |
QSpatialSound::DistanceModel::Linear | 1 | 音量随距离呈线性递减。 |
QSpatialSound::DistanceModel::ManualAttenuation | 2 | 衰减是通过manualAttenuation 属性手动定义的。 |
enum QSpatialSound::Loops
允许您使用以下值控制声音播放循环:
| 常量 | 值 | 描述 |
|---|---|---|
QSpatialSound::Infinite | -1 | 无限循环播放 |
QSpatialSound::Once | 1 | 播放一次 |
属性文档
autoPlay : bool
确定在指定音源时,声音是否应自动开始播放。
默认值为true 。
访问函数:
| bool | autoPlay() const |
| void | setAutoPlay(bool autoPlay) |
通知信号:
| void | autoPlayChanged() |
directivity : float
定义声源的方向性。值为 0 表示声音向各个方向均匀发射,而值为 1 表示声源主要向前方发射声音。
有效值范围为0到1,默认值为0。
访问函数:
| float | directivity() const |
| void | setDirectivity(float alpha) |
通知信号:
| void | directivityChanged() |
directivityOrder : float
定义声源指向性的阶数。阶数越高,声锥的定位越精准。
该属性的最小值和默认值为 1。
访问函数:
| float | directivityOrder() const |
| void | setDirectivityOrder(float alpha) |
通知信号:
| void | directivityOrderChanged() |
distanceCutoff : float
定义了声源发出的声音在超过该距离后将被截断。如果听者与声源的距离超过了截断距离,则将无法再听到该声音。
访问函数:
| float | distanceCutoff() const |
| void | setDistanceCutoff(float cutoff) |
通知信号:
| void | distanceCutoffChanged() |
distanceModel : DistanceModel
定义该声源的距离模型。音量从size 开始逐渐降低至distanceCutoff 。当距离小于size时,音量保持恒定;当距离大于截止距离时,音量为零。
访问函数:
| QSpatialSound::DistanceModel | distanceModel() const |
| void | setDistanceModel(QSpatialSound::DistanceModel model) |
通知信号:
| void | distanceModelChanged() |
另请参阅 QSpatialSound::DistanceModel 。
loops : int
确定播放器停止前声音播放的次数。设置为QSpatialSound::Infinite 可让当前声音无限循环播放。
默认值为1 。
访问函数:
| int | loops() const |
| void | setLoops(int loops) |
通知信号:
| void | loopsChanged() |
manualAttenuation : float
如果将“distanceModel ”设置为“QSpatialSound::DistanceModel::ManualAttenuation ”,则定义一个手动衰减因子。
访问函数:
| float | manualAttenuation() const |
| void | setManualAttenuation(float attenuation) |
通知信号:
| void | manualAttenuationChanged() |
nearFieldGain : float
定义声源的近场增益。有效值范围为 0 到 1。当距离听众非常近时,近场增益为 1 会将声音信号的音量提高约 20 dB。
访问功能:
| float | nearFieldGain() const |
| void | setNearFieldGain(float gain) |
通知信号:
| void | nearFieldGainChanged() |
occlusionIntensity : float
定义物体被遮挡的程度。0 表示物体完全未被遮挡,1 表示声源被另一个物体完全遮挡。
完全被遮挡的物体仍然可以被听到,但高频成分会受到显著衰减。此外,该物体仍会参与产生房间内的混响和反射声。
可以设置大于 1 的数值,以进一步衰减来自声源的直达声。
默认值为 0。
访问函数:
| float | occlusionIntensity() const |
| void | setOcclusionIntensity(float occlusion) |
通知信号:
| void | occlusionIntensityChanged() |
position : QVector3D
定义声源在三维空间中的位置。默认单位为厘米。
访问函数:
| QVector3D | position() const |
| void | setPosition(QVector3D pos) |
通知信号:
| void | positionChanged() |
另请参阅 QAudioEngine::distanceScale 。
rotation : QQuaternion
定义声源在三维空间中的方向。
访问函数:
| QQuaternion | rotation() const |
| void | setRotation(const QQuaternion &q) |
通知信号:
| void | rotationChanged() |
size : float
定义声源的大小。如果听者距离声源的距离小于该大小,音量将保持不变。该大小还用于遮挡计算,其中较大的声源可能会被墙壁部分遮挡。
访问函数:
| float | size() const |
| void | setSize(float size) |
通知信号:
| void | sizeChanged() |
source : QUrl
要播放的音频的源文件。
访问函数:
| QUrl | source() const |
| void | setSource(const QUrl &url) |
通知信号:
| void | sourceChanged() |
volume : float
用于设置声音的音量。
0 到 1 之间的数值会降低音量,而大于 1 的数值则会提供额外的增益提升。
访问函数:
| float | volume() const |
| void | setVolume(float volume) |
通知信号:
| void | volumeChanged() |
成员函数文档
[explicit] QSpatialSound::QSpatialSound(QAudioEngine *engine)
为engine 创建一个空间声源。该对象可放置在3D空间中,距离听众越近,声音就越大。
注意: 调用时必须 传入一个有效的QAudioEngine
[override virtual noexcept] QSpatialSound::~QSpatialSound()
摧毁声源。
QAudioEngine *QSpatialSound::engine() const
返回与该监听器关联的引擎。
[slot] void QSpatialSound::pause()
暂停声音播放。调用play() 将继续播放。
[slot] void QSpatialSound::play()
开始播放声音。如果声音已经在播放,则不执行任何操作。
[slot] void QSpatialSound::stop()
停止声音播放,并将当前位置和当前循环次数重置为0。调用play() 将从声音文件的开头开始播放。
© 2026 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.