Skip to content

Commit 9808b29

Browse files
added exit button to frameless window, modified bass vfx calculation to take maximum value within specified frequency
1 parent b91908d commit 9808b29

File tree

2 files changed

+96
-52
lines changed

2 files changed

+96
-52
lines changed

audio_visualizer.py

+5-52
Original file line numberDiff line numberDiff line change
@@ -12,57 +12,11 @@
1212
import numpy as np
1313

1414
import pyqtgraph as pg
15-
from pyqtgraph.Qt import QtCore, QtGui, QtWidgets
1615
from PyQt5.QtWidgets import QApplication
1716

1817
from scipy.signal.windows import blackmanharris, tukey
1918

20-
21-
class MainWindow(QtWidgets.QMainWindow):
22-
def __init__(self):
23-
QtWidgets.QMainWindow.__init__(self)
24-
self.oldPos = self.pos()
25-
26-
def mousePressEvent(self, event):
27-
self.oldPos = event.globalPos()
28-
29-
def mouseMoveEvent(self, event):
30-
delta = QtCore.QPoint(event.globalPos() - self.oldPos)
31-
self.move(self.x() + delta.x(), self.y() + delta.y())
32-
self.oldPos = event.globalPos()
33-
34-
35-
class Canvas(QtWidgets.QLabel):
36-
"""
37-
Overrides the resizeEvent method of a QLabel
38-
to allow for QPixmap auto-scaling
39-
"""
40-
41-
def __init__(self, visualizer):
42-
"""
43-
Keeps a reference to the AudioVisualizer object
44-
before calling the parent QLabel __init__ method
45-
46-
:param visualizer: The corresponding AudioVisualizer
47-
:type visualizer: AudioVisualizer
48-
"""
49-
50-
self.visualizer = visualizer
51-
QtWidgets.QLabel.__init__(self)
52-
53-
def resizeEvent(self, event):
54-
"""
55-
Override of the resizeEvent method that also updates
56-
the QLabel QPixmap and visualizer object dimensions
57-
58-
:param event: The resize event
59-
:type event: QEvent
60-
"""
61-
62-
pixmap = self.pixmap()
63-
self.setPixmap(pixmap.scaled(self.width(), self.height(), aspectRatioMode=QtCore.Qt.IgnoreAspectRatio))
64-
self.visualizer.set_dims(self.width(), self.height())
65-
QtWidgets.QLabel.resizeEvent(self, event)
19+
from custom_qt import *
6620

6721

6822
class AudioVisualizer:
@@ -163,8 +117,7 @@ def __init__(self, py_audio, data_format=pyaudio.paInt16,
163117
pg.setConfigOptions(antialias=True)
164118
self.traces = dict()
165119
self.app = QApplication(sys.argv)
166-
self.win = MainWindow()
167-
self.win.setWindowFlags(QtCore.Qt.WindowFlags(QtCore.Qt.FramelessWindowHint | QtCore.Qt.WindowStaysOnTopHint))
120+
self.win = FramelessWindow()
168121

169122
# dimension-related variables
170123
self.width = width
@@ -181,8 +134,8 @@ def __init__(self, py_audio, data_format=pyaudio.paInt16,
181134
self.label.setMinimumSize(100, 100)
182135
self.canvas = QtGui.QPixmap(self.width, self.height)
183136
self.label.setPixmap(self.canvas)
184-
self.win.setCentralWidget(self.label)
185-
self.win.addDockWidget(QtCore.Qt.DockWidgetArea(), QtWidgets.QDockWidget(QtWidgets.QSizeGrip(self.win)))
137+
138+
self.win.addWidgets(self.label)
186139
self.win.setWindowTitle("Spectrum")
187140

188141
self.painter = None
@@ -411,7 +364,7 @@ def update(self):
411364
y_fft = y_fft * 2 / (self.max_freq * 256) # shifts y_fft to [0, 1]
412365

413366
# calculates average values of bass frequencies
414-
bass = np.mean(y_fft[0:int(self.bass_index)])
367+
bass = np.max(y_fft[0:self.bass_index])
415368

416369
# smooths bass values
417370
if self.prev_bass is not None:

custom_qt.py

+91
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,91 @@
1+
from pyqtgraph.Qt import QtCore, QtGui, QtWidgets
2+
3+
4+
class FramelessWindow(QtWidgets.QMainWindow):
5+
def __init__(self):
6+
QtWidgets.QMainWindow.__init__(self)
7+
self.oldPos = self.pos()
8+
self.resizeGrip = None
9+
self.exitButton = None
10+
self.setWindowFlags(QtCore.Qt.WindowFlags(QtCore.Qt.FramelessWindowHint | QtCore.Qt.WindowStaysOnTopHint))
11+
12+
def addWidgets(self, centralWidget):
13+
self.setCentralWidget(centralWidget)
14+
self.resizeGrip = ResizeGrip(self)
15+
self.exitButton = ExitButton(self)
16+
17+
def resizeEvent(self, event):
18+
self.exitButton.setGeometry(self.width() - 20, 0, 20, 20)
19+
self.resizeGrip.setGeometry(0, 0, 20, 20)
20+
QtWidgets.QMainWindow.resizeEvent(self, event)
21+
22+
def changeEvent(self, event):
23+
24+
if self.resizeGrip is not None:
25+
self.resizeGrip.resizing = False
26+
27+
def mousePressEvent(self, event):
28+
self.oldPos = event.globalPos()
29+
self.resizeGrip.resizing = False
30+
31+
def mouseMoveEvent(self, event):
32+
33+
if self.resizeGrip is not None and not self.resizeGrip.resizing:
34+
delta = QtCore.QPoint(event.globalPos() - self.oldPos)
35+
self.move(self.x() + delta.x(), self.y() + delta.y())
36+
self.oldPos = event.globalPos()
37+
38+
39+
class ResizeGrip(QtWidgets.QSizeGrip):
40+
def __init__(self, parent):
41+
QtWidgets.QSizeGrip.__init__(self, parent)
42+
self.resizing = False
43+
self.setPalette(QtGui.QPalette(QtGui.QColor('transparent')))
44+
45+
def mousePressEvent(self, event):
46+
QtWidgets.QSizeGrip.mousePressEvent(self, event)
47+
self.resizing = True
48+
49+
50+
class ExitButton(QtWidgets.QLabel):
51+
def __init__(self, parent):
52+
QtWidgets.QLabel.__init__(self, parent)
53+
self.setPalette(QtGui.QPalette(QtGui.QColor('transparent')))
54+
self.setText('X')
55+
self.setAlignment(QtCore.Qt.AlignCenter)
56+
57+
def mousePressEvent(self, event):
58+
QtCore.QCoreApplication.exit()
59+
60+
61+
class Canvas(QtWidgets.QLabel):
62+
"""
63+
Overrides the resizeEvent method of a QLabel
64+
to allow for QPixmap auto-scaling
65+
"""
66+
67+
def __init__(self, visualizer):
68+
"""
69+
Keeps a reference to the AudioVisualizer object
70+
before calling the parent QLabel __init__ method
71+
72+
:param visualizer: The corresponding AudioVisualizer
73+
:type visualizer: AudioVisualizer
74+
"""
75+
76+
self.visualizer = visualizer
77+
QtWidgets.QLabel.__init__(self)
78+
79+
def resizeEvent(self, event):
80+
"""
81+
Override of the resizeEvent method that also updates
82+
the QLabel QPixmap and visualizer object dimensions
83+
84+
:param event: The resize event
85+
:type event: QEvent
86+
"""
87+
88+
pixmap = self.pixmap()
89+
self.setPixmap(pixmap.scaled(self.width(), self.height(), aspectRatioMode=QtCore.Qt.IgnoreAspectRatio))
90+
self.visualizer.set_dims(self.width(), self.height())
91+
QtWidgets.QLabel.resizeEvent(self, event)

0 commit comments

Comments
 (0)