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 <QtSpatialAudio/qaudioengine.h>
19#include <QtGui/qvectornd.h>
20#include <QtCore/private/qobject_p.h>
21
22#include <optional>
23
24namespace vraudio {
25class ResonanceAudio;
26} // namespace vraudio
27
28QT_BEGIN_NAMESPACE
29
30namespace QSpatialAudioPrivate {
32} // namespace QSpatialAudioPrivate
33
35class QAudioRoom;
36class QAudioListener;
37
39{
40public:
41 Q_DECLARE_PUBLIC(QAudioEngine)
42
44 {
45 return engine ? static_cast<QAudioEnginePrivate *>(engine->d_func()) : nullptr;
46 }
47
48 explicit QAudioEnginePrivate(int sampleRate);
50
51 int sampleRate() const { return m_sampleRate; }
52 static constexpr int framesPerBuffer = 128;
53
54 void setDistanceScale(float scale);
55 float distanceScale() const;
56
57 // resonanceAudio access
58 void setMasterVolume(float);
59 float masterVolume() const;
60 float m_masterVolume = 1.f;
61
62 // Listener position
63 // if set to nullopt, no QAudioListener is registered
65 std::optional<QVector3D> listenerPosition() const { return m_position; }
66 void setListenerRotation(const QQuaternion &);
67
68 // room effects
69 void setRoomEffectsEnabled(bool);
70 bool roomEffectsEnabled() const;
71
72 // output mode
75
76 // rooms
77 void addRoom(QAudioRoom *);
78 void removeRoom(QAudioRoom *);
79 QAudioRoom *currentRoom() const;
80 void updateRooms();
81 virtual void updateRoomEffects() = 0;
82
83 virtual void start() = 0;
84 virtual void stop() = 0;
85 virtual void setPaused(bool) = 0;
86 virtual bool isPaused() const = 0;
87 virtual void setOutputDevice(const QAudioDevice &) = 0;
88 virtual QAudioDevice outputDevice() const = 0;
89
90 virtual void addSound(QAmbientSoundPrivate *) = 0;
91 virtual void removeSound(QAmbientSoundPrivate *) = 0;
94
95protected:
97 {
98 QAudioRoom *room;
99 float volume;
100 };
101
102 SmallestRoomForListenerResult findSmallestRoomForListener(QSpan<QAudioRoom *> rooms) const;
103
104private:
105 const int m_sampleRate = 44100;
106
107 // Resonance Audio uses meters internally, while Qt Quick 3D and our API uses cm by
108 // default. To make things independent from the scale setting, we store all distances in
109 // meters internally and convert in the setters and getters.
110 float m_distanceScale = 0.01f;
111
112 std::optional<QVector3D> m_position;
114
115 std::vector<QAudioRoom *> rooms;
116 QAudioRoom *m_currentRoom = nullptr;
117
118public:
120};
121
122QT_END_NAMESPACE
123
124#endif
void removeRoom(QAudioRoom *)
void setMasterVolume(float)
virtual bool isPaused() const =0
const std::unique_ptr< vraudio::ResonanceAudio > resonanceAudio
static constexpr int framesPerBuffer
virtual void updateRoomEffects()=0
virtual void setSoundPlaybackData(QAmbientSoundPrivate *, SharedPlaybackState)=0
void addRoom(QAudioRoom *)
bool roomEffectsEnabled() const
virtual void start()=0
float distanceScale() const
virtual void setOutputDevice(const QAudioDevice &)=0
QAudioRoom * currentRoom() const
void setOutputMode(QAudioEngine::OutputMode)
SmallestRoomForListenerResult findSmallestRoomForListener(QSpan< QAudioRoom * > rooms) const
void setListenerPosition(std::optional< QVector3D >)
float masterVolume() const
std::optional< QVector3D > listenerPosition() const
void setDistanceScale(float scale)
void setListenerRotation(const QQuaternion &)
virtual void setPaused(bool)=0
virtual QAudioDevice outputDevice() const =0
~QAudioEnginePrivate() override
virtual void stop()=0
void setRoomEffectsEnabled(bool)
virtual void removeSound(QAmbientSoundPrivate *)=0
virtual void addSound(QAmbientSoundPrivate *)=0
\inmodule QtSpatialAudio