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