Remove solo buttons, hide mute on mics, fix master volume, add mic_on MIDI, resize fonts

- Removed solo buttons from all mixer channels
- Mute button hidden on mic channels (0,1) — mic_on toggle replaces it
- Fixed master volume fader not being applied in audio _process()
- Added mixer_mic_on MIDI signal and learnable action
- Added CLEAR MIDI button to settings popup
- Increased settings popup fonts 7pt→9pt, popup size 460→620px
- Reduced deck fonts (header 24→16, elapsed 32→22, etc.) and spacing
- Increased mixer fonts (names 8→9, headers 9→11, etc.)
- Added missing MIDI learn entries (mute ch3-8, pfl ch3-8, mic_on ch1-2)
This commit is contained in:
2026-05-15 08:41:40 +10:00
parent 9e4315886d
commit 4d6a639c08
6 changed files with 129 additions and 99 deletions
+19 -41
View File
@@ -9,7 +9,7 @@ from PySide6.QtCore import Qt, QTimer, QSize
from PySide6.QtGui import QFont, QPainter, QColor, QLinearGradient, QPen
from audio_engine import NUM_MIXER_CHANNELS
from icons import icon_mute, icon_solo, icon_mic
from icons import icon_mute, icon_mic
import math
@@ -43,13 +43,13 @@ class VUMeter(QWidget):
if db == -6:
painter.setPen(QPen(QColor("#00ff88"), 2))
painter.drawLine(rect.right() - 3, y, rect.right(), y)
painter.setFont(QFont("Segoe UI", 8, QFont.Bold))
painter.setFont(QFont("Segoe UI", 9, QFont.Bold))
painter.setPen(QPen(QColor("#ffffff"), 1))
else:
painter.setPen(QPen(QColor("#2a2a2a"), 1))
painter.drawLine(rect.right() - 5, y, rect.right(), y)
painter.setPen(QPen(QColor("#cccccc"), 1))
painter.setFont(QFont("Segoe UI", 7))
painter.setFont(QFont("Segoe UI", 8))
painter.drawText(rect.left() - 16, y + 3, f"{db}")
painter.setPen(QPen(QColor("#1a1a1a"), 1))
@@ -93,7 +93,7 @@ class ChannelStrip(QFrame):
self.channel_index = channel_index
self._channel = engine.get_channel(channel_index)
self.setFixedWidth(90)
self.setFixedWidth(100)
self.setSizePolicy(QSizePolicy.Fixed, QSizePolicy.Expanding)
self.setStyleSheet("""
ChannelStrip {
@@ -117,14 +117,14 @@ class ChannelStrip(QFrame):
root.setSpacing(4)
self.name_btn = QPushButton(self._channel.name)
self.name_btn.setFont(QFont("Segoe UI", 8, QFont.Bold))
self.name_btn.setFont(QFont("Segoe UI", 9, QFont.Bold))
self.name_btn.setStyleSheet("""
QPushButton {
background-color: transparent;
color: #999aaa;
border: none;
padding: 2px;
font-size: 8pt;
font-size: 9pt;
}
QPushButton:hover {
color: #ffffff;
@@ -174,6 +174,8 @@ class ChannelStrip(QFrame):
btn_row = QHBoxLayout()
btn_row.setSpacing(3)
is_mic = self.channel_index < 2
self.mute_btn = QPushButton()
self.mute_btn.setFixedSize(28, 24)
self.mute_btn.setIconSize(QSize(16, 16))
@@ -192,28 +194,9 @@ class ChannelStrip(QFrame):
}
QPushButton:hover { background-color: #343036; }
""")
self.mute_btn.setVisible(not is_mic)
btn_row.addWidget(self.mute_btn)
self.solo_btn = QPushButton()
self.solo_btn.setFixedSize(28, 24)
self.solo_btn.setIconSize(QSize(16, 16))
self.solo_btn.setIcon(icon_solo())
self.solo_btn.setCheckable(True)
self.solo_btn.setToolTip("Solo")
self.solo_btn.setStyleSheet("""
QPushButton {
background-color: #262420;
border: 1px solid #3a3830;
border-radius: 3px;
}
QPushButton:checked {
background-color: #4a4a1a;
border: 1px solid #ffaa00;
}
QPushButton:hover { background-color: #363430; }
""")
btn_row.addWidget(self.solo_btn)
# Mic ON/OFF button for channels 0 and 1
self.mic_btn = QPushButton()
self.mic_btn.setFixedSize(28, 24)
@@ -233,12 +216,12 @@ class ChannelStrip(QFrame):
}
QPushButton:hover { background-color: #303436; }
""")
self.mic_btn.setVisible(self.channel_index < 2)
self.mic_btn.setVisible(is_mic)
btn_row.addWidget(self.mic_btn)
self.pfl_btn = QPushButton("PFL")
self.pfl_btn.setFixedSize(28, 24)
self.pfl_btn.setFont(QFont("Segoe UI", 7, QFont.Bold))
self.pfl_btn.setFont(QFont("Segoe UI", 8, QFont.Bold))
self.pfl_btn.setCheckable(True)
self.pfl_btn.setToolTip("Pre-Fader Listen")
self.pfl_btn.setStyleSheet("""
@@ -263,7 +246,6 @@ class ChannelStrip(QFrame):
self.name_btn.clicked.connect(self._rename)
self.volume_slider.valueChanged.connect(self._on_volume_changed)
self.mute_btn.toggled.connect(self._on_mute_toggled)
self.solo_btn.toggled.connect(self._on_solo_toggled)
self.mic_btn.toggled.connect(self._on_mic_toggled)
self.pfl_btn.toggled.connect(self._on_pfl_toggled)
@@ -283,9 +265,6 @@ class ChannelStrip(QFrame):
def _on_mute_toggled(self, checked: bool):
self.engine.set_channel_mute(self.channel_index, checked)
def _on_solo_toggled(self, checked: bool):
self.engine.set_channel_solo(self.channel_index, checked)
def _on_pfl_toggled(self, checked: bool):
self.engine.set_channel_pfl(self.channel_index, checked)
@@ -331,7 +310,7 @@ class MasterPreSection(QFrame):
root.setSpacing(4)
header = QLabel("MASTER")
header.setFont(QFont("Segoe UI", 8, QFont.Bold))
header.setFont(QFont("Segoe UI", 10, QFont.Bold))
header.setAlignment(Qt.AlignCenter)
header.setStyleSheet("color: #888; background: transparent; border: none;")
root.addWidget(header)
@@ -399,7 +378,7 @@ class EffectSection(QFrame):
root.setSpacing(2)
header = QLabel("FX")
header.setFont(QFont("Segoe UI", 8, QFont.Bold))
header.setFont(QFont("Segoe UI", 10, QFont.Bold))
header.setAlignment(Qt.AlignCenter)
header.setStyleSheet("color: #556670; background: transparent; border: none;")
root.addWidget(header)
@@ -411,19 +390,19 @@ class EffectSection(QFrame):
lufs_layout.setSpacing(2)
self.lufs_value = QLabel("-70.0")
self.lufs_value.setFont(QFont("Segoe UI", 13, QFont.Bold))
self.lufs_value.setFont(QFont("Segoe UI", 14, QFont.Bold))
self.lufs_value.setAlignment(Qt.AlignCenter)
self.lufs_value.setStyleSheet("color: #00cc88; background: transparent; border: none;")
lufs_layout.addWidget(self.lufs_value)
lufs_unit = QLabel("LUFS")
lufs_unit.setFont(QFont("Segoe UI", 6))
lufs_unit.setFont(QFont("Segoe UI", 7))
lufs_unit.setAlignment(Qt.AlignCenter)
lufs_unit.setStyleSheet("color: #556; background: transparent; border: none;")
lufs_layout.addWidget(lufs_unit)
self.pfl_indicator = QLabel("PFL\n")
self.pfl_indicator.setFont(QFont("Segoe UI", 5))
self.pfl_indicator.setFont(QFont("Segoe UI", 7))
self.pfl_indicator.setAlignment(Qt.AlignCenter)
self.pfl_indicator.setStyleSheet("color: #556; background: transparent; border: none;")
lufs_layout.addWidget(self.pfl_indicator)
@@ -490,12 +469,12 @@ class EffectSection(QFrame):
dial.setValue(_val_to_pos(default))
lbl = QLabel(label)
lbl.setFont(QFont("Segoe UI", 8, QFont.Bold))
lbl.setFont(QFont("Segoe UI", 9, QFont.Bold))
lbl.setAlignment(Qt.AlignLeft | Qt.AlignVCenter)
lbl.setStyleSheet("color: #889; background: transparent; border: none;")
val_label = QLabel(f"{default}{suffix}")
val_label.setFont(QFont("Segoe UI", 7))
val_label.setFont(QFont("Segoe UI", 8))
val_label.setAlignment(Qt.AlignRight | Qt.AlignVCenter)
val_label.setStyleSheet("color: #667; background: transparent; border: none;")
@@ -561,7 +540,7 @@ class MixerWidget(QFrame):
root.setSpacing(4)
header = QLabel("MIXER")
header.setFont(QFont("Segoe UI", 9, QFont.Bold))
header.setFont(QFont("Segoe UI", 11, QFont.Bold))
header.setStyleSheet("color: #556670; background: transparent; border: none; "
"letter-spacing: 2px;")
root.addWidget(header)
@@ -623,5 +602,4 @@ class MixerWidget(QFrame):
strip.name_btn.setText(ch.name)
strip.volume_slider.setValue(int(ch.volume * 100))
strip.mute_btn.setChecked(ch.muted)
strip.solo_btn.setChecked(ch.solo)
strip.pfl_btn.setChecked(ch.pfl)