// Copyright (C) 2024 The Qt Company Ltd. // SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-3.0-only #ifndef QAMBIENTSOUND_P_H #define QAMBIENTSOUND_P_H // // W A R N I N G // ------------- // // This file is not part of the Qt API. It exists for the convenience // of other Qt classes. This header file may change from version to // version without notice, or even be removed. // // We mean it. // #include #include #include #include #include #include #include #include QT_BEGIN_NAMESPACE class QAudioEngine; class QAmbientSoundPrivate : public QObjectPrivate { Q_DECLARE_PUBLIC(QAmbientSound) public: explicit QAmbientSoundPrivate(int nchannels = 2) : nchannels(nchannels) { } template static QAmbientSoundPrivate *get(T *soundSource) { return soundSource ? soundSource->d_func() : nullptr; } QUrl url; float volume = 1.; int nchannels = 2; std::unique_ptr decoder; std::unique_ptr sourceDeviceFile; QAudioEngine *engine = nullptr; QMutex mutex; int currentBuffer = 0; int bufPos = 0; int m_currentLoop = 0; QList buffers; int sourceId = -1; // kInvalidSourceId QAtomicInteger m_autoPlay = true; QAtomicInteger m_playing = false; QAtomicInt m_loops = 1; bool m_loading = false; void play() { m_playing = true; } void pause() { m_playing = false; } void stop() { QMutexLocker locker(&mutex); m_playing = false; currentBuffer = 0; bufPos = 0; m_currentLoop = 0; } void load(); void getBuffer(float *buf, int frames, int channels); }; QT_END_NAMESPACE #endif // QAMBIENTSOUND_P_H