playback speed slider

This commit is contained in:
billypom on debian 2024-10-01 21:21:27 -04:00
parent 218bdd3c32
commit 44b29b0566
3 changed files with 58 additions and 11 deletions

View File

@ -185,6 +185,9 @@ class ApplicationWindow(QMainWindow, Ui_MainWindow):
lambda: self.player.setPosition(self.playbackSlider.value()) lambda: self.player.setPosition(self.playbackSlider.value())
) # sliderReleased works better than sliderMoved ) # sliderReleased works better than sliderMoved
self.volumeSlider.sliderMoved[int].connect(lambda: self.volume_changed()) 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.playButton.clicked.connect(self.on_play_clicked) # Click to play/pause
self.previousButton.clicked.connect(self.on_previous_clicked) self.previousButton.clicked.connect(self.on_previous_clicked)
self.nextButton.clicked.connect(self.on_next_clicked) # Click to next song 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: except Exception as e:
logging.error(f"main.py volume_changed() | Changing volume error: {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: def on_play_clicked(self) -> None:
"""Updates the Play & Pause buttons when clicked""" """Updates the Play & Pause buttons when clicked"""
if self.player.state() == QMediaPlayer.State.PlayingState: if self.player.state() == QMediaPlayer.State.PlayingState:

23
ui.py
View File

@ -2,7 +2,7 @@
# Form implementation generated from reading ui file 'ui.ui' # 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 # 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. # 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.hLayoutMusicTable.setStretch(1, 10)
self.verticalLayout.addLayout(self.hLayoutMusicTable) self.verticalLayout.addLayout(self.hLayoutMusicTable)
self.verticalLayout.setStretch(0, 1) self.verticalLayout.setStretch(0, 1)
self.verticalLayout.setStretch(1, 10) self.verticalLayout.setStretch(1, 2)
self.verticalLayout_3.addLayout(self.verticalLayout) self.verticalLayout_3.addLayout(self.verticalLayout)
self.hLayoutControls = QtWidgets.QHBoxLayout() self.hLayoutControls = QtWidgets.QHBoxLayout()
self.hLayoutControls.setSpacing(6) self.hLayoutControls.setSpacing(6)
@ -156,12 +156,23 @@ class Ui_MainWindow(object):
self.volumeSlider.setObjectName("volumeSlider") self.volumeSlider.setObjectName("volumeSlider")
self.hLayoutControls2.addWidget(self.volumeSlider) self.hLayoutControls2.addWidget(self.volumeSlider)
self.verticalLayout_3.addLayout(self.hLayoutControls2) self.verticalLayout_3.addLayout(self.hLayoutControls2)
self.verticalLayout_3.setStretch(0, 10) self.hLayoutControls3 = QtWidgets.QHBoxLayout()
self.verticalLayout_3.setStretch(1, 1) self.hLayoutControls3.setObjectName("hLayoutControls3")
self.verticalLayout_3.setStretch(2, 1) 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) MainWindow.setCentralWidget(self.centralwidget)
self.menubar = QtWidgets.QMenuBar(MainWindow) 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.menubar.setObjectName("menubar")
self.menuFile = QtWidgets.QMenu(self.menubar) self.menuFile = QtWidgets.QMenu(self.menubar)
self.menuFile.setObjectName("menuFile") self.menuFile.setObjectName("menuFile")

35
ui.ui
View File

@ -17,9 +17,9 @@
<string/> <string/>
</property> </property>
<widget class="QWidget" name="centralwidget"> <widget class="QWidget" name="centralwidget">
<layout class="QVBoxLayout" name="verticalLayout_3" stretch="10,1,1"> <layout class="QVBoxLayout" name="verticalLayout_3" stretch="20,0,0,0">
<item> <item>
<layout class="QVBoxLayout" name="verticalLayout" stretch="1,10"> <layout class="QVBoxLayout" name="verticalLayout" stretch="1,2">
<property name="spacing"> <property name="spacing">
<number>6</number> <number>6</number>
</property> </property>
@ -279,6 +279,35 @@
</item> </item>
</layout> </layout>
</item> </item>
<item>
<layout class="QHBoxLayout" name="hLayoutControls3">
<item>
<widget class="QSlider" name="speedSlider">
<property name="minimum">
<number>0</number>
</property>
<property name="maximum">
<number>100</number>
</property>
<property name="singleStep">
<number>1</number>
</property>
<property name="value">
<number>50</number>
</property>
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="invertedAppearance">
<bool>false</bool>
</property>
<property name="tickPosition">
<enum>QSlider::NoTicks</enum>
</property>
</widget>
</item>
</layout>
</item>
</layout> </layout>
</widget> </widget>
<widget class="QMenuBar" name="menubar"> <widget class="QMenuBar" name="menubar">
@ -287,7 +316,7 @@
<x>0</x> <x>0</x>
<y>0</y> <y>0</y>
<width>1152</width> <width>1152</width>
<height>21</height> <height>41</height>
</rect> </rect>
</property> </property>
<widget class="QMenu" name="menuFile"> <widget class="QMenu" name="menuFile">