v0.5 — cleanup orphan code, add MIDI master volume learn, fix turn-deck crashes
- Remove vestigial lufs_meter_widget.py and debug_audio.py - Delete unused WaveformWidget/WaveformMonitor classes, dead stubs, duplicate code - Fix turn-mode deck crashes (deck3/deck4 missing from engine.decks, uninitialized manual_elapsed/duration) - Replace raw print() with logging in main.py - Add master_volume MIDI learn signal + settings popup entry - Bump version to 0.5
This commit is contained in:
@@ -1,8 +1,12 @@
|
||||
# main.py
|
||||
|
||||
import json
|
||||
import logging
|
||||
import os
|
||||
import sys
|
||||
|
||||
__version__ = "0.5"
|
||||
|
||||
from PySide6.QtWidgets import (
|
||||
QApplication, QMainWindow, QWidget, QFileDialog,
|
||||
QVBoxLayout, QHBoxLayout, QSplitter
|
||||
@@ -11,7 +15,7 @@ from PySide6.QtCore import Qt
|
||||
from PySide6.QtGui import QFont, QColor, QPalette
|
||||
|
||||
from audio_engine import AudioEngine
|
||||
from deck_widget import DeckWidget, ExternalDeckWidget
|
||||
from deck_widget import DeckWidget
|
||||
from cart_widget import CartBankWidget
|
||||
from playlist_widget import PlaylistWidget
|
||||
from midi_engine import MidiEngine
|
||||
@@ -19,6 +23,8 @@ from top_bar_widget import TopBarWidget, THEMES
|
||||
from history_widget import HistoryWidget
|
||||
from mixer_widget import MixerWidget
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
|
||||
class RadioPanelWindow(QMainWindow):
|
||||
def __init__(self):
|
||||
@@ -26,7 +32,7 @@ class RadioPanelWindow(QMainWindow):
|
||||
|
||||
self.engine = AudioEngine()
|
||||
|
||||
self.setWindowTitle("Getting To It")
|
||||
self.setWindowTitle(f"Getting To It v{__version__}")
|
||||
self.setMinimumSize(1400, 860)
|
||||
self.resize(1920, 1080)
|
||||
self._apply_global_style(THEMES[0])
|
||||
@@ -48,10 +54,10 @@ class RadioPanelWindow(QMainWindow):
|
||||
|
||||
# ── Build widgets ─────────────────────────────────────────────────
|
||||
|
||||
self.deck1 = DeckWidget("deck1", "DECK 1", "#00b894", self.engine)
|
||||
self.deck2 = DeckWidget("deck2", "DECK 2", "#6c5ce7", self.engine)
|
||||
self.deck3 = ExternalDeckWidget("deck3", "DECK 3", "#fdcb6e", self.engine)
|
||||
self.deck4 = ExternalDeckWidget("deck4", "DECK 4", "#e17055", self.engine)
|
||||
self.deck1 = DeckWidget("deck1", "DECK_001", "#00b894", self.engine, mode='deck')
|
||||
self.deck2 = DeckWidget("deck2", "DECK_002", "#6c5ce7", self.engine, mode='deck')
|
||||
self.deck3 = DeckWidget("deck3", "TURN_001", "#fdcb6e", self.engine, mode='turn')
|
||||
self.deck4 = DeckWidget("deck4", "TURN_002", "#e17055", self.engine, mode='turn')
|
||||
|
||||
self.cart_bank = CartBankWidget(self.engine)
|
||||
self.cart_bank.setFixedHeight(180)
|
||||
@@ -117,6 +123,8 @@ class RadioPanelWindow(QMainWindow):
|
||||
# ── Wire signals ─────────────────────────────────────────────────
|
||||
self.deck1.track_started.connect(self.history_widget.add_track)
|
||||
self.deck2.track_started.connect(self.history_widget.add_track)
|
||||
self.deck3.track_started.connect(self.history_widget.add_track)
|
||||
self.deck4.track_started.connect(self.history_widget.add_track)
|
||||
|
||||
# ── MIDI ──────────────────────────────────────────────────────────
|
||||
self._setup_midi()
|
||||
@@ -233,6 +241,7 @@ class RadioPanelWindow(QMainWindow):
|
||||
self.midi.mixer_solo.connect(self._on_midi_mixer_solo)
|
||||
self.midi.mixer_pfl.connect(self._on_midi_mixer_pfl)
|
||||
self.midi.master_control.connect(self._on_midi_master_control)
|
||||
self.midi.master_volume.connect(self._on_midi_master_volume)
|
||||
self.midi.controller_connected.connect(self._on_midi_status)
|
||||
|
||||
self.midi.start()
|
||||
@@ -240,7 +249,7 @@ class RadioPanelWindow(QMainWindow):
|
||||
|
||||
ports = self.midi.list_ports()
|
||||
if ports:
|
||||
print(f"[MIDI] Available ports: {ports}")
|
||||
logger.info("Available ports: %s", ports)
|
||||
|
||||
def _on_midi_play_pause(self, deck: str):
|
||||
if deck == 'deck1':
|
||||
@@ -298,11 +307,14 @@ class RadioPanelWindow(QMainWindow):
|
||||
v = round(max(lo, min(hi, v)), 1)
|
||||
setattr(master.compressor if knob != "ceiling_db" else master.limiter, knob, v)
|
||||
|
||||
def _on_midi_master_volume(self, val: float):
|
||||
self.engine.mixer['master'].volume = max(0.0, min(1.0, val))
|
||||
|
||||
def _on_midi_status(self, connected: bool, name: str):
|
||||
if connected:
|
||||
print(f"[MIDI] Connected: {name}")
|
||||
logger.info("Connected: %s", name)
|
||||
else:
|
||||
print(f"[MIDI] Not connected: {name}")
|
||||
logger.info("Not connected: %s", name)
|
||||
|
||||
def closeEvent(self, event):
|
||||
self.midi.stop()
|
||||
|
||||
Reference in New Issue
Block a user