Explorar o código

Add output volume control to player panel

Your Name hai 1 mes
pai
achega
0c824fc8d6
Modificáronse 2 ficheiros con 27 adicións e 0 borrados
  1. 5 0
      core/audio_player.py
  2. 22 0
      ui/player_panel.py

+ 5 - 0
core/audio_player.py

@@ -36,6 +36,7 @@ class AudioPlayer:
         self.vu_levels = (-100.0, -100.0)
         
         self.playback_speed: float = 1.0
+        self.output_volume: float = 1.0
         self._is_restarting: bool = False
         
         self._last_raw_chunk: Optional[np.ndarray] = None
@@ -170,6 +171,10 @@ class AudioPlayer:
         chunk = self.eq_engine.process(chunk)
         chunk = self.tape_processor.process_post_eq(chunk)
         
+        # Apply output volume
+        if self.output_volume != 1.0:
+            chunk = chunk * self.output_volume
+        
         # Write to output buffer
         outdata[:valid_count] = chunk
         

+ 22 - 0
ui/player_panel.py

@@ -43,6 +43,9 @@ class PlayerPanel(QWidget):
         self.settings = QSettings("TapeRecorder", "Player")
         self._init_ui()
         
+        # Init volume
+        self.player.output_volume = self.settings.value("volume", 100, type=int) / 100.0
+        
         # Connect player callbacks
         # Note: These are called from the audio thread. 
         # For thread safety, we use a QTimer to poll state instead of direct signals.
@@ -121,6 +124,20 @@ class PlayerPanel(QWidget):
         btn_layout.addWidget(self.stop_btn)
         btn_layout.addWidget(self.norm_cb)
         btn_layout.addWidget(QLabel(" | "))
+        
+        self.vol_slider = QSlider(Qt.Orientation.Horizontal)
+        self.vol_slider.setRange(0, 200)
+        self.vol_slider.setValue(self.settings.value("volume", 100, type=int))
+        self.vol_slider.setFixedWidth(100)
+        self.vol_slider.valueChanged.connect(self._on_vol_changed)
+        
+        self.vol_lbl = QLabel(f"Vol: {self.vol_slider.value()}%")
+        self.vol_lbl.setFixedWidth(70)
+        
+        btn_layout.addWidget(self.vol_lbl)
+        btn_layout.addWidget(self.vol_slider)
+        btn_layout.addWidget(QLabel(" | "))
+        
         btn_layout.addWidget(self.speed_lbl)
         btn_layout.addWidget(self.speed_slider)
         btn_layout.addStretch()
@@ -298,6 +315,11 @@ class PlayerPanel(QWidget):
         except Exception as e:
             self.file_lbl.setText(f"Error loading file: {e}")
 
+    def _on_vol_changed(self, value):
+        self.vol_lbl.setText(f"Vol: {value}%")
+        self.settings.setValue("volume", value)
+        self.player.output_volume = value / 100.0
+
     def play_next_track(self):
         if self.playlist and self.current_track_index < len(self.playlist) - 1:
             self.current_track_index += 1