AudioEngine Example▲
Sélectionnez
/****************************************************************************
**
** Copyright (C) 2017 The Qt Company Ltd.
** Contact: https://www.qt.io/licensing/
**
** This file is part of the examples of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:BSD$
** Commercial License Usage
** Licensees holding valid commercial Qt licenses may use this file in
** accordance with the commercial license agreement provided with the
** Software or, alternatively, in accordance with the terms contained in
** a written agreement between you and The Qt Company. For licensing terms
** and conditions see https://www.qt.io/terms-conditions. For further
** information use the contact form at https://www.qt.io/contact-us.
**
** BSD License Usage
** Alternatively, you may use this file under the terms of the BSD license
** as follows:
**
** "Redistribution and use in source and binary forms, with or without
** modification, are permitted provided that the following conditions are
** met:
** * Redistributions of source code must retain the above copyright
** notice, this list of conditions and the following disclaimer.
** * Redistributions in binary form must reproduce the above copyright
** notice, this list of conditions and the following disclaimer in
** the documentation and/or other materials provided with the
** distribution.
** * Neither the name of The Qt Company Ltd nor the names of its
** contributors may be used to endorse or promote products derived
** from this software without specific prior written permission.
**
**
** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
**
** $QT_END_LICENSE$
**
****************************************************************************/
import
QtAudioEngine 1.0
import
QtQuick 2.0
import
"content"
Rectangle
{
color
:
"white"
id
:
root
width
:
300
height
:
500
property
int
radius
:
100
property
real
twoPi :
Math.PI +
Math.PI
MyAudioEngine {
id
:
audioEngine
listener.position :
Qt.vector3d(observer.x, observer.y, 0
);
}
Item
{
id
:
circle
x
:
root.width /
2
y
:
root.height /
2
property
real
percent
:
0
SequentialAnimation
on
percent {
id
:
circleAnim1
loops
:
Animation.Infinite
running
:
true
NumberAnimation
{
duration
:
12000
from
:
0
to
:
1
}
}
}
Item
{
id
:
holder
x
:
circle.x -
Math.sin(circle.percent *
root.twoPi) *
root.radius -
50
y
:
circle.y +
Math.cos(circle.percent *
root.twoPi) *
root.radius +
50
}
Rectangle
{
color
:
"green"
id
:
observer
width
:
16
height
:
16
x
:
circle.x -
width
/
2
y
:
circle.y -
height
/
2
}
Rectangle
{
color
:
"red"
id
:
starship
width
:
32
height
:
32
x
:
holder.x -
width
/
2
y
:
holder.y -
height
/
2
}
MouseArea
{
anchors.fill
:
parent
onClicked
: {
audioEngine.
sounds[
"effects"
]
.play
(
Qt.vector3d
(
holder.
x,
holder.
y,
0
));
}
}
SoundInstance
{
id
:
shipSound
engine
:
audioEngine
sound
:
"shipengine"
position
:
Qt.vector3d(holder.x, holder.y, 0
)
direction
: {
var a = (
starship.
rotation /
360
) *
root.
twoPi;
return Qt.vector3d
(
Math.sin
(
a),
-
Math.cos
(
a),
0
);
}
velocity
: {
var speed =
root.
twoPi *
root.
radius /
4
;
return shipSound.
direction.times
(
speed);
}
Component.onCompleted
:
shipSound.play()
}
//Category Volume Control
Rectangle
{
property
variant volumeCtrl
:
audioEngine.categories["sfx"
];
id
:
volumeBar
x
:
10
y
:
10
width
:
280
height
:
22
color
:
"darkgray"
Rectangle
{
id
:
volumeTracker
x
:
0
y
:
0
width
:
volumeBar.volumeCtrl.volume *
parent.width;
height
:
parent.height
color
:
"lightgreen"
}
Text
{
text
:
" volume:"
+
Math.round(volumeBar.volumeCtrl.volume *
100
) +
"%"
;
font.pointSize
:
16
;
font.italic
:
true
;
color
:
"black"
anchors.fill
:
parent
}
MouseArea
{
anchors.fill
:
parent
property
bool
m
:
false
onPressed
: {
m =
true;
updateVolume
(
mouse);
}
onReleased
: {
m =
false;
}
onPositionChanged
: {
if (
m) {
updateVolume
(
mouse);
}
}
function
updateVolume(mouse) {
volumeBar.
volumeCtrl.
volume =
Math.min
(
1
,
Math.max
(
0
,
mouse.
x / (
volumeBar.
width -
1
)));
}
}
}
//Information display
Item
{
x
:
10
y
:
32
Text
{
text
:
" [live instances] = "
+
audioEngine.liveInstances;
font.pointSize
:
14
;
font.italic
:
true
;
color
:
"black"
anchors.fill
:
parent
}
}
Item
{
x
:
10
y
:
60
Text
{
text
:
" [loading]="
+
(audioEngine.loading ? "true"
:
"false"
);
font.pointSize
:
16
;
font.italic
:
true
;
color
:
"black"
anchors.fill
:
parent
}
}
}