4#ifndef QAMBIENTSOUND_P_H
5#define QAMBIENTSOUND_P_H
18#include <QtMultimedia/qaudiobuffer.h>
19#include <QtMultimedia/qaudiodecoder.h>
20#include <QtMultimedia/qaudioformat.h>
21#include <QtMultimedia/private/qmultimedia_source_resolver_p.h>
22#include <QtSpatialAudio/qambientsound.h>
23#include <QtSpatialAudio/private/qtspatialaudioglobal_p.h>
24#include <QtCore/qurl.h>
25#include <QtCore/qfuture.h>
26#include <QtCore/private/qobject_p.h>
27#include <QtCore/private/qexpected_p.h>
33class ResonanceAudioApi;
39class QQuick3DSpatialSound;
59 std::atomic_bool m_playing =
false;
60 std::atomic_int m_loops = 1;
63 int m_currentSample = 0;
64 int m_currentLoop = 0;
66 const QAudioBuffer m_buffer;
73 Q_DECLARE_PUBLIC(QAmbientSound)
83 return soundSource ? soundSource->d_func() :
nullptr;
90 float volume()
const {
return m_volume; }
92 int loops()
const {
return m_loops; }
115 template <
typename Functor>
118 auto *api = getAPI();
122 using result = std::invoke_result_t<Functor, vraudio::ResonanceAudioApi *>;
123 if constexpr (std::is_void_v<result>)
134 bool m_autoPlay =
true;
136 float m_volume = 1.f;
139 std::unique_ptr<QAudioDecoder> m_decoder;
141 std::optional<QAudioBuffer> m_buffer;
142 QFuture<
void> m_loadFuture;
145 QFuture<LoadResult> load(QUrl resolvedUrl, QAudioFormat format);
151 friend class QQuick3DSpatialSound;
153 std::unique_ptr<
const AbstractSourceResolver> m_sourceResolver =
156 vraudio::ResonanceAudioApi *getAPI();
161 SharedPlaybackState m_playbackState;
163 void setState(SharedPlaybackState);
void setVolume(float volume)
void loadUrl(const QUrl &url)
static QAmbientSoundPrivate * get(T *soundSource)
virtual void applyVolume()
auto withResonanceApi(Functor &&f)
QAudioEngine *const engine
virtual void updateRoomEffects()
QAmbientSoundPrivate(QAudioEngine *engine, int nchannels, int sourceId)
QSpatialAudioPlaybackState(QAudioBuffer buffer, bool playing, int loops)
QAudioFormat format() const
void getBuffer(QSpan< float > output)