diff --git a/main.py b/main.py
index 6c3719e..2e9788f 100644
--- a/main.py
+++ b/main.py
@@ -185,6 +185,9 @@ class ApplicationWindow(QMainWindow, Ui_MainWindow):
lambda: self.player.setPosition(self.playbackSlider.value())
) # sliderReleased works better than sliderMoved
self.volumeSlider.sliderMoved[int].connect(lambda: self.volume_changed())
+ self.speedSlider.sliderReleased.connect(
+ lambda: self.speed_changed(self.speedSlider.value())
+ )
self.playButton.clicked.connect(self.on_play_clicked) # Click to play/pause
self.previousButton.clicked.connect(self.on_previous_clicked)
self.nextButton.clicked.connect(self.on_next_clicked) # Click to next song
@@ -425,6 +428,10 @@ class ApplicationWindow(QMainWindow, Ui_MainWindow):
except Exception as e:
logging.error(f"main.py volume_changed() | Changing volume error: {e}")
+ def speed_changed(self, rate: int) -> None:
+ """Handles playback speed changes"""
+ self.player.setPlaybackRate(rate / 50)
+
def on_play_clicked(self) -> None:
"""Updates the Play & Pause buttons when clicked"""
if self.player.state() == QMediaPlayer.State.PlayingState:
diff --git a/ui.py b/ui.py
index b9e3067..5b47b14 100644
--- a/ui.py
+++ b/ui.py
@@ -2,7 +2,7 @@
# Form implementation generated from reading ui file 'ui.ui'
#
-# Created by: PyQt5 UI code generator 5.15.9
+# Created by: PyQt5 UI code generator 5.15.10
#
# WARNING: Any manual changes made to this file will be lost when pyuic5 is
# run again. Do not edit this file unless you know what you are doing.
@@ -122,7 +122,7 @@ class Ui_MainWindow(object):
self.hLayoutMusicTable.setStretch(1, 10)
self.verticalLayout.addLayout(self.hLayoutMusicTable)
self.verticalLayout.setStretch(0, 1)
- self.verticalLayout.setStretch(1, 10)
+ self.verticalLayout.setStretch(1, 2)
self.verticalLayout_3.addLayout(self.verticalLayout)
self.hLayoutControls = QtWidgets.QHBoxLayout()
self.hLayoutControls.setSpacing(6)
@@ -156,12 +156,23 @@ class Ui_MainWindow(object):
self.volumeSlider.setObjectName("volumeSlider")
self.hLayoutControls2.addWidget(self.volumeSlider)
self.verticalLayout_3.addLayout(self.hLayoutControls2)
- self.verticalLayout_3.setStretch(0, 10)
- self.verticalLayout_3.setStretch(1, 1)
- self.verticalLayout_3.setStretch(2, 1)
+ self.hLayoutControls3 = QtWidgets.QHBoxLayout()
+ self.hLayoutControls3.setObjectName("hLayoutControls3")
+ self.speedSlider = QtWidgets.QSlider(self.centralwidget)
+ self.speedSlider.setMinimum(0)
+ self.speedSlider.setMaximum(100)
+ self.speedSlider.setSingleStep(1)
+ self.speedSlider.setProperty("value", 50)
+ self.speedSlider.setOrientation(QtCore.Qt.Horizontal)
+ self.speedSlider.setInvertedAppearance(False)
+ self.speedSlider.setTickPosition(QtWidgets.QSlider.NoTicks)
+ self.speedSlider.setObjectName("speedSlider")
+ self.hLayoutControls3.addWidget(self.speedSlider)
+ self.verticalLayout_3.addLayout(self.hLayoutControls3)
+ self.verticalLayout_3.setStretch(0, 20)
MainWindow.setCentralWidget(self.centralwidget)
self.menubar = QtWidgets.QMenuBar(MainWindow)
- self.menubar.setGeometry(QtCore.QRect(0, 0, 1152, 21))
+ self.menubar.setGeometry(QtCore.QRect(0, 0, 1152, 41))
self.menubar.setObjectName("menubar")
self.menuFile = QtWidgets.QMenu(self.menubar)
self.menuFile.setObjectName("menuFile")
diff --git a/ui.ui b/ui.ui
index 59a8a78..9e62a72 100644
--- a/ui.ui
+++ b/ui.ui
@@ -17,9 +17,9 @@
-
+
-
-
+
6
@@ -279,6 +279,35 @@
+ -
+
+
-
+
+
+ 0
+
+
+ 100
+
+
+ 1
+
+
+ 50
+
+
+ Qt::Horizontal
+
+
+ false
+
+
+ QSlider::NoTicks
+
+
+
+
+