Artemis 4 RC1
This commit is contained in:
156
ui/components/AudioPlayer.qml
Normal file
156
ui/components/AudioPlayer.qml
Normal file
@@ -0,0 +1,156 @@
|
||||
import QtQuick
|
||||
import QtQuick.Window
|
||||
import QtQuick.Layouts
|
||||
import QtQuick.Controls
|
||||
import QtQuick.Controls.Material
|
||||
import QtMultimedia
|
||||
|
||||
|
||||
Item {
|
||||
width: 200
|
||||
height: 80
|
||||
|
||||
property bool loop: false
|
||||
|
||||
function loadSound(audio_path) {
|
||||
player.stop()
|
||||
player.source = audio_path
|
||||
buttonPlay.icon.color = Material.accent
|
||||
buttonPlay.enabled = true
|
||||
buttonLoop.enabled = true
|
||||
}
|
||||
|
||||
function playSound() {
|
||||
buttonPlay.icon.color = Material.foreground
|
||||
buttonPause.icon.color = Material.accent
|
||||
buttonStop.icon.color = Material.accent
|
||||
buttonPlay.enabled = false
|
||||
buttonPause.enabled = true
|
||||
buttonStop.enabled = true
|
||||
buttonLoop.enabled = true
|
||||
playerPosition.enabled = player.seekable
|
||||
player.play()
|
||||
}
|
||||
|
||||
function pauseSound() {
|
||||
buttonPlay.icon.color = Material.accent
|
||||
buttonPause.icon.color = Material.foreground
|
||||
buttonPlay.enabled = true
|
||||
buttonPause.enabled = false
|
||||
player.pause()
|
||||
}
|
||||
|
||||
function stopSound() {
|
||||
buttonPlay.icon.color = Material.accent
|
||||
buttonPause.icon.color = Material.foreground
|
||||
buttonStop.icon.color = Material.foreground
|
||||
buttonLoop.icon.color = Material.foreground
|
||||
buttonPlay.enabled = true
|
||||
buttonPause.enabled = false
|
||||
buttonStop.enabled = false
|
||||
buttonLoop.enabled = false
|
||||
loop = false
|
||||
player.stop()
|
||||
}
|
||||
|
||||
function resetPlayer() {
|
||||
player.stop()
|
||||
player.source = ''
|
||||
loop = false
|
||||
buttonPlay.icon.color = Material.foreground
|
||||
buttonPause.icon.color = Material.foreground
|
||||
buttonStop.icon.color = Material.foreground
|
||||
buttonLoop.icon.color = Material.foreground
|
||||
buttonPlay.enabled = false
|
||||
buttonPause.enabled = false
|
||||
buttonStop.enabled = false
|
||||
buttonLoop.enabled = false
|
||||
playerPosition.enabled = false
|
||||
}
|
||||
|
||||
ColumnLayout {
|
||||
RowLayout {
|
||||
spacing: 0
|
||||
Layout.alignment: Qt.AlignHCenter | Qt.AlignVCenter
|
||||
|
||||
RoundButton {
|
||||
id: buttonPlay
|
||||
icon.color: Material.foreground
|
||||
icon.source: "qrc:/images/icons/player_play.svg"
|
||||
display: AbstractButton.IconOnly
|
||||
enabled: false
|
||||
flat: true
|
||||
onClicked: playSound()
|
||||
}
|
||||
|
||||
RoundButton {
|
||||
id: buttonPause
|
||||
icon.color: Material.foreground
|
||||
icon.source: "qrc:/images/icons/player_pause.svg"
|
||||
display: AbstractButton.IconOnly
|
||||
enabled: false
|
||||
flat: true
|
||||
onClicked: pauseSound()
|
||||
}
|
||||
|
||||
RoundButton {
|
||||
id: buttonStop
|
||||
icon.color: Material.foreground
|
||||
icon.source: "qrc:/images/icons/player_stop.svg"
|
||||
display: AbstractButton.IconOnly
|
||||
enabled: false
|
||||
flat: true
|
||||
onClicked: stopSound()
|
||||
}
|
||||
|
||||
RoundButton {
|
||||
id: buttonLoop
|
||||
icon.color: Material.foreground
|
||||
icon.source: "qrc:/images/icons/player_loop.svg"
|
||||
display: AbstractButton.IconOnly
|
||||
enabled: false
|
||||
flat: true
|
||||
onClicked: {
|
||||
if (loop) {
|
||||
loop = false
|
||||
icon.color = Material.foreground
|
||||
} else {
|
||||
loop = true
|
||||
icon.color = Material.accent
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Slider {
|
||||
id: playerPosition
|
||||
Layout.alignment: Qt.AlignHCenter | Qt.AlignVCenter
|
||||
Layout.preferredHeight: 20
|
||||
enabled: player.seekable
|
||||
value: player.duration > 0 ? player.position / player.duration : 0
|
||||
onMoved: {
|
||||
player.position = player.duration * playerPosition.position
|
||||
}
|
||||
}
|
||||
|
||||
MediaPlayer {
|
||||
id: player
|
||||
audioOutput: audioOutput
|
||||
|
||||
onPlaybackStateChanged: {
|
||||
if (player.playbackState === MediaPlayer.StoppedState) {
|
||||
if (loop) {
|
||||
playSound()
|
||||
} else {
|
||||
stopSound()
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
AudioOutput {
|
||||
id: audioOutput
|
||||
//volume: volumeSlider.value
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user