Load crossfade settings into Playback.settings too
This commit is contained in:
parent
c29f4b9b27
commit
3ef3112014
4 changed files with 89 additions and 3 deletions
|
|
@ -1,7 +1,7 @@
|
|||
from ...config.model import MpdConfig
|
||||
from ...playback import Playback
|
||||
from ...playback.queue import Queue
|
||||
from ...playback.settings import Settings, to_oneshot
|
||||
from ...playback.settings import MixRamp, Settings, to_oneshot
|
||||
from ...tools.types import option_fmap
|
||||
from ..types import MpdState
|
||||
from .to_song import to_song
|
||||
|
|
@ -15,6 +15,16 @@ def to_queue(mpd: MpdState) -> Queue:
|
|||
)
|
||||
|
||||
|
||||
def to_mixramp(mpd: MpdState) -> MixRamp:
|
||||
delay = mpd.status.get("mixrampdelay", 0)
|
||||
if delay == "nan":
|
||||
delay = 0
|
||||
return MixRamp(
|
||||
db=float(mpd.status.get("mixrampdb", 0)),
|
||||
delay=float(delay),
|
||||
)
|
||||
|
||||
|
||||
def to_settings(mpd: MpdState) -> Settings:
|
||||
return Settings(
|
||||
volume=option_fmap(int, mpd.status.get("volume")),
|
||||
|
|
@ -22,6 +32,8 @@ def to_settings(mpd: MpdState) -> Settings:
|
|||
random=mpd.status["random"] == "1",
|
||||
single=to_oneshot(mpd.status["single"]),
|
||||
consume=to_oneshot(mpd.status["consume"]),
|
||||
crossfade=int(mpd.status.get("xfade", 0)),
|
||||
mixramp=to_mixramp(mpd),
|
||||
)
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -37,6 +37,20 @@ class StatusResponse(TypedDict):
|
|||
single: OneshotFlag
|
||||
consume: OneshotFlag
|
||||
|
||||
# The configured crossfade time in seconds. Omitted if crossfading isn't
|
||||
# enabled. Fractional seconds are *not* allowed for this field.
|
||||
xfade: NotRequired[str]
|
||||
|
||||
# The volume threshold at which MixRamp-compatible songs will be
|
||||
# overlapped, measured in decibels. Will usually be negative, and is
|
||||
# permitted to be fractional.
|
||||
mixrampdb: NotRequired[str]
|
||||
|
||||
# A number of seconds to subtract from the overlap computed by MixRamp.
|
||||
# Must be positive for MixRamp to work and is permitted to be fractional.
|
||||
# Can be set to "nan" to disable MixRamp and use basic crossfading instead.
|
||||
mixrampdelay: NotRequired[str]
|
||||
|
||||
# Partitions essentially let one MPD server act as multiple music players.
|
||||
# For most folks, this will just be "default", but mpd-now-playable will
|
||||
# eventually support addressing specific partitions. Eventually.
|
||||
|
|
|
|||
|
|
@ -1,5 +1,7 @@
|
|||
from dataclasses import dataclass
|
||||
from typing import Literal
|
||||
from typing import Annotated, Literal
|
||||
|
||||
from annotated_types import Ge
|
||||
|
||||
OneShotFlag = bool | Literal["oneshot"]
|
||||
|
||||
|
|
@ -15,6 +17,19 @@ def to_oneshot(value: str) -> OneShotFlag:
|
|||
return False
|
||||
|
||||
|
||||
@dataclass(slots=True, kw_only=True)
|
||||
class MixRamp:
|
||||
#: The volume threshold at which MPD will overlap MixRamp-analysed songs,
|
||||
#: measured in decibels. Can be set to any float, but sensible values are
|
||||
#: typically negative.
|
||||
db: float
|
||||
|
||||
#: A delay time in seconds which will be subtracted from the MixRamp
|
||||
#: overlap. Must be set to a positive value for MixRamp to work at all -
|
||||
#: will be zero if it's disabled.
|
||||
delay: float
|
||||
|
||||
|
||||
@dataclass(slots=True, kw_only=True)
|
||||
class Settings:
|
||||
#: The playback volume ranging from 0 to 100 - it will only be available if
|
||||
|
|
@ -46,3 +61,16 @@ class Settings:
|
|||
#: to "oneshot", which means the currently playing song will be consumed,
|
||||
#: and then the flag will automatically be switched off.
|
||||
consume: OneShotFlag
|
||||
|
||||
#: The number of seconds to overlap songs when cross-fading between the
|
||||
#: current song and the next. Will be zero when the cross-fading feature is
|
||||
#: disabled entirely. Curiously, fractional seconds are not supported here,
|
||||
#: unlike many other places MPD uses seconds.
|
||||
crossfade: Annotated[int, Ge(0)]
|
||||
|
||||
#: Settings for MixRamp-powered cross-fading, which analyses your songs'
|
||||
#: volume levels to choose optimal places for cross-fading. This requires
|
||||
#: either that the songs have previously been analysed and tagged with
|
||||
#: MixRamp information, or that MPD's on the fly mixramp_analyzer has been
|
||||
#: enabled.
|
||||
mixramp: MixRamp
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue