Revision control
++ // Copyright (C) 2022 The Qt Company Ltd.
++ // SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-3.0-only
++
++ #include "qquick3dambientsound_p.h"
++
++ #include <QtMultimediaQuick/private/qqmlcontext_source_resolver_p.h>
++ #include <QtQuick3DSpatialAudio/private/qquick3daudioengine_p.h>
++ #include <QtSpatialAudio/qambientsound.h>
++ #include <QtSpatialAudio/private/qspatialaudiosound_p.h>
++
++ QT_BEGIN_NAMESPACE
++
++ /*!
++ \qmltype AmbientSound
++ \inqmlmodule QtQuick3D.SpatialAudio
++ \ingroup quick3d_spatialaudio
++ \ingroup multimedia_audio_qml
++
++ \brief A stereo overlay sound.
++
++ A AmbientSound represents a position and orientation independent sound.
++ It's commonly used for background sounds (e.g. music) that is supposed to be independent
++ of the listeners position and orientation.
++ */
++
++ QQuick3DAmbientSound::QQuick3DAmbientSound()
++ {
++ m_sound = new QAmbientSound(QQuick3DAudioEngine::getEngine());
++
++ connect(m_sound, &QAmbientSound::sourceChanged, this, &QQuick3DAmbientSound::sourceChanged);
++ connect(m_sound, &QAmbientSound::volumeChanged, this, &QQuick3DAmbientSound::volumeChanged);
++ connect(m_sound, &QAmbientSound::loopsChanged, this, &QQuick3DAmbientSound::loopsChanged);
++ connect(m_sound, &QAmbientSound::autoPlayChanged, this, &QQuick3DAmbientSound::autoPlayChanged);
++
++ auto *soundPrivate = static_cast<QSpatialAudioSoundPrivate *>(QObjectPrivate::get(m_sound));
++ soundPrivate->m_sourceResolver =
++ std::make_unique<QMultimediaPrivate::QQmlContextSourceResolver>(this);
++ }
++
++ QQuick3DAmbientSound::~QQuick3DAmbientSound()
++ {
++ delete m_sound;
++ }
++
++ /*!
++ \qmlproperty url AmbientSound::source
++
++ The source file for the sound to be played.
++ */
++ QUrl QQuick3DAmbientSound::source() const
++ {
++ return m_sound->source();
++ }
++
++ void QQuick3DAmbientSound::setSource(const QUrl& source)
++ {
++ m_sound->setSource(source);
++ }
++
++ /*!
++ \qmlproperty real AmbientSound::volume
++
++ Defines an overall volume for this sound source.
++ */
++ void QQuick3DAmbientSound::setVolume(float volume)
++ {
++ m_sound->setVolume(volume);
++ }
++
++ float QQuick3DAmbientSound::volume() const
++ {
++ return m_sound->volume();
++ }
++
++ /*!
++ \qmlproperty int AmbientSound::loops
++
++ Determines how often the sound is played before the player stops.
++ Set to QAmbienSound::Infinite to loop the current sound forever.
++
++ The default value is \c 1.
++ */
++ int QQuick3DAmbientSound::loops() const
++ {
++ return m_sound->loops();
++ }
++
++ void QQuick3DAmbientSound::setLoops(int loops)
++ {
++ m_sound->setLoops(loops);
++ }
++
++ /*!
++ \qmlproperty bool AmbientSound::autoPlay
++
++ Determines whether the sound should automatically start playing when a source
++ gets specified.
++
++ The default value is \c true.
++ */
++ bool QQuick3DAmbientSound::autoPlay() const
++ {
++ return m_sound->autoPlay();
++ }
++
++ void QQuick3DAmbientSound::setAutoPlay(bool autoPlay)
++ {
++ m_sound->setAutoPlay(autoPlay);
++ }
++
++ /*!
++ \qmlmethod void AmbientSound::play()
++
++ Starts playing back the sound. Does nothing if the sound is already playing.
++ */
++ void QQuick3DAmbientSound::play()
++ {
++ m_sound->play();
++ }
++
++ /*!
++ \qmlmethod void AmbientSound::pause()
++
++ Pauses sound playback at the current position. Calling play() will continue playback.
++ */
++ void QQuick3DAmbientSound::pause()
++ {
++ m_sound->pause();
++ }
++
++ /*!
++ \qmlmethod void AmbientSound::stop()
++
++ Stops sound playback and resets the current position and loop count to 0. Calling play() will
++ begin playback at the beginning of the sound file.
++ */
++ void QQuick3DAmbientSound::stop()
++ {
++ m_sound->stop();
++ }
++
++ QT_END_NAMESPACE