Compare commits
No commits in common. "68a253bc7c1c7f9d32336def1c8868f484a4cbb0" and "87d2d7adae683cd762f7bf306fd6144f774928b7" have entirely different histories.
68a253bc7c
...
87d2d7adae
@ -157,8 +157,8 @@ class PreviewManager:
|
|||||||
self.intro: Optional[int] = None
|
self.intro: Optional[int] = None
|
||||||
self.path: str = ""
|
self.path: str = ""
|
||||||
self.row_number: Optional[int] = None
|
self.row_number: Optional[int] = None
|
||||||
self.start_time: Optional[dt.datetime] = None
|
|
||||||
self.track_id: int = 0
|
self.track_id: int = 0
|
||||||
|
self.start_time: Optional[dt.datetime] = None
|
||||||
|
|
||||||
def back(self, ms: int) -> None:
|
def back(self, ms: int) -> None:
|
||||||
"""
|
"""
|
||||||
@ -220,7 +220,7 @@ class PreviewManager:
|
|||||||
if not mixer.music.get_busy():
|
if not mixer.music.get_busy():
|
||||||
return
|
return
|
||||||
|
|
||||||
mixer.music.rewind()
|
mixer.music.set_pos(0)
|
||||||
self.start_time = dt.datetime.now()
|
self.start_time = dt.datetime.now()
|
||||||
|
|
||||||
def set_intro(self, ms: int) -> None:
|
def set_intro(self, ms: int) -> None:
|
||||||
@ -1246,7 +1246,7 @@ class Window(QMainWindow, Ui_MainWindow):
|
|||||||
Create log entry
|
Create log entry
|
||||||
"""
|
"""
|
||||||
|
|
||||||
log.debug("quicklog timestamp; entry follows")
|
log.debug("quicklog")
|
||||||
|
|
||||||
# Get log text
|
# Get log text
|
||||||
dlg: QInputDialog = QInputDialog(self)
|
dlg: QInputDialog = QInputDialog(self)
|
||||||
@ -1591,18 +1591,16 @@ class Window(QMainWindow, Ui_MainWindow):
|
|||||||
# Update intro counter if applicable and, if updated, return
|
# Update intro counter if applicable and, if updated, return
|
||||||
# because playing an intro takes precedence over timing a
|
# because playing an intro takes precedence over timing a
|
||||||
# preview.
|
# preview.
|
||||||
intro_ms_remaining = track_sequence.current.time_remaining_intro()
|
remaining_ms = track_sequence.current.time_remaining_intro()
|
||||||
if intro_ms_remaining > 0:
|
if remaining_ms > 0:
|
||||||
self.label_intro_timer.setText(f"{intro_ms_remaining / 1000:.1f}")
|
self.label_intro_timer.setText(f"{remaining_ms / 1000:.1f}")
|
||||||
if intro_ms_remaining <= Config.INTRO_SECONDS_WARNING_MS:
|
if remaining_ms <= Config.INTRO_SECONDS_WARNING_MS:
|
||||||
self.label_intro_timer.setStyleSheet(
|
self.label_intro_timer.setStyleSheet(
|
||||||
f"background: {Config.COLOUR_WARNING_TIMER}"
|
f"background: {Config.COLOUR_WARNING_TIMER}"
|
||||||
)
|
)
|
||||||
return
|
return
|
||||||
else:
|
else:
|
||||||
if self.label_intro_timer.styleSheet() != "":
|
self.label_intro_timer.setStyleSheet("")
|
||||||
self.label_intro_timer.setStyleSheet("")
|
|
||||||
self.label_intro_timer.setText("0.0")
|
|
||||||
except AttributeError:
|
except AttributeError:
|
||||||
# currnent track ended during servicing tick
|
# currnent track ended during servicing tick
|
||||||
pass
|
pass
|
||||||
|
|||||||
@ -19,9 +19,6 @@ from PyQt6.QtCore import (
|
|||||||
QThread,
|
QThread,
|
||||||
QThreadPool,
|
QThreadPool,
|
||||||
)
|
)
|
||||||
from pyqtgraph import PlotWidget
|
|
||||||
from pyqtgraph.graphicsItems.PlotDataItem import PlotDataItem # type: ignore
|
|
||||||
from pyqtgraph.graphicsItems.LinearRegionItem import LinearRegionItem # type: ignore
|
|
||||||
|
|
||||||
# App imports
|
# App imports
|
||||||
from classes import MusicMusterSignals
|
from classes import MusicMusterSignals
|
||||||
@ -71,7 +68,7 @@ class _AddFadeCurve(QObject):
|
|||||||
|
|
||||||
|
|
||||||
class _FadeCurve:
|
class _FadeCurve:
|
||||||
GraphWidget: Optional[PlotWidget] = None
|
GraphWidget = None
|
||||||
|
|
||||||
def __init__(
|
def __init__(
|
||||||
self, track_path: str, track_fade_at: int, track_silence_at: int
|
self, track_path: str, track_fade_at: int, track_silence_at: int
|
||||||
@ -97,8 +94,7 @@ class _FadeCurve:
|
|||||||
# Calculate the factor to map milliseconds of track to array
|
# Calculate the factor to map milliseconds of track to array
|
||||||
self.ms_to_array_factor = len(self.graph_array) / (self.end_ms - self.start_ms)
|
self.ms_to_array_factor = len(self.graph_array) / (self.end_ms - self.start_ms)
|
||||||
|
|
||||||
self.curve: Optional[PlotDataItem] = None
|
self.region = None
|
||||||
self.region: Optional[LinearRegionItem] = None
|
|
||||||
|
|
||||||
def clear(self) -> None:
|
def clear(self) -> None:
|
||||||
"""Clear the current graph"""
|
"""Clear the current graph"""
|
||||||
@ -109,8 +105,7 @@ class _FadeCurve:
|
|||||||
def plot(self) -> None:
|
def plot(self) -> None:
|
||||||
if self.GraphWidget:
|
if self.GraphWidget:
|
||||||
self.curve = self.GraphWidget.plot(self.graph_array)
|
self.curve = self.GraphWidget.plot(self.graph_array)
|
||||||
if self.curve:
|
self.curve.setPen(Config.FADE_CURVE_FOREGROUND)
|
||||||
self.curve.setPen(Config.FADE_CURVE_FOREGROUND)
|
|
||||||
|
|
||||||
def tick(self, play_time) -> None:
|
def tick(self, play_time) -> None:
|
||||||
"""Update volume fade curve"""
|
"""Update volume fade curve"""
|
||||||
@ -129,16 +124,15 @@ class _FadeCurve:
|
|||||||
self.GraphWidget.addItem(self.region)
|
self.GraphWidget.addItem(self.region)
|
||||||
|
|
||||||
# Update region position
|
# Update region position
|
||||||
if self.region:
|
log.debug("issue223: _FadeCurve: update region")
|
||||||
log.debug("issue223: _FadeCurve: update region")
|
self.region.setRegion([0, ms_of_graph * self.ms_to_array_factor])
|
||||||
self.region.setRegion([0, ms_of_graph * self.ms_to_array_factor])
|
|
||||||
|
|
||||||
|
|
||||||
class _FadeTrack(QRunnable):
|
class _FadeTrack(QRunnable):
|
||||||
def __init__(self, player: vlc.MediaPlayer, fade_seconds) -> None:
|
def __init__(self, player: vlc.MediaPlayer, fade_seconds) -> None:
|
||||||
super().__init__()
|
super().__init__()
|
||||||
self.player: vlc.MediaPlayer = player
|
self.player = player
|
||||||
self.fade_seconds: int = fade_seconds
|
self.fade_seconds = fade_seconds
|
||||||
|
|
||||||
def run(self) -> None:
|
def run(self) -> None:
|
||||||
"""
|
"""
|
||||||
@ -174,9 +168,9 @@ class _Music:
|
|||||||
def __init__(self, name) -> None:
|
def __init__(self, name) -> None:
|
||||||
self.VLC = vlc.Instance()
|
self.VLC = vlc.Instance()
|
||||||
self.VLC.set_user_agent(name, name)
|
self.VLC.set_user_agent(name, name)
|
||||||
self.player: Optional[vlc.MediaPlayer] = None
|
self.player = None
|
||||||
self.name: str = name
|
self.name = name
|
||||||
self.max_volume: int = Config.VLC_VOLUME_DEFAULT
|
self.max_volume = Config.VLC_VOLUME_DEFAULT
|
||||||
self.start_dt: Optional[dt.datetime] = None
|
self.start_dt: Optional[dt.datetime] = None
|
||||||
|
|
||||||
def adjust_by_ms(self, ms: int) -> None:
|
def adjust_by_ms(self, ms: int) -> None:
|
||||||
@ -188,17 +182,14 @@ class _Music:
|
|||||||
elapsed_ms = self.get_playtime()
|
elapsed_ms = self.get_playtime()
|
||||||
position = self.get_position()
|
position = self.get_position()
|
||||||
if not position:
|
if not position:
|
||||||
position = 0.0
|
position = 0
|
||||||
new_position = max(0.0, position + ((position * ms) / elapsed_ms))
|
new_position = max(0, position + ((position * ms) / elapsed_ms))
|
||||||
self.set_position(new_position)
|
self.set_position(new_position)
|
||||||
# Adjus start time so elapsed time calculations are correct
|
# Adjus start time so elapsed time calculations are correct
|
||||||
if new_position == 0:
|
if new_position == 0:
|
||||||
self.start_dt = dt.datetime.now()
|
self.start_dt = dt.datetime.now()
|
||||||
else:
|
else:
|
||||||
if self.start_dt:
|
self.start_dt -= dt.timedelta(milliseconds=ms)
|
||||||
self.start_dt -= dt.timedelta(milliseconds=ms)
|
|
||||||
else:
|
|
||||||
self.start_dt = dt.datetime.now() - dt.timedelta(milliseconds=ms)
|
|
||||||
|
|
||||||
def stop(self) -> None:
|
def stop(self) -> None:
|
||||||
"""Immediately stop playing"""
|
"""Immediately stop playing"""
|
||||||
@ -244,12 +235,9 @@ class _Music:
|
|||||||
self.player = None
|
self.player = None
|
||||||
|
|
||||||
pool = QThreadPool.globalInstance()
|
pool = QThreadPool.globalInstance()
|
||||||
if pool:
|
fader = _FadeTrack(p, fade_seconds=fade_seconds)
|
||||||
fader = _FadeTrack(p, fade_seconds=fade_seconds)
|
pool.start(fader)
|
||||||
pool.start(fader)
|
self.start_dt = None
|
||||||
self.start_dt = None
|
|
||||||
else:
|
|
||||||
log.error("_Music: failed to allocate QThreadPool")
|
|
||||||
|
|
||||||
def get_playtime(self) -> int:
|
def get_playtime(self) -> int:
|
||||||
"""
|
"""
|
||||||
@ -335,7 +323,7 @@ class _Music:
|
|||||||
log.error(f"Reset from {volume=}")
|
log.error(f"Reset from {volume=}")
|
||||||
sleep(0.1)
|
sleep(0.1)
|
||||||
|
|
||||||
def set_position(self, position: float) -> None:
|
def set_position(self, position: int) -> None:
|
||||||
"""
|
"""
|
||||||
Set player position
|
Set player position
|
||||||
"""
|
"""
|
||||||
@ -351,7 +339,7 @@ class _Music:
|
|||||||
if not self.player:
|
if not self.player:
|
||||||
return
|
return
|
||||||
|
|
||||||
if set_default and volume:
|
if set_default:
|
||||||
self.max_volume = volume
|
self.max_volume = volume
|
||||||
|
|
||||||
if volume is None:
|
if volume is None:
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user