diff --git a/app/config.py b/app/config.py index 8b1333d..8c2fab6 100644 --- a/app/config.py +++ b/app/config.py @@ -62,6 +62,7 @@ class Config(object): TIMER_MS = 500 TRACK_TIME_FORMAT = "%H:%M:%S" VOLUME_VLC_DEFAULT = 75 + VOLUME_VLC_DROP3db = 65 WEB_ZOOM_FACTOR = 1.4 diff --git a/app/musicmuster.py b/app/musicmuster.py index 837ae8a..a43c296 100755 --- a/app/musicmuster.py +++ b/app/musicmuster.py @@ -199,13 +199,14 @@ class Window(QMainWindow, Ui_MainWindow): lambda: self.tabPlaylist.currentWidget().set_selected_as_next()) self.actionSkip_next.triggered.connect(self.play_next) self.actionStop.triggered.connect(self.stop) - self.btnAddNote.clicked.connect(self.create_note) - self.btnDatabase.clicked.connect(self.search_database) + # self.btnAddNote.clicked.connect(self.create_note) + # self.btnDatabase.clicked.connect(self.search_database) + self.btnDrop3db.clicked.connect(self.drop3db) self.btnFade.clicked.connect(self.fade) - self.btnPlay.clicked.connect(self.play_next) - self.btnSetNext.clicked.connect( - lambda: self.tabPlaylist.currentWidget().set_selected_as_next()) - self.btnSongInfo.clicked.connect(self.song_info_search) + # self.btnPlay.clicked.connect(self.play_next) + # self.btnSetNext.clicked.connect( + # lambda: self.tabPlaylist.currentWidget().set_selected_as_next()) + # self.btnSongInfo.clicked.connect(self.song_info_search) self.btnStop.clicked.connect(self.stop) self.spnVolume.valueChanged.connect(self.change_volume) self.tabPlaylist.tabCloseRequested.connect(self.close_tab) @@ -316,6 +317,14 @@ class Window(QMainWindow, Ui_MainWindow): 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: """ Enable "play next" keyboard controls @@ -581,6 +590,7 @@ class Window(QMainWindow, Ui_MainWindow): - If current track on different playlist_tab to last, reset last track playlist_tab colour - Set current track playlist_tab colour + - Restore volume if -3dB active - Play (new) current track. - Tell database to record it as played - Tell playlist track is now playing @@ -625,6 +635,10 @@ class Window(QMainWindow, Ui_MainWindow): self.set_tab_colour(self.current_track_playlist_tab, QColor(Config.COLOUR_CURRENT_TAB)) + # Restore volume if -3dB active + if self.btnDrop3db.isChecked(): + self.btnDrop3db.setChecked(False) + # Play (new) current track self.music.play(self.current_track.path) diff --git a/app/ui/main_window.ui b/app/ui/main_window.ui index c115c70..19e33d2 100644 --- a/app/ui/main_window.ui +++ b/app/ui/main_window.ui @@ -263,146 +263,12 @@ border: 1px solid rgb(85, 87, 83); - + - Play + -3dB to talk - - - :/icons/play:/icons/play - - - - 30 - 30 - - - - - - - - Qt::Horizontal - - - - 68 - 20 - - - - - - - - Song info - - - - :/icons/wikipedia:/icons/wikipedia - - - - 30 - 30 - - - - - - - - Qt::Horizontal - - - - 70 - 20 - - - - - - - - Database - - - - :/icons/search_db:/icons/search_db - - - - 30 - 30 - - - - - - - - false - - - Add file - - - - :/icons/open_file:/icons/open_file - - - - 30 - 30 - - - - - - - - Qt::Horizontal - - - - 68 - 20 - - - - - - - - Add note - - - - :/icons/note:/icons/note - - - - 30 - 30 - - - - - - - - Set next - - - - :/icons/set_next:/icons/set_next - - - - 30 - 30 - + + true diff --git a/app/ui/main_window_ui.py b/app/ui/main_window_ui.py index bac0ec4..412de1f 100644 --- a/app/ui/main_window_ui.py +++ b/app/ui/main_window_ui.py @@ -1,6 +1,6 @@ # -*- 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 # @@ -139,68 +139,23 @@ class Ui_MainWindow(object): self.frame_5.setObjectName("frame_5") self.horizontalLayout = QtWidgets.QHBoxLayout(self.frame_5) self.horizontalLayout.setObjectName("horizontalLayout") - self.btnPlay = QtWidgets.QPushButton(self.frame_5) - icon1 = QtGui.QIcon() - icon1.addPixmap(QtGui.QPixmap(":/icons/play"), QtGui.QIcon.Normal, QtGui.QIcon.Off) - self.btnPlay.setIcon(icon1) - self.btnPlay.setIconSize(QtCore.QSize(30, 30)) - self.btnPlay.setObjectName("btnPlay") - self.horizontalLayout.addWidget(self.btnPlay) - spacerItem = QtWidgets.QSpacerItem(68, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum) + self.btnDrop3db = QtWidgets.QPushButton(self.frame_5) + self.btnDrop3db.setCheckable(True) + self.btnDrop3db.setObjectName("btnDrop3db") + self.horizontalLayout.addWidget(self.btnDrop3db) + spacerItem = QtWidgets.QSpacerItem(69, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum) 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) - icon7 = QtGui.QIcon() - icon7.addPixmap(QtGui.QPixmap(":/icons/stopsign"), QtGui.QIcon.Normal, QtGui.QIcon.Off) - self.btnStop.setIcon(icon7) + icon1 = QtGui.QIcon() + icon1.addPixmap(QtGui.QPixmap(":/icons/stopsign"), QtGui.QIcon.Normal, QtGui.QIcon.Off) + self.btnStop.setIcon(icon1) self.btnStop.setIconSize(QtCore.QSize(30, 30)) self.btnStop.setObjectName("btnStop") self.horizontalLayout.addWidget(self.btnStop) self.btnFade = QtWidgets.QPushButton(self.frame_5) - icon8 = QtGui.QIcon() - icon8.addPixmap(QtGui.QPixmap(":/icons/fade"), QtGui.QIcon.Normal, QtGui.QIcon.Off) - self.btnFade.setIcon(icon8) + icon2 = QtGui.QIcon() + icon2.addPixmap(QtGui.QPixmap(":/icons/fade"), QtGui.QIcon.Normal, QtGui.QIcon.Off) + self.btnFade.setIcon(icon2) self.btnFade.setIconSize(QtCore.QSize(30, 30)) self.btnFade.setObjectName("btnFade") self.horizontalLayout.addWidget(self.btnFade) @@ -367,41 +322,41 @@ class Ui_MainWindow(object): self.statusbar.setObjectName("statusbar") MainWindow.setStatusBar(self.statusbar) self.actionPlay_next = QtWidgets.QAction(MainWindow) - icon9 = QtGui.QIcon() - icon9.addPixmap(QtGui.QPixmap("ui/../../../../.designer/backup/icon-play.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off) - self.actionPlay_next.setIcon(icon9) + icon3 = QtGui.QIcon() + icon3.addPixmap(QtGui.QPixmap("app/ui/../../../../.designer/backup/icon-play.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off) + self.actionPlay_next.setIcon(icon3) self.actionPlay_next.setObjectName("actionPlay_next") self.actionSkip_next = QtWidgets.QAction(MainWindow) - icon10 = QtGui.QIcon() - icon10.addPixmap(QtGui.QPixmap(":/icons/next"), QtGui.QIcon.Normal, QtGui.QIcon.Off) - self.actionSkip_next.setIcon(icon10) + icon4 = QtGui.QIcon() + icon4.addPixmap(QtGui.QPixmap(":/icons/next"), QtGui.QIcon.Normal, QtGui.QIcon.Off) + self.actionSkip_next.setIcon(icon4) self.actionSkip_next.setObjectName("actionSkip_next") self.actionSearch_database = QtWidgets.QAction(MainWindow) - icon11 = QtGui.QIcon() - icon11.addPixmap(QtGui.QPixmap("ui/../../../../.designer/backup/icon_search_database.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off) - self.actionSearch_database.setIcon(icon11) + icon5 = QtGui.QIcon() + icon5.addPixmap(QtGui.QPixmap("app/ui/../../../../.designer/backup/icon_search_database.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off) + self.actionSearch_database.setIcon(icon5) self.actionSearch_database.setObjectName("actionSearch_database") self.actionAdd_file = QtWidgets.QAction(MainWindow) - icon12 = QtGui.QIcon() - icon12.addPixmap(QtGui.QPixmap("ui/../../../../.designer/backup/icon_open_file.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off) - self.actionAdd_file.setIcon(icon12) + icon6 = QtGui.QIcon() + icon6.addPixmap(QtGui.QPixmap("app/ui/../../../../.designer/backup/icon_open_file.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off) + self.actionAdd_file.setIcon(icon6) self.actionAdd_file.setObjectName("actionAdd_file") self.actionFade = QtWidgets.QAction(MainWindow) - icon13 = QtGui.QIcon() - icon13.addPixmap(QtGui.QPixmap("ui/../../../../.designer/backup/icon-fade.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off) - self.actionFade.setIcon(icon13) + icon7 = QtGui.QIcon() + icon7.addPixmap(QtGui.QPixmap("app/ui/../../../../.designer/backup/icon-fade.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off) + self.actionFade.setIcon(icon7) self.actionFade.setObjectName("actionFade") self.actionStop = QtWidgets.QAction(MainWindow) - icon14 = QtGui.QIcon() - icon14.addPixmap(QtGui.QPixmap(":/icons/stop"), QtGui.QIcon.Normal, QtGui.QIcon.Off) - self.actionStop.setIcon(icon14) + icon8 = QtGui.QIcon() + icon8.addPixmap(QtGui.QPixmap(":/icons/stop"), QtGui.QIcon.Normal, QtGui.QIcon.Off) + self.actionStop.setIcon(icon8) self.actionStop.setObjectName("actionStop") self.action_Clear_selection = QtWidgets.QAction(MainWindow) self.action_Clear_selection.setObjectName("action_Clear_selection") self.action_Resume_previous = QtWidgets.QAction(MainWindow) - icon15 = QtGui.QIcon() - icon15.addPixmap(QtGui.QPixmap(":/icons/previous"), QtGui.QIcon.Normal, QtGui.QIcon.Off) - self.action_Resume_previous.setIcon(icon15) + icon9 = QtGui.QIcon() + icon9.addPixmap(QtGui.QPixmap(":/icons/previous"), QtGui.QIcon.Normal, QtGui.QIcon.Off) + self.action_Resume_previous.setIcon(icon9) self.action_Resume_previous.setObjectName("action_Resume_previous") self.actionE_xit = QtWidgets.QAction(MainWindow) self.actionE_xit.setObjectName("actionE_xit") @@ -500,12 +455,7 @@ class Ui_MainWindow(object): self.current_track_2.setText(_translate("MainWindow", "Current track:")) self.next_track_2.setText(_translate("MainWindow", "Next track:")) self.lblTOD.setText(_translate("MainWindow", "00:00:00")) - self.btnPlay.setText(_translate("MainWindow", " Play")) - 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.btnDrop3db.setText(_translate("MainWindow", "-3dB to talk")) self.btnStop.setText(_translate("MainWindow", "Stop")) self.btnFade.setText(_translate("MainWindow", "Fade")) self.label_x.setText(_translate("MainWindow", "Track length:")) diff --git a/testdata/audiocheck.net_pinknoise.wav b/testdata/audiocheck.net_pinknoise.wav new file mode 100644 index 0000000..e17ff09 Binary files /dev/null and b/testdata/audiocheck.net_pinknoise.wav differ diff --git a/testdata/audiocheck.net_whitenoisegaussian.wav b/testdata/audiocheck.net_whitenoisegaussian.wav new file mode 100644 index 0000000..a69c7bd Binary files /dev/null and b/testdata/audiocheck.net_whitenoisegaussian.wav differ