Qt
Internal/Contributor docs for the Qt SDK. Note: These are NOT official API docs; those are found at https://doc.qt.io/
Loading...
Searching...
No Matches
qaudioengine_p.h
Go to the documentation of this file.
1// Copyright (C) 2022 The Qt Company Ltd.
2// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-3.0-only
3
4#ifndef QAUDIOENGINE_P_H
5#define QAUDIOENGINE_P_H
6
7//
8// W A R N I N G
9// -------------
10//
11// This file is not part of the Qt API. It exists for the convenience
12// of other Qt classes. This header file may change from version to
13// version without notice, or even be removed.
14//
15// We mean it.
16//
17
18#include <QtGui/qvectornd.h>
19#include <QtCore/private/qobject_p.h>
20#include <QtGui/qvectornd.h>
21#include <QtSpatialAudio/qaudioengine.h>
22
23#include <optional>
24
25namespace vraudio {
26class ResonanceAudio;
27} // namespace vraudio
28
29QT_BEGIN_NAMESPACE
30
31class QSpatialSound;
32class QAmbientSound;
33class QAudioRoom;
34class QAudioListener;
35
37{
38public:
39 Q_DECLARE_PUBLIC(QAudioEngine)
40
42 {
43 return engine ? static_cast<QAudioEnginePrivate *>(engine->d_func()) : nullptr;
44 }
45
46 explicit QAudioEnginePrivate(int sampleRate);
48
49 int sampleRate() const { return m_sampleRate; }
50 static constexpr int bufferSize = 128;
51
52 void setDistanceScale(float scale);
53 float distanceScale() const;
54
55 // resonanceAudio access
56 void setMasterVolume(float);
57 float masterVolume() const;
58 float m_masterVolume = 1.f;
59
60 // Listener position
61 // if set to nullopt, no QAudioListener is registered
63 std::optional<QVector3D> listenerPosition() const { return m_position; }
64 void setListenerRotation(const QQuaternion &);
65
66 virtual void start() = 0;
67 virtual void stop() = 0;
68 virtual void setPaused(bool) = 0;
69 virtual bool isPaused() const = 0;
70 virtual void setOutputDevice(const QAudioDevice &) = 0;
71 virtual QAudioDevice outputDevice() const = 0;
73 virtual QAudioEngine::OutputMode outputMode() const = 0;
74 virtual void setRoomEffectsEnabled(bool) = 0;
75 virtual bool roomEffectsEnabled() const = 0;
76
77 virtual void addSpatialSound(QSpatialSound *) = 0;
78 virtual void removeSpatialSound(QSpatialSound *) = 0;
79 virtual void addStereoSound(QAmbientSound *) = 0;
80 virtual void removeStereoSound(QAmbientSound *) = 0;
81
82 virtual void addRoom(QAudioRoom *) = 0;
83 virtual void removeRoom(QAudioRoom *) = 0;
84 virtual QAudioRoom *currentRoom() const = 0;
85
86protected:
88 {
89 QAudioRoom *room;
90 float volume;
91 };
92
93 SmallestRoomForListenerResult findSmallestRoomForListener(QSpan<QAudioRoom *> rooms) const;
94
95private:
96 const int m_sampleRate = 44100;
97
98 // Resonance Audio uses meters internally, while Qt Quick 3D and our API uses cm by
99 // default. To make things independent from the scale setting, we store all distances in
100 // meters internally and convert in the setters and getters.
101 float m_distanceScale = 0.01f;
102
103 std::optional<QVector3D> m_position;
104
105public:
107};
108
109QT_END_NAMESPACE
110
111#endif
void setMasterVolume(float)
virtual bool isPaused() const =0
std::unique_ptr< vraudio::ResonanceAudio > resonanceAudio
virtual void removeStereoSound(QAmbientSound *)=0
virtual void removeSpatialSound(QSpatialSound *)=0
virtual void setRoomEffectsEnabled(bool)=0
virtual void addSpatialSound(QSpatialSound *)=0
virtual bool roomEffectsEnabled() const =0
virtual void start()=0
float distanceScale() const
virtual void setOutputDevice(const QAudioDevice &)=0
SmallestRoomForListenerResult findSmallestRoomForListener(QSpan< QAudioRoom * > rooms) const
virtual void setListenerPosition(std::optional< QVector3D >)
float masterVolume() const
std::optional< QVector3D > listenerPosition() const
virtual QAudioRoom * currentRoom() const =0
void setDistanceScale(float scale)
void setListenerRotation(const QQuaternion &)
virtual void setPaused(bool)=0
virtual QAudioDevice outputDevice() const =0
~QAudioEnginePrivate() override
virtual void setOutputMode(QAudioEngine::OutputMode)=0
virtual void stop()=0
virtual void addRoom(QAudioRoom *)=0
static constexpr int bufferSize
virtual void addStereoSound(QAmbientSound *)=0
virtual QAudioEngine::OutputMode outputMode() const =0
virtual void removeRoom(QAudioRoom *)=0
Combined button and popup list for selecting options.