summaryrefslogtreecommitdiffstats
path: root/src/imports/audioengine/qdeclarative_audiosample_p.cpp
diff options
context:
space:
mode:
authorLing Hu <ling.hu@nokia.com>2012-01-18 17:17:54 +1000
committerQt by Nokia <qt-info@nokia.com>2012-02-06 05:35:28 +0100
commit809bbc35c67f085e91db9202795cccab0a5ae548 (patch)
tree2449887bd384208bd4e354a95156909444ef93c7 /src/imports/audioengine/qdeclarative_audiosample_p.cpp
parent262f397e3ed6a10ee99518535cdc3ee20ee52688 (diff)
Add AudioEngine with new implementation
Change-Id: I5eebe662ecbce9814ed3e763db56df9be737d11f Reviewed-by: Michael Goddard <michael.goddard@nokia.com>
Diffstat (limited to 'src/imports/audioengine/qdeclarative_audiosample_p.cpp')
-rw-r--r--src/imports/audioengine/qdeclarative_audiosample_p.cpp242
1 files changed, 242 insertions, 0 deletions
diff --git a/src/imports/audioengine/qdeclarative_audiosample_p.cpp b/src/imports/audioengine/qdeclarative_audiosample_p.cpp
new file mode 100644
index 000000000..24a88ae76
--- /dev/null
+++ b/src/imports/audioengine/qdeclarative_audiosample_p.cpp
@@ -0,0 +1,242 @@
+/****************************************************************************
+**
+** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies).
+** Contact: http://www.qt-project.org/
+**
+** This file is part of the plugins of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** GNU Lesser General Public License Usage
+** This file may be used under the terms of the GNU Lesser General Public
+** License version 2.1 as published by the Free Software Foundation and
+** appearing in the file LICENSE.LGPL included in the packaging of this
+** file. Please review the following information to ensure the GNU Lesser
+** General Public License version 2.1 requirements will be met:
+** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights. These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU General
+** Public License version 3.0 as published by the Free Software Foundation
+** and appearing in the file LICENSE.GPL included in the packaging of this
+** file. Please review the following information to ensure the GNU General
+** Public License version 3.0 requirements will be met:
+** http://www.gnu.org/copyleft/gpl.html.
+**
+** Other Usage
+** Alternatively, this file may be used in accordance with the terms and
+** conditions contained in a signed written agreement between you and Nokia.
+**
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include "qdeclarative_audiosample_p.h"
+#include "qdeclarative_audioengine_p.h"
+#include "qdebug.h"
+#include "qsoundbuffer_p.h"
+#include "qaudioengine_p.h"
+
+#define DEBUG_AUDIOENGINE
+
+QT_USE_NAMESPACE
+
+/*!
+ \qmlclass AudioSample QDeclarativeAudioSample
+ \since 5.0
+ \brief The AudioSample element allows you to load audio samples, mostly wav file.
+ \ingroup qml-multimedia
+ \inherits Item
+
+ This element is part of the \bold{QtAudioEngine 1.0} module.
+
+ AudioSample element can be accessed through AudioEngine::samples with its unique name and must
+ be defined inside AudioEngine.
+
+ \qml
+ import QtQuick 2.0
+ import QtAudioEngine 1.0
+
+ Rectangle {
+ color:"white"
+ width: 300
+ height: 500
+
+ AudioEngine {
+ id:audioengine
+
+ AudioSample {
+ name:"explosion"
+ source: "explosion-02.wav"
+ }
+ }
+ }
+ \endqml
+*/
+QDeclarativeAudioSample::QDeclarativeAudioSample(QObject *parent)
+ : QObject(parent)
+ , m_complete(false)
+ , m_streaming(false)
+ , m_preloaded(false)
+ , m_soundBuffer(0)
+{
+}
+
+QDeclarativeAudioSample::~QDeclarativeAudioSample()
+{
+}
+
+void QDeclarativeAudioSample::classBegin()
+{
+ if (!parent() || !parent()->inherits("QDeclarativeAudioEngine")) {
+ qWarning("AudioSample must be defined inside AudioEngine!");
+ return;
+ }
+}
+
+void QDeclarativeAudioSample::componentComplete()
+{
+ if (m_name.isEmpty()) {
+ qWarning("AudioSample must have a name!");
+ return;
+ }
+ m_complete = true;
+}
+
+QUrl QDeclarativeAudioSample::source() const
+{
+ return m_url;
+}
+
+void QDeclarativeAudioSample::setSource(const QUrl& url)
+{
+ if (m_complete) {
+ qWarning("AudioSample: source not changable after initialization.");
+ return;
+ }
+ m_url = url;
+}
+
+bool QDeclarativeAudioSample::isStreaming() const
+{
+ return m_streaming;
+}
+
+/*!
+ \qmlproperty bool AudioSample::preloaded
+
+ This property holds indicates whether this sample needs to be preloaded or not.
+ If true, the audio engine will start loading the sample file immediately when the app started,
+ otherwise the sample will not be loaded untill be used by other element.
+*/
+
+bool QDeclarativeAudioSample::isPreloaded() const
+{
+ return m_preloaded;
+}
+
+/*!
+ \qmlproperty bool AudioSample::isLoaded
+
+ This property holds indicates whether this sample has been loaded into memory or not.
+*/
+bool QDeclarativeAudioSample::isLoaded() const
+{
+ if (!m_soundBuffer)
+ return false;
+ return m_soundBuffer->isReady();
+}
+
+/*!
+ \qmlproperty AudioSample::load()
+
+ Starts loading the sample into memory if not loaded.
+*/
+void QDeclarativeAudioSample::load()
+{
+ if (isLoaded())
+ return;
+ if (!m_soundBuffer) {
+ m_preloaded = true;
+ return;
+ }
+ m_soundBuffer->load();
+}
+
+void QDeclarativeAudioSample::setPreloaded(bool preloaded)
+{
+ if (m_complete) {
+ qWarning("AudioSample: preloaded not changable after initialization.");
+ return;
+ }
+ m_preloaded = preloaded;
+}
+
+void QDeclarativeAudioSample::setStreaming(bool streaming)
+{
+ if (m_complete) {
+ qWarning("AudioSample: streaming not changable after initialization.");
+ return;
+ }
+ m_streaming = streaming;
+}
+
+/*!
+ \qmlproperty string AudioSample::name
+
+ This property holds the name of AudioSample, must be unique among all samples and only
+ defined once.
+*/
+QString QDeclarativeAudioSample::name() const
+{
+ return m_name;
+}
+
+void QDeclarativeAudioSample::setName(const QString& name)
+{
+ if (m_complete) {
+ qWarning("AudioSample: name not changable after initialization.");
+ return;
+ }
+ m_name = name;
+}
+
+void QDeclarativeAudioSample::init()
+{
+ if (m_streaming) {
+ //TODO
+
+ } else {
+ m_soundBuffer =
+ qobject_cast<QDeclarativeAudioEngine*>(parent())->engine()->getStaticSoundBuffer(m_url);
+ if (m_soundBuffer->isReady()) {
+ emit loadedChanged();
+ } else {
+ connect(m_soundBuffer, SIGNAL(ready()), this, SIGNAL(loadedChanged()));
+ }
+ if (m_preloaded) {
+ m_soundBuffer->load();
+ }
+ }
+}
+
+QSoundBuffer* QDeclarativeAudioSample::soundBuffer() const
+{
+ return m_soundBuffer;
+}
+
+/*!
+ \qmlsignal AudioSample::onLoadedChanged()
+
+ This handler is called when \l loaded is changed
+*/
+
+