Add mic ON/OFF toggle, headphone and studio output busses

- Channels 0-1 are now dedicated Mic 1/Mic 2 with mic_on toggle
- Mic audio only routes to main when mic_on=True, never to headphone
- New headphone_out_L/R JACK ports (all channels except mics)
- New studio_out_L/R JACK ports (copies main, mutes when any mic is on)
- Mic ON/OFF toggle button in mixer UI (hidden on non-mic channels)
- Session save/load includes mic_on state
This commit is contained in:
2026-05-15 00:36:48 +10:00
parent 89fb7010fb
commit 9e4315886d
4 changed files with 135 additions and 5 deletions
+34
View File
@@ -279,6 +279,40 @@ def icon_solo(color: str = "#ffaa00") -> QIcon:
return _make_icon(paint, color)
def icon_mic(color: str = "#00ff41") -> QIcon:
def paint(p, r, c):
p.setPen(Qt.NoPen)
p.setBrush(c)
# Mic body - pill/rectangle shape
bw = r.width() * 0.35
bh = r.height() * 0.45
bx = r.center().x() - bw / 2
by = r.top() + r.height() * 0.05
p.drawRoundedRect(QRectF(bx, by, bw, bh), bw * 0.3, bw * 0.3)
# Mic arc at top
path = QPainterPath()
arc_w = bw * 0.6
arc_h = r.height() * 0.08
path.moveTo(r.center().x() - arc_w / 2, by)
path.quadTo(r.center().x(), by - arc_h, r.center().x() + arc_w / 2, by)
p.drawPath(path)
# Stand lines down from body
pen = QPen(c, r.width() * 0.06)
pen.setCapStyle(Qt.RoundCap)
p.setPen(pen)
p.setBrush(Qt.NoBrush)
stand_top = by + bh
p.drawLine(QPointF(r.center().x(), stand_top),
QPointF(r.center().x(), stand_top + r.height() * 0.15))
# Base
base_w = r.width() * 0.45
base_h = r.height() * 0.1
p.drawRoundedRect(QRectF(r.center().x() - base_w / 2,
stand_top + r.height() * 0.12,
base_w, base_h), base_w * 0.15, base_w * 0.15)
return _make_icon(paint, color)
def icon_cog(color: str = "#aaaaaa") -> QIcon:
def paint(p, r, c):
pen = QPen(c, r.width() * 0.1)