ui font editing, artist album title selectable

This commit is contained in:
billypom on debian 2025-04-06 13:44:01 -04:00
parent e78fb918b5
commit 8684db497f
5 changed files with 95 additions and 78 deletions

View File

@ -64,5 +64,4 @@ config.ini db/
- allow spectrum analyzer to fall when playback stops or song is paused
- ability to delete playlist
- automatic "radio" based on artist or genre
- "installer" - put files in /opt? script to install and uninstall... eh
- .deb package?
- jump to currently playing song

44
main.py
View File

@ -1,6 +1,7 @@
import os
import sys
import logging
from PyQt5 import QtCore
import qdarktheme
import typing
import traceback
@ -36,7 +37,7 @@ from PyQt5.QtCore import (
QRunnable,
)
from PyQt5.QtMultimedia import QMediaPlayer, QMediaContent, QAudioProbe
from PyQt5.QtGui import QClipboard, QCloseEvent, QPixmap, QResizeEvent
from PyQt5.QtGui import QClipboard, QCloseEvent, QFont, QPixmap, QResizeEvent
from utils import (
delete_album_art,
scan_for_music,
@ -138,35 +139,45 @@ class ApplicationWindow(QMainWindow, Ui_MainWindow):
def __init__(self, clipboard):
super(ApplicationWindow, self).__init__()
global stopped
stopped = False
# clipboard good
self.clipboard = clipboard
# Config
self.config: ConfigParser = ConfigParser()
self.cfg_file = (
Path(user_config_dir(appname="musicpom", appauthor="billypom"))
/ "config.ini"
)
self.config.read(self.cfg_file)
# Multithreading stuff...
self.threadpool = QThreadPool()
# UI
self.setupUi(self)
self.setWindowTitle("musicpom")
self.setup_fonts()
# self.vLayoutAlbumArt.SetFixedSize()
self.status_bar = QStatusBar()
self.permanent_status_label = QLabel("Status...")
self.status_bar.addPermanentWidget(self.permanent_status_label)
self.setStatusBar(self.status_bar)
self.selected_song_filepath: str | None = None
self.current_song_filepath: str | None = None
self.current_song_metadata: ID3 | dict | None = None
self.current_song_album_art: bytes | None = None
# widget bits
self.album_art_scene: QGraphicsScene = QGraphicsScene()
self.config.read(self.cfg_file)
self.player: QMediaPlayer = QMediaPlayer() # Audio player object
self.probe: QAudioProbe = QAudioProbe() # Gets audio data
self.audio_visualizer: AudioVisualizer = AudioVisualizer(self.player)
self.timer = QTimer(self) # Audio timing things
self.clipboard = clipboard
# sharing functions with other classes and that
self.tableView.load_qapp(self)
self.albumGraphicsView.load_qapp(self)
@ -356,6 +367,27 @@ class ApplicationWindow(QMainWindow, Ui_MainWindow):
# | |
# |____________________|
def setup_fonts(self):
"""Initializes font sizes and behaviors for various UI components"""
font: QFont = QFont()
font.setPointSize(16)
font.setBold(True)
self.artistLabel: QLabel
self.artistLabel.setFont(font)
self.artistLabel.setTextInteractionFlags(QtCore.Qt.TextInteractionFlag.TextSelectableByMouse)
font: QFont = QFont()
font.setPointSize(16)
font.setBold(False)
self.titleLabel.setFont(font)
self.titleLabel.setTextInteractionFlags(QtCore.Qt.TextInteractionFlag.TextSelectableByMouse)
font: QFont = QFont()
font.setPointSize(16)
font.setItalic(True)
self.albumLabel.setFont(font)
self.albumLabel.setTextInteractionFlags(QtCore.Qt.TextInteractionFlag.TextSelectableByMouse)
def load_config(self) -> None:
"""does what it says"""
cfg_file = (
@ -479,7 +511,7 @@ class ApplicationWindow(QMainWindow, Ui_MainWindow):
def move_slider(self) -> None:
"""Handles moving the playback slider"""
if stopped:
if self.player.state() == QMediaPlayer.State.StoppedState:
return
else:
if self.playbackSlider.isSliderDown():

33
ui.py
View File

@ -160,6 +160,11 @@ class Ui_MainWindow(object):
self.hLayoutControls2 = QtWidgets.QHBoxLayout()
self.hLayoutControls2.setSpacing(6)
self.hLayoutControls2.setObjectName("hLayoutControls2")
self.hLayoutVolume = QtWidgets.QHBoxLayout()
self.hLayoutVolume.setObjectName("hLayoutVolume")
self.volumeLabel = QtWidgets.QLabel(self.centralwidget)
self.volumeLabel.setObjectName("volumeLabel")
self.hLayoutVolume.addWidget(self.volumeLabel)
self.volumeSlider = QtWidgets.QSlider(self.centralwidget)
self.volumeSlider.setMinimum(-1)
self.volumeSlider.setMaximum(101)
@ -167,43 +172,29 @@ class Ui_MainWindow(object):
self.volumeSlider.setOrientation(QtCore.Qt.Horizontal)
self.volumeSlider.setTickPosition(QtWidgets.QSlider.TicksAbove)
self.volumeSlider.setObjectName("volumeSlider")
self.hLayoutControls2.addWidget(self.volumeSlider)
self.volumeLabel = QtWidgets.QLabel(self.centralwidget)
self.volumeLabel.setObjectName("volumeLabel")
self.hLayoutControls2.addWidget(self.volumeLabel)
self.hLayoutVolume.addWidget(self.volumeSlider)
self.hLayoutControls2.addLayout(self.hLayoutVolume)
spacerItem2 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
self.hLayoutControls2.addItem(spacerItem2)
self.hLayoutSongDetails = QtWidgets.QHBoxLayout()
self.hLayoutSongDetails.setObjectName("hLayoutSongDetails")
self.artistLabel = QtWidgets.QLabel(self.centralwidget)
font = QtGui.QFont()
font.setPointSize(24)
font.setBold(True)
font.setWeight(75)
self.artistLabel.setFont(font)
self.artistLabel.setObjectName("artistLabel")
self.hLayoutSongDetails.addWidget(self.artistLabel)
self.titleLabel = QtWidgets.QLabel(self.centralwidget)
font = QtGui.QFont()
font.setPointSize(18)
self.titleLabel.setFont(font)
self.titleLabel.setObjectName("titleLabel")
self.hLayoutSongDetails.addWidget(self.titleLabel)
self.albumLabel = QtWidgets.QLabel(self.centralwidget)
font = QtGui.QFont()
font.setPointSize(16)
font.setBold(False)
font.setItalic(True)
font.setWeight(50)
self.albumLabel.setFont(font)
self.albumLabel.setObjectName("albumLabel")
self.hLayoutSongDetails.addWidget(self.albumLabel)
self.hLayoutControls2.addLayout(self.hLayoutSongDetails)
spacerItem2 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
self.hLayoutControls2.addItem(spacerItem2)
spacerItem3 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
self.hLayoutControls2.addItem(spacerItem3)
self.pushButton = QtWidgets.QPushButton(self.centralwidget)
self.pushButton.setObjectName("pushButton")
self.hLayoutControls2.addWidget(self.pushButton)
self.hLayoutControls2.setStretch(0, 1)
self.hLayoutControls2.setStretch(3, 4)
self.hLayoutControls2.setStretch(2, 5)
self.hLayoutControls2.setStretch(4, 1)
self.verticalLayout.addLayout(self.hLayoutControls2)
self.verticalLayout_3.addLayout(self.verticalLayout)

56
ui.ui
View File

@ -273,10 +273,19 @@
</layout>
</item>
<item>
<layout class="QHBoxLayout" name="hLayoutControls2" stretch="1,0,0,4,1">
<layout class="QHBoxLayout" name="hLayoutControls2" stretch="1,0,5,0,1">
<property name="spacing">
<number>6</number>
</property>
<item>
<layout class="QHBoxLayout" name="hLayoutVolume">
<item>
<widget class="QLabel" name="volumeLabel">
<property name="text">
<string>50</string>
</property>
</widget>
</item>
<item>
<widget class="QSlider" name="volumeSlider">
<property name="minimum">
@ -296,46 +305,31 @@
</property>
</widget>
</item>
</layout>
</item>
<item>
<widget class="QLabel" name="volumeLabel">
<property name="text">
<string>50</string>
<spacer name="horizontalSpacer_4">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
</widget>
<property name="sizeHint" stdset="0">
<size>
<width>40</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
<item>
<layout class="QHBoxLayout" name="hLayoutSongDetails">
<item>
<widget class="QLabel" name="artistLabel">
<property name="font">
<font>
<pointsize>24</pointsize>
<weight>75</weight>
<bold>true</bold>
</font>
</property>
</widget>
<widget class="QLabel" name="artistLabel"/>
</item>
<item>
<widget class="QLabel" name="titleLabel">
<property name="font">
<font>
<pointsize>18</pointsize>
</font>
</property>
</widget>
<widget class="QLabel" name="titleLabel"/>
</item>
<item>
<widget class="QLabel" name="albumLabel">
<property name="font">
<font>
<pointsize>16</pointsize>
<weight>50</weight>
<italic>true</italic>
<bold>false</bold>
</font>
</property>
</widget>
<widget class="QLabel" name="albumLabel"/>
</item>
</layout>
</item>

View File

@ -7,6 +7,7 @@ from pydub import AudioSegment
import numpy as np
from scipy.ndimage.filters import gaussian_filter1d
from logging import debug, info
from PyQt5.QtMultimedia import QMediaPlayer
class FFTAnalyser(QtCore.QThread):
@ -117,8 +118,8 @@ class FFTAnalyser(QtCore.QThread):
for n, amp in enumerate(point_samples):
# amp *= 2
if self.player.state() in (
self.player.PausedState,
self.player.StoppedState,
QMediaPlayer.State.PausedState,
QMediaPlayer.State.StoppedState
):
# More aggressive decay when no audio is playing
self.points[n] *= 0.7 # Faster fade out when paused/stopped