summaryrefslogtreecommitdiffstats
path: root/tests/manual/audio-visualizer-qml/Visualizer.qml
diff options
context:
space:
mode:
Diffstat (limited to 'tests/manual/audio-visualizer-qml/Visualizer.qml')
-rw-r--r--tests/manual/audio-visualizer-qml/Visualizer.qml260
1 files changed, 260 insertions, 0 deletions
diff --git a/tests/manual/audio-visualizer-qml/Visualizer.qml b/tests/manual/audio-visualizer-qml/Visualizer.qml
new file mode 100644
index 000000000..1846d3bbc
--- /dev/null
+++ b/tests/manual/audio-visualizer-qml/Visualizer.qml
@@ -0,0 +1,260 @@
+// Copyright (C) 2017 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
+
+import Qt3D.Core 2.0
+import Qt3D.Render 2.0
+import Qt3D.Extras 2.0
+import QtQuick 2.2 as QQ2
+
+Entity {
+ id: sceneRoot
+ property int barRotationTimeMs: 1
+ property int numberOfBars: 1
+ property string animationState
+ property real titleStartAngle: 95
+ property real titleStopAngle: 5
+ property bool started: false
+
+ onAnimationStateChanged: {
+ if (animationState == "playing") {
+ mediaPlayer.play()
+ if (progressTransformAnimation.paused)
+ progressTransformAnimation.resume()
+ else
+ progressTransformAnimation.start()
+ } else if (animationState == "paused") {
+ mediaPlayer.pause()
+ if (progressTransformAnimation.running)
+ progressTransformAnimation.pause()
+ } else {
+ mediaPlayer.stop()
+ progressTransformAnimation.stop()
+ progressTransform.progressAngle = progressTransform.defaultStartAngle
+ }
+ }
+
+ QQ2.Item {
+ id: stateItem
+
+ state: animationState
+ states: [
+ QQ2.State {
+ name: "playing"
+ QQ2.PropertyChanges {
+ target: titlePrism
+ titleAngle: titleStopAngle
+ }
+ },
+ QQ2.State {
+ name: "paused"
+ QQ2.PropertyChanges {
+ target: titlePrism
+ titleAngle: titleStopAngle
+ }
+ },
+ QQ2.State {
+ name: "stopped"
+ QQ2.PropertyChanges {
+ target: titlePrism
+ titleAngle: titleStartAngle
+ }
+ }
+ ]
+
+ transitions: QQ2.Transition {
+ QQ2.NumberAnimation {
+ property: "titleAngle"
+ duration: 2000
+ running: false
+ }
+ }
+ }
+
+ function startVisualization() {
+ progressTransformAnimation.duration = mediaPlayer.duration
+ mainview.state = "playing"
+ progressTransformAnimation.start()
+ started = true
+ }
+
+ //![0]
+ Camera {
+ id: camera
+ projectionType: CameraLens.PerspectiveProjection
+ fieldOfView: 45
+ aspectRatio: 1820 / 1080
+ nearPlane: 0.1
+ farPlane: 1000.0
+ position: Qt.vector3d(0.014, 0.956, 2.178)
+ upVector: Qt.vector3d(0.0, 1.0, 0.0)
+ viewCenter: Qt.vector3d(0.0, 0.7, 0.0)
+ }
+ //![0]
+
+ Entity {
+ components: [
+ DirectionalLight {
+ intensity: 0.9
+ worldDirection: Qt.vector3d(0, 0.6, -1)
+ }
+ ]
+ }
+
+ RenderSettings {
+ id: external_forward_renderer
+ activeFrameGraph: ForwardRenderer {
+ camera: camera
+ clearColor: "transparent"
+ }
+ }
+
+ components: [external_forward_renderer]
+
+ //![1]
+ // Bars
+ CuboidMesh {
+ id: barMesh
+ xExtent: 0.1
+ yExtent: 0.1
+ zExtent: 0.1
+ }
+
+ NodeInstantiator {
+ id: collection
+ property int maxCount: parent.numberOfBars
+ model: maxCount
+
+ delegate: BarEntity {
+ id: cubicEntity
+ entityMesh: barMesh
+ rotationTimeMs: sceneRoot.barRotationTimeMs
+ entityIndex: index
+ entityCount: sceneRoot.numberOfBars
+ entityAnimationsState: animationState
+ magnitude: 0
+ }
+ }
+ //![1]
+
+ // TitlePrism
+ Entity {
+ id: titlePrism
+ property real titleAngle: titleStartAngle
+
+ Entity {
+ id: titlePlane
+
+ PlaneMesh {
+ id: titlePlaneMesh
+ width: 550
+ height: 100
+ }
+
+ Transform {
+ id: titlePlaneTransform
+ scale: 0.003
+ translation: Qt.vector3d(0, 0.11, 0)
+ }
+
+ NormalDiffuseMapAlphaMaterial {
+ id: titlePlaneMaterial
+ diffuse: TextureLoader { source: "qrc:/images/demotitle.png" }
+ normal: TextureLoader { source: "qrc:/images/normalmap.png" }
+ shininess: 1.0
+ }
+
+ components: [titlePlaneMesh, titlePlaneMaterial, titlePlaneTransform]
+ }
+
+ // Song title
+ Entity {
+ id: songTitlePlane
+
+ PlaneMesh {
+ id: songPlaneMesh
+ width: 550
+ height: 100
+ }
+
+ Transform {
+ id: songPlaneTransform
+ scale: 0.003
+ rotationX: 90
+ translation: Qt.vector3d(0, -0.03, 0.13)
+ }
+
+ property Material songPlaneMaterial: NormalDiffuseMapAlphaMaterial {
+ diffuse: TextureLoader { source: "qrc:/images/songtitle.png" }
+ normal: TextureLoader { source: "qrc:/images/normalmap.png" }
+ shininess: 1.0
+ }
+
+ components: [songPlaneMesh, songPlaneMaterial, songPlaneTransform]
+ }
+
+ property Transform titlePrismPlaneTransform: Transform {
+ matrix: {
+ var m = Qt.matrix4x4()
+ m.translate(Qt.vector3d(-0.5, 1.3, -0.4))
+ m.rotate(titlePrism.titleAngle, Qt.vector3d(1, 0, 0))
+ return m;
+ }
+ }
+
+ components: [titlePlane, songTitlePlane, titlePrismPlaneTransform]
+ }
+
+ // Circle to create the reflection effect
+ Mesh {
+ id: circleMesh
+ source: "qrc:/meshes/circle.obj"
+ }
+
+ Entity {
+ id: circleEntity
+ property Material circleMaterial: PhongAlphaMaterial {
+ alpha: 0.4
+ ambient: "black"
+ diffuse: "black"
+ specular: "black"
+ shininess: 10000
+ }
+
+ components: [circleMesh, circleMaterial]
+ }
+
+ //![2]
+ // Progress
+ Mesh {
+ id: progressMesh
+ source: "qrc:/meshes/progressbar.obj"
+ }
+
+ Transform {
+ id: progressTransform
+ property real defaultStartAngle: -90
+ property real progressAngle: defaultStartAngle
+ rotationY: progressAngle
+ }
+
+ Entity {
+ property Material progressMaterial: PhongMaterial {
+ ambient: "#80C342"
+ diffuse: "black"
+ }
+
+ components: [progressMesh, progressMaterial, progressTransform]
+ }
+ //![2]
+
+ QQ2.NumberAnimation {
+ id: progressTransformAnimation
+ target: progressTransform
+ property: "progressAngle"
+ duration: 0
+ running: false
+ from: progressTransform.defaultStartAngle
+ to: -270
+ onStopped: if (animationState != "stopped") animationState = "stopped"
+ }
+}