WIP: fade graph working, slightly laggy
This commit is contained in:
parent
c5ca1469dc
commit
0361d25c7b
@ -2,23 +2,19 @@
|
|||||||
|
|
||||||
# Standard library imports
|
# Standard library imports
|
||||||
from os.path import basename
|
from os.path import basename
|
||||||
from time import sleep
|
from typing import List, Optional
|
||||||
from typing import cast, List, Optional
|
|
||||||
import argparse
|
import argparse
|
||||||
import datetime as dt
|
import datetime as dt
|
||||||
import os
|
import os
|
||||||
import shutil
|
import shutil
|
||||||
import subprocess
|
import subprocess
|
||||||
import sys
|
import sys
|
||||||
import threading
|
|
||||||
|
|
||||||
# PyQt imports
|
# PyQt imports
|
||||||
from PyQt6.QtCore import (
|
from PyQt6.QtCore import (
|
||||||
pyqtSignal,
|
pyqtSignal,
|
||||||
QDate,
|
QDate,
|
||||||
QEvent,
|
|
||||||
QObject,
|
QObject,
|
||||||
QSize,
|
|
||||||
Qt,
|
Qt,
|
||||||
QThread,
|
QThread,
|
||||||
QTime,
|
QTime,
|
||||||
@ -27,10 +23,7 @@ from PyQt6.QtCore import (
|
|||||||
from PyQt6.QtGui import (
|
from PyQt6.QtGui import (
|
||||||
QCloseEvent,
|
QCloseEvent,
|
||||||
QColor,
|
QColor,
|
||||||
QFont,
|
|
||||||
QMouseEvent,
|
|
||||||
QPalette,
|
QPalette,
|
||||||
QResizeEvent,
|
|
||||||
)
|
)
|
||||||
from PyQt6.QtWidgets import (
|
from PyQt6.QtWidgets import (
|
||||||
QApplication,
|
QApplication,
|
||||||
@ -42,8 +35,6 @@ from PyQt6.QtWidgets import (
|
|||||||
QListWidgetItem,
|
QListWidgetItem,
|
||||||
QMainWindow,
|
QMainWindow,
|
||||||
QMessageBox,
|
QMessageBox,
|
||||||
QProgressBar,
|
|
||||||
QPushButton,
|
|
||||||
)
|
)
|
||||||
|
|
||||||
# Third party imports
|
# Third party imports
|
||||||
@ -176,7 +167,6 @@ class Window(QMainWindow, Ui_MainWindow):
|
|||||||
self.widgetFadeVolume.hideAxis("left")
|
self.widgetFadeVolume.hideAxis("left")
|
||||||
self.widgetFadeVolume.setDefaultPadding(0)
|
self.widgetFadeVolume.setDefaultPadding(0)
|
||||||
self.widgetFadeVolume.setBackground(Config.FADE_CURVE_BACKGROUND)
|
self.widgetFadeVolume.setBackground(Config.FADE_CURVE_BACKGROUND)
|
||||||
FadeCurve.GraphWidget = self.widgetFadeVolume
|
|
||||||
|
|
||||||
self.active_tab = lambda: self.tabPlaylist.currentWidget()
|
self.active_tab = lambda: self.tabPlaylist.currentWidget()
|
||||||
self.active_proxy_model = lambda: self.tabPlaylist.currentWidget().model()
|
self.active_proxy_model = lambda: self.tabPlaylist.currentWidget().model()
|
||||||
@ -999,7 +989,7 @@ class Window(QMainWindow, Ui_MainWindow):
|
|||||||
):
|
):
|
||||||
return
|
return
|
||||||
|
|
||||||
log.info(f"play_next({position=})")
|
log.debug(f"play_next({position=})")
|
||||||
|
|
||||||
# If there is no next track set, return.
|
# If there is no next track set, return.
|
||||||
if track_sequence.next is None:
|
if track_sequence.next is None:
|
||||||
@ -1035,6 +1025,13 @@ class Window(QMainWindow, Ui_MainWindow):
|
|||||||
# Play (new) current track
|
# Play (new) current track
|
||||||
track_sequence.current.play(position)
|
track_sequence.current.play(position)
|
||||||
|
|
||||||
|
# Show closing volume graph
|
||||||
|
if track_sequence.current.fade_graph:
|
||||||
|
track_sequence.current.fade_graph.GraphWidget = self.widgetFadeVolume
|
||||||
|
track_sequence.current.fade_graph.plot()
|
||||||
|
else:
|
||||||
|
log.error("No fade_graph")
|
||||||
|
|
||||||
# Disable play next controls
|
# Disable play next controls
|
||||||
self.catch_return_key = True
|
self.catch_return_key = True
|
||||||
self.show_status_message("Play controls: Disabled", 0)
|
self.show_status_message("Play controls: Disabled", 0)
|
||||||
@ -1475,23 +1472,8 @@ class Window(QMainWindow, Ui_MainWindow):
|
|||||||
Called every 10ms
|
Called every 10ms
|
||||||
"""
|
"""
|
||||||
|
|
||||||
return
|
if track_sequence.current:
|
||||||
# Update volume fade curve
|
track_sequence.current.update_fade_graph()
|
||||||
if (
|
|
||||||
track_sequence.current.fade_graph_start_updates is None
|
|
||||||
or track_sequence.current.fade_graph_start_updates > dt.datetime.now()
|
|
||||||
):
|
|
||||||
return
|
|
||||||
|
|
||||||
if (
|
|
||||||
track_sequence.current.track_id
|
|
||||||
and track_sequence.current.fade_graph
|
|
||||||
and track_sequence.current.start_time
|
|
||||||
):
|
|
||||||
play_time = (
|
|
||||||
dt.datetime.now() - track_sequence.current.start_time
|
|
||||||
).total_seconds() * 1000
|
|
||||||
track_sequence.current.fade_graph.tick(play_time)
|
|
||||||
|
|
||||||
def tick_500ms(self) -> None:
|
def tick_500ms(self) -> None:
|
||||||
"""
|
"""
|
||||||
|
|||||||
@ -43,13 +43,13 @@ class _AddFadeCurve(QObject):
|
|||||||
|
|
||||||
def __init__(
|
def __init__(
|
||||||
self,
|
self,
|
||||||
track_player: _TrackManager,
|
track_manager: _TrackManager,
|
||||||
track_path: str,
|
track_path: str,
|
||||||
track_fade_at: int,
|
track_fade_at: int,
|
||||||
track_silence_at: int,
|
track_silence_at: int,
|
||||||
):
|
):
|
||||||
super().__init__()
|
super().__init__()
|
||||||
self.track_player = track_player
|
self.track_manager = track_manager
|
||||||
self.track_path = track_path
|
self.track_path = track_path
|
||||||
self.track_fade_at = track_fade_at
|
self.track_fade_at = track_fade_at
|
||||||
self.track_silence_at = track_silence_at
|
self.track_silence_at = track_silence_at
|
||||||
@ -63,7 +63,7 @@ class _AddFadeCurve(QObject):
|
|||||||
if not fc:
|
if not fc:
|
||||||
log.error(f"Failed to create FadeCurve for {self.track_path=}")
|
log.error(f"Failed to create FadeCurve for {self.track_path=}")
|
||||||
else:
|
else:
|
||||||
self.track_player.fade_graph = fc
|
self.track_manager.fade_graph = fc
|
||||||
self.finished.emit()
|
self.finished.emit()
|
||||||
|
|
||||||
|
|
||||||
@ -84,8 +84,10 @@ class _FadeCurve:
|
|||||||
|
|
||||||
# Start point of curve is Config.FADE_CURVE_MS_BEFORE_FADE
|
# Start point of curve is Config.FADE_CURVE_MS_BEFORE_FADE
|
||||||
# milliseconds before fade starts to silence
|
# milliseconds before fade starts to silence
|
||||||
self.start_ms = max(0, track_fade_at - Config.FADE_CURVE_MS_BEFORE_FADE - 1)
|
self.start_ms: int = max(
|
||||||
self.end_ms = track_silence_at
|
0, track_fade_at - Config.FADE_CURVE_MS_BEFORE_FADE - 1
|
||||||
|
)
|
||||||
|
self.end_ms: int = track_silence_at
|
||||||
self.audio_segment = audio[self.start_ms : self.end_ms]
|
self.audio_segment = audio[self.start_ms : self.end_ms]
|
||||||
self.graph_array = np.array(self.audio_segment.get_array_of_samples())
|
self.graph_array = np.array(self.audio_segment.get_array_of_samples())
|
||||||
|
|
||||||
@ -423,6 +425,8 @@ class _TrackManager:
|
|||||||
|
|
||||||
if not self.player.is_playing():
|
if not self.player.is_playing():
|
||||||
self.start_time = None
|
self.start_time = None
|
||||||
|
if self.fade_graph:
|
||||||
|
self.fade_graph.clear()
|
||||||
self.signals.track_ended_signal.emit()
|
self.signals.track_ended_signal.emit()
|
||||||
|
|
||||||
def drop3db(self, enable: bool) -> None:
|
def drop3db(self, enable: bool) -> None:
|
||||||
@ -510,6 +514,25 @@ class _TrackManager:
|
|||||||
|
|
||||||
return self.silence_at - self.time_playing()
|
return self.silence_at - self.time_playing()
|
||||||
|
|
||||||
|
def update_fade_graph(self) -> None:
|
||||||
|
"""
|
||||||
|
Update fade graph
|
||||||
|
"""
|
||||||
|
|
||||||
|
if (
|
||||||
|
not self.is_playing()
|
||||||
|
or not self.fade_graph_start_updates
|
||||||
|
or not self.fade_graph
|
||||||
|
):
|
||||||
|
return
|
||||||
|
|
||||||
|
now = dt.datetime.now()
|
||||||
|
|
||||||
|
if self.fade_graph_start_updates > now:
|
||||||
|
return
|
||||||
|
|
||||||
|
self.fade_graph.tick(self.time_playing())
|
||||||
|
|
||||||
|
|
||||||
class MainTrackManager(_TrackManager):
|
class MainTrackManager(_TrackManager):
|
||||||
"""
|
"""
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user