ui font editing, artist album title selectable
This commit is contained in:
parent
e78fb918b5
commit
8684db497f
@ -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
44
main.py
@ -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
33
ui.py
@ -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)
|
||||
|
||||
88
ui.ui
88
ui.ui
@ -273,69 +273,63 @@
|
||||
</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>
|
||||
<widget class="QSlider" name="volumeSlider">
|
||||
<property name="minimum">
|
||||
<number>-1</number>
|
||||
</property>
|
||||
<property name="maximum">
|
||||
<number>101</number>
|
||||
</property>
|
||||
<property name="value">
|
||||
<number>50</number>
|
||||
</property>
|
||||
<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">
|
||||
<number>-1</number>
|
||||
</property>
|
||||
<property name="maximum">
|
||||
<number>101</number>
|
||||
</property>
|
||||
<property name="value">
|
||||
<number>50</number>
|
||||
</property>
|
||||
<property name="orientation">
|
||||
<enum>Qt::Horizontal</enum>
|
||||
</property>
|
||||
<property name="tickPosition">
|
||||
<enum>QSlider::TicksAbove</enum>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
<item>
|
||||
<spacer name="horizontalSpacer_4">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Horizontal</enum>
|
||||
</property>
|
||||
<property name="tickPosition">
|
||||
<enum>QSlider::TicksAbove</enum>
|
||||
<property name="sizeHint" stdset="0">
|
||||
<size>
|
||||
<width>40</width>
|
||||
<height>20</height>
|
||||
</size>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QLabel" name="volumeLabel">
|
||||
<property name="text">
|
||||
<string>50</string>
|
||||
</property>
|
||||
</widget>
|
||||
</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>
|
||||
|
||||
@ -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
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user