WIP: button to drop 3db

This commit is contained in:
Keith Edmunds 2022-06-16 17:19:58 +01:00
parent ce21322117
commit de3a746806
6 changed files with 59 additions and 228 deletions

View File

@ -62,6 +62,7 @@ class Config(object):
TIMER_MS = 500 TIMER_MS = 500
TRACK_TIME_FORMAT = "%H:%M:%S" TRACK_TIME_FORMAT = "%H:%M:%S"
VOLUME_VLC_DEFAULT = 75 VOLUME_VLC_DEFAULT = 75
VOLUME_VLC_DROP3db = 65
WEB_ZOOM_FACTOR = 1.4 WEB_ZOOM_FACTOR = 1.4

View File

@ -199,13 +199,14 @@ class Window(QMainWindow, Ui_MainWindow):
lambda: self.tabPlaylist.currentWidget().set_selected_as_next()) lambda: self.tabPlaylist.currentWidget().set_selected_as_next())
self.actionSkip_next.triggered.connect(self.play_next) self.actionSkip_next.triggered.connect(self.play_next)
self.actionStop.triggered.connect(self.stop) self.actionStop.triggered.connect(self.stop)
self.btnAddNote.clicked.connect(self.create_note) # self.btnAddNote.clicked.connect(self.create_note)
self.btnDatabase.clicked.connect(self.search_database) # self.btnDatabase.clicked.connect(self.search_database)
self.btnDrop3db.clicked.connect(self.drop3db)
self.btnFade.clicked.connect(self.fade) self.btnFade.clicked.connect(self.fade)
self.btnPlay.clicked.connect(self.play_next) # self.btnPlay.clicked.connect(self.play_next)
self.btnSetNext.clicked.connect( # self.btnSetNext.clicked.connect(
lambda: self.tabPlaylist.currentWidget().set_selected_as_next()) # lambda: self.tabPlaylist.currentWidget().set_selected_as_next())
self.btnSongInfo.clicked.connect(self.song_info_search) # self.btnSongInfo.clicked.connect(self.song_info_search)
self.btnStop.clicked.connect(self.stop) self.btnStop.clicked.connect(self.stop)
self.spnVolume.valueChanged.connect(self.change_volume) self.spnVolume.valueChanged.connect(self.change_volume)
self.tabPlaylist.tabCloseRequested.connect(self.close_tab) self.tabPlaylist.tabCloseRequested.connect(self.close_tab)
@ -316,6 +317,14 @@ class Window(QMainWindow, Ui_MainWindow):
f"{playdate.track.artist},{playdate.track.title}\n" f"{playdate.track.artist},{playdate.track.title}\n"
) )
def drop3db(self) -> None:
"""Drop music level by 3db if button checked"""
if self.btnDrop3db.isChecked():
self.music.set_volume(Config.VOLUME_VLC_DROP3db)
else:
self.music.set_volume(Config.VOLUME_VLC_DEFAULT)
def enable_play_next_controls(self) -> None: def enable_play_next_controls(self) -> None:
""" """
Enable "play next" keyboard controls Enable "play next" keyboard controls
@ -581,6 +590,7 @@ class Window(QMainWindow, Ui_MainWindow):
- If current track on different playlist_tab to last, reset - If current track on different playlist_tab to last, reset
last track playlist_tab colour last track playlist_tab colour
- Set current track playlist_tab colour - Set current track playlist_tab colour
- Restore volume if -3dB active
- Play (new) current track. - Play (new) current track.
- Tell database to record it as played - Tell database to record it as played
- Tell playlist track is now playing - Tell playlist track is now playing
@ -625,6 +635,10 @@ class Window(QMainWindow, Ui_MainWindow):
self.set_tab_colour(self.current_track_playlist_tab, self.set_tab_colour(self.current_track_playlist_tab,
QColor(Config.COLOUR_CURRENT_TAB)) QColor(Config.COLOUR_CURRENT_TAB))
# Restore volume if -3dB active
if self.btnDrop3db.isChecked():
self.btnDrop3db.setChecked(False)
# Play (new) current track # Play (new) current track
self.music.play(self.current_track.path) self.music.play(self.current_track.path)

View File

@ -263,146 +263,12 @@ border: 1px solid rgb(85, 87, 83);</string>
</property> </property>
<layout class="QHBoxLayout" name="horizontalLayout"> <layout class="QHBoxLayout" name="horizontalLayout">
<item> <item>
<widget class="QPushButton" name="btnPlay"> <widget class="QPushButton" name="btnDrop3db">
<property name="text"> <property name="text">
<string> Play</string> <string>-3dB to talk</string>
</property> </property>
<property name="icon"> <property name="checkable">
<iconset resource="icons.qrc"> <bool>true</bool>
<normaloff>:/icons/play</normaloff>:/icons/play</iconset>
</property>
<property name="iconSize">
<size>
<width>30</width>
<height>30</height>
</size>
</property>
</widget>
</item>
<item>
<spacer name="horizontalSpacer">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>68</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
<item>
<widget class="QPushButton" name="btnSongInfo">
<property name="text">
<string>Song info</string>
</property>
<property name="icon">
<iconset resource="icons.qrc">
<normaloff>:/icons/wikipedia</normaloff>:/icons/wikipedia</iconset>
</property>
<property name="iconSize">
<size>
<width>30</width>
<height>30</height>
</size>
</property>
</widget>
</item>
<item>
<spacer name="horizontalSpacer_4">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>70</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
<item>
<widget class="QPushButton" name="btnDatabase">
<property name="text">
<string>Database</string>
</property>
<property name="icon">
<iconset resource="icons.qrc">
<normaloff>:/icons/search_db</normaloff>:/icons/search_db</iconset>
</property>
<property name="iconSize">
<size>
<width>30</width>
<height>30</height>
</size>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="btnAddFile">
<property name="enabled">
<bool>false</bool>
</property>
<property name="text">
<string>Add file</string>
</property>
<property name="icon">
<iconset resource="icons.qrc">
<normaloff>:/icons/open_file</normaloff>:/icons/open_file</iconset>
</property>
<property name="iconSize">
<size>
<width>30</width>
<height>30</height>
</size>
</property>
</widget>
</item>
<item>
<spacer name="horizontalSpacer_2">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>68</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
<item>
<widget class="QPushButton" name="btnAddNote">
<property name="text">
<string>Add note</string>
</property>
<property name="icon">
<iconset resource="icons.qrc">
<normaloff>:/icons/note</normaloff>:/icons/note</iconset>
</property>
<property name="iconSize">
<size>
<width>30</width>
<height>30</height>
</size>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="btnSetNext">
<property name="text">
<string>Set next</string>
</property>
<property name="icon">
<iconset resource="icons.qrc">
<normaloff>:/icons/set_next</normaloff>:/icons/set_next</iconset>
</property>
<property name="iconSize">
<size>
<width>30</width>
<height>30</height>
</size>
</property> </property>
</widget> </widget>
</item> </item>

View File

@ -1,6 +1,6 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
# Form implementation generated from reading ui file 'ui/main_window.ui' # Form implementation generated from reading ui file 'app/ui/main_window.ui'
# #
# Created by: PyQt5 UI code generator 5.15.6 # Created by: PyQt5 UI code generator 5.15.6
# #
@ -139,68 +139,23 @@ class Ui_MainWindow(object):
self.frame_5.setObjectName("frame_5") self.frame_5.setObjectName("frame_5")
self.horizontalLayout = QtWidgets.QHBoxLayout(self.frame_5) self.horizontalLayout = QtWidgets.QHBoxLayout(self.frame_5)
self.horizontalLayout.setObjectName("horizontalLayout") self.horizontalLayout.setObjectName("horizontalLayout")
self.btnPlay = QtWidgets.QPushButton(self.frame_5) self.btnDrop3db = QtWidgets.QPushButton(self.frame_5)
icon1 = QtGui.QIcon() self.btnDrop3db.setCheckable(True)
icon1.addPixmap(QtGui.QPixmap(":/icons/play"), QtGui.QIcon.Normal, QtGui.QIcon.Off) self.btnDrop3db.setObjectName("btnDrop3db")
self.btnPlay.setIcon(icon1) self.horizontalLayout.addWidget(self.btnDrop3db)
self.btnPlay.setIconSize(QtCore.QSize(30, 30)) spacerItem = QtWidgets.QSpacerItem(69, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
self.btnPlay.setObjectName("btnPlay")
self.horizontalLayout.addWidget(self.btnPlay)
spacerItem = QtWidgets.QSpacerItem(68, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
self.horizontalLayout.addItem(spacerItem) self.horizontalLayout.addItem(spacerItem)
self.btnSongInfo = QtWidgets.QPushButton(self.frame_5)
icon2 = QtGui.QIcon()
icon2.addPixmap(QtGui.QPixmap(":/icons/wikipedia"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
self.btnSongInfo.setIcon(icon2)
self.btnSongInfo.setIconSize(QtCore.QSize(30, 30))
self.btnSongInfo.setObjectName("btnSongInfo")
self.horizontalLayout.addWidget(self.btnSongInfo)
spacerItem1 = QtWidgets.QSpacerItem(70, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
self.horizontalLayout.addItem(spacerItem1)
self.btnDatabase = QtWidgets.QPushButton(self.frame_5)
icon3 = QtGui.QIcon()
icon3.addPixmap(QtGui.QPixmap(":/icons/search_db"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
self.btnDatabase.setIcon(icon3)
self.btnDatabase.setIconSize(QtCore.QSize(30, 30))
self.btnDatabase.setObjectName("btnDatabase")
self.horizontalLayout.addWidget(self.btnDatabase)
self.btnAddFile = QtWidgets.QPushButton(self.frame_5)
self.btnAddFile.setEnabled(False)
icon4 = QtGui.QIcon()
icon4.addPixmap(QtGui.QPixmap(":/icons/open_file"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
self.btnAddFile.setIcon(icon4)
self.btnAddFile.setIconSize(QtCore.QSize(30, 30))
self.btnAddFile.setObjectName("btnAddFile")
self.horizontalLayout.addWidget(self.btnAddFile)
spacerItem2 = QtWidgets.QSpacerItem(68, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
self.horizontalLayout.addItem(spacerItem2)
self.btnAddNote = QtWidgets.QPushButton(self.frame_5)
icon5 = QtGui.QIcon()
icon5.addPixmap(QtGui.QPixmap(":/icons/note"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
self.btnAddNote.setIcon(icon5)
self.btnAddNote.setIconSize(QtCore.QSize(30, 30))
self.btnAddNote.setObjectName("btnAddNote")
self.horizontalLayout.addWidget(self.btnAddNote)
self.btnSetNext = QtWidgets.QPushButton(self.frame_5)
icon6 = QtGui.QIcon()
icon6.addPixmap(QtGui.QPixmap(":/icons/set_next"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
self.btnSetNext.setIcon(icon6)
self.btnSetNext.setIconSize(QtCore.QSize(30, 30))
self.btnSetNext.setObjectName("btnSetNext")
self.horizontalLayout.addWidget(self.btnSetNext)
spacerItem3 = QtWidgets.QSpacerItem(69, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
self.horizontalLayout.addItem(spacerItem3)
self.btnStop = QtWidgets.QPushButton(self.frame_5) self.btnStop = QtWidgets.QPushButton(self.frame_5)
icon7 = QtGui.QIcon() icon1 = QtGui.QIcon()
icon7.addPixmap(QtGui.QPixmap(":/icons/stopsign"), QtGui.QIcon.Normal, QtGui.QIcon.Off) icon1.addPixmap(QtGui.QPixmap(":/icons/stopsign"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
self.btnStop.setIcon(icon7) self.btnStop.setIcon(icon1)
self.btnStop.setIconSize(QtCore.QSize(30, 30)) self.btnStop.setIconSize(QtCore.QSize(30, 30))
self.btnStop.setObjectName("btnStop") self.btnStop.setObjectName("btnStop")
self.horizontalLayout.addWidget(self.btnStop) self.horizontalLayout.addWidget(self.btnStop)
self.btnFade = QtWidgets.QPushButton(self.frame_5) self.btnFade = QtWidgets.QPushButton(self.frame_5)
icon8 = QtGui.QIcon() icon2 = QtGui.QIcon()
icon8.addPixmap(QtGui.QPixmap(":/icons/fade"), QtGui.QIcon.Normal, QtGui.QIcon.Off) icon2.addPixmap(QtGui.QPixmap(":/icons/fade"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
self.btnFade.setIcon(icon8) self.btnFade.setIcon(icon2)
self.btnFade.setIconSize(QtCore.QSize(30, 30)) self.btnFade.setIconSize(QtCore.QSize(30, 30))
self.btnFade.setObjectName("btnFade") self.btnFade.setObjectName("btnFade")
self.horizontalLayout.addWidget(self.btnFade) self.horizontalLayout.addWidget(self.btnFade)
@ -367,41 +322,41 @@ class Ui_MainWindow(object):
self.statusbar.setObjectName("statusbar") self.statusbar.setObjectName("statusbar")
MainWindow.setStatusBar(self.statusbar) MainWindow.setStatusBar(self.statusbar)
self.actionPlay_next = QtWidgets.QAction(MainWindow) self.actionPlay_next = QtWidgets.QAction(MainWindow)
icon9 = QtGui.QIcon() icon3 = QtGui.QIcon()
icon9.addPixmap(QtGui.QPixmap("ui/../../../../.designer/backup/icon-play.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off) icon3.addPixmap(QtGui.QPixmap("app/ui/../../../../.designer/backup/icon-play.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
self.actionPlay_next.setIcon(icon9) self.actionPlay_next.setIcon(icon3)
self.actionPlay_next.setObjectName("actionPlay_next") self.actionPlay_next.setObjectName("actionPlay_next")
self.actionSkip_next = QtWidgets.QAction(MainWindow) self.actionSkip_next = QtWidgets.QAction(MainWindow)
icon10 = QtGui.QIcon() icon4 = QtGui.QIcon()
icon10.addPixmap(QtGui.QPixmap(":/icons/next"), QtGui.QIcon.Normal, QtGui.QIcon.Off) icon4.addPixmap(QtGui.QPixmap(":/icons/next"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
self.actionSkip_next.setIcon(icon10) self.actionSkip_next.setIcon(icon4)
self.actionSkip_next.setObjectName("actionSkip_next") self.actionSkip_next.setObjectName("actionSkip_next")
self.actionSearch_database = QtWidgets.QAction(MainWindow) self.actionSearch_database = QtWidgets.QAction(MainWindow)
icon11 = QtGui.QIcon() icon5 = QtGui.QIcon()
icon11.addPixmap(QtGui.QPixmap("ui/../../../../.designer/backup/icon_search_database.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off) icon5.addPixmap(QtGui.QPixmap("app/ui/../../../../.designer/backup/icon_search_database.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
self.actionSearch_database.setIcon(icon11) self.actionSearch_database.setIcon(icon5)
self.actionSearch_database.setObjectName("actionSearch_database") self.actionSearch_database.setObjectName("actionSearch_database")
self.actionAdd_file = QtWidgets.QAction(MainWindow) self.actionAdd_file = QtWidgets.QAction(MainWindow)
icon12 = QtGui.QIcon() icon6 = QtGui.QIcon()
icon12.addPixmap(QtGui.QPixmap("ui/../../../../.designer/backup/icon_open_file.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off) icon6.addPixmap(QtGui.QPixmap("app/ui/../../../../.designer/backup/icon_open_file.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
self.actionAdd_file.setIcon(icon12) self.actionAdd_file.setIcon(icon6)
self.actionAdd_file.setObjectName("actionAdd_file") self.actionAdd_file.setObjectName("actionAdd_file")
self.actionFade = QtWidgets.QAction(MainWindow) self.actionFade = QtWidgets.QAction(MainWindow)
icon13 = QtGui.QIcon() icon7 = QtGui.QIcon()
icon13.addPixmap(QtGui.QPixmap("ui/../../../../.designer/backup/icon-fade.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off) icon7.addPixmap(QtGui.QPixmap("app/ui/../../../../.designer/backup/icon-fade.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
self.actionFade.setIcon(icon13) self.actionFade.setIcon(icon7)
self.actionFade.setObjectName("actionFade") self.actionFade.setObjectName("actionFade")
self.actionStop = QtWidgets.QAction(MainWindow) self.actionStop = QtWidgets.QAction(MainWindow)
icon14 = QtGui.QIcon() icon8 = QtGui.QIcon()
icon14.addPixmap(QtGui.QPixmap(":/icons/stop"), QtGui.QIcon.Normal, QtGui.QIcon.Off) icon8.addPixmap(QtGui.QPixmap(":/icons/stop"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
self.actionStop.setIcon(icon14) self.actionStop.setIcon(icon8)
self.actionStop.setObjectName("actionStop") self.actionStop.setObjectName("actionStop")
self.action_Clear_selection = QtWidgets.QAction(MainWindow) self.action_Clear_selection = QtWidgets.QAction(MainWindow)
self.action_Clear_selection.setObjectName("action_Clear_selection") self.action_Clear_selection.setObjectName("action_Clear_selection")
self.action_Resume_previous = QtWidgets.QAction(MainWindow) self.action_Resume_previous = QtWidgets.QAction(MainWindow)
icon15 = QtGui.QIcon() icon9 = QtGui.QIcon()
icon15.addPixmap(QtGui.QPixmap(":/icons/previous"), QtGui.QIcon.Normal, QtGui.QIcon.Off) icon9.addPixmap(QtGui.QPixmap(":/icons/previous"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
self.action_Resume_previous.setIcon(icon15) self.action_Resume_previous.setIcon(icon9)
self.action_Resume_previous.setObjectName("action_Resume_previous") self.action_Resume_previous.setObjectName("action_Resume_previous")
self.actionE_xit = QtWidgets.QAction(MainWindow) self.actionE_xit = QtWidgets.QAction(MainWindow)
self.actionE_xit.setObjectName("actionE_xit") self.actionE_xit.setObjectName("actionE_xit")
@ -500,12 +455,7 @@ class Ui_MainWindow(object):
self.current_track_2.setText(_translate("MainWindow", "Current track:")) self.current_track_2.setText(_translate("MainWindow", "Current track:"))
self.next_track_2.setText(_translate("MainWindow", "Next track:")) self.next_track_2.setText(_translate("MainWindow", "Next track:"))
self.lblTOD.setText(_translate("MainWindow", "00:00:00")) self.lblTOD.setText(_translate("MainWindow", "00:00:00"))
self.btnPlay.setText(_translate("MainWindow", " Play")) self.btnDrop3db.setText(_translate("MainWindow", "-3dB to talk"))
self.btnSongInfo.setText(_translate("MainWindow", "Song info"))
self.btnDatabase.setText(_translate("MainWindow", "Database"))
self.btnAddFile.setText(_translate("MainWindow", "Add file"))
self.btnAddNote.setText(_translate("MainWindow", "Add note"))
self.btnSetNext.setText(_translate("MainWindow", "Set next"))
self.btnStop.setText(_translate("MainWindow", "Stop")) self.btnStop.setText(_translate("MainWindow", "Stop"))
self.btnFade.setText(_translate("MainWindow", "Fade")) self.btnFade.setText(_translate("MainWindow", "Fade"))
self.label_x.setText(_translate("MainWindow", "Track length:")) self.label_x.setText(_translate("MainWindow", "Track length:"))

BIN
testdata/audiocheck.net_pinknoise.wav vendored Normal file

Binary file not shown.

Binary file not shown.