50 lines
1.4 KiB
QML
50 lines
1.4 KiB
QML
// Copyright (C) 2016 The Qt Company Ltd.
|
|
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
|
|
|
|
import QtQuick
|
|
import QtMultimedia
|
|
|
|
Item {
|
|
id: multiSoundEffect
|
|
property url source
|
|
property int maxInstances: 2
|
|
property var __cachedInstances
|
|
property int __currentIndex: 0
|
|
property real soundVolume: 1.0
|
|
|
|
signal playingChanged(url source, bool playing)
|
|
|
|
Component {
|
|
id: soundEffectComp
|
|
SoundEffect {
|
|
source: multiSoundEffect.source
|
|
onPlayingChanged: multiSoundEffect.playingChanged(source, playing)
|
|
}
|
|
}
|
|
|
|
onSourceChanged: {
|
|
__cachedInstances = []
|
|
__currentIndex = 0
|
|
if (source != Qt.resolvedUrl("")) {
|
|
var i
|
|
for (i = 0; i < maxInstances; i++) {
|
|
var soundEffect = soundEffectComp.createObject(multiSoundEffect)
|
|
if (soundEffect === null)
|
|
return
|
|
__cachedInstances.push(soundEffect)
|
|
}
|
|
}
|
|
}
|
|
|
|
function play() {
|
|
if (__cachedInstances === undefined || __cachedInstances.length === 0)
|
|
return
|
|
if (__cachedInstances[__currentIndex].playing) {
|
|
__cachedInstances[__currentIndex].stop()
|
|
__currentIndex = (__currentIndex + 1) % __cachedInstances.length
|
|
}
|
|
__cachedInstances[__currentIndex].volume = soundVolume
|
|
__cachedInstances[__currentIndex].play()
|
|
}
|
|
}
|