From bbd6c6a3ab3b21b0c83cc396a63c1ba77aa33caa Mon Sep 17 00:00:00 2001 From: Marcel van der Veldt Date: Sat, 8 Jul 2023 01:25:42 +0200 Subject: [PATCH] Configurable crossfade duration for flow stream (#748) configurable crossfade duration for flow stream --- music_assistant/common/models/config_entries.py | 4 +++- music_assistant/server/controllers/streams.py | 5 ++++- .../server/providers/slimproto/__init__.py | 11 ++++++++++- 3 files changed, 17 insertions(+), 3 deletions(-) diff --git a/music_assistant/common/models/config_entries.py b/music_assistant/common/models/config_entries.py index 2085aa30d..82669913b 100644 --- a/music_assistant/common/models/config_entries.py +++ b/music_assistant/common/models/config_entries.py @@ -414,10 +414,11 @@ class CoreConfig(Config): CONF_ENTRY_CROSSFADE_DURATION = ConfigEntry( key=CONF_CROSSFADE_DURATION, type=ConfigEntryType.INTEGER, - range=(0, 12), + range=(1, 20), default_value=8, label="Crossfade duration", description="Duration in seconds of the crossfade between tracks (if enabled)", + depends_on=CONF_FLOW_MODE, advanced=True, ) @@ -445,4 +446,5 @@ class CoreConfig(Config): CONF_ENTRY_EQ_MID, CONF_ENTRY_EQ_TREBLE, CONF_ENTRY_OUTPUT_CHANNELS, + CONF_ENTRY_CROSSFADE_DURATION, ) diff --git a/music_assistant/server/controllers/streams.py b/music_assistant/server/controllers/streams.py index 6d7ce67f4..7f576e67e 100644 --- a/music_assistant/server/controllers/streams.py +++ b/music_assistant/server/controllers/streams.py @@ -27,6 +27,7 @@ from music_assistant.constants import ( CONF_BIND_IP, CONF_BIND_PORT, + CONF_CROSSFADE_DURATION, CONF_EQ_BASS, CONF_EQ_MID, CONF_EQ_TREBLE, @@ -802,7 +803,9 @@ async def get_flow_stream( # set some basic vars pcm_sample_size = int(pcm_format.sample_rate * (pcm_format.bit_depth / 8) * 2) - crossfade_duration = 10 # TODO: grab from config + crossfade_duration = self.mass.config.get_raw_player_config_value( + queue.queue_id, CONF_CROSSFADE_DURATION, 8 + ) crossfade_size = int(pcm_sample_size * crossfade_duration) queue_track.streamdetails.seconds_skipped = seek_position buffer_size = crossfade_size if use_crossfade else int(pcm_sample_size * 2) diff --git a/music_assistant/server/providers/slimproto/__init__.py b/music_assistant/server/providers/slimproto/__init__.py index 9a6c704c4..4e499463a 100644 --- a/music_assistant/server/providers/slimproto/__init__.py +++ b/music_assistant/server/providers/slimproto/__init__.py @@ -17,7 +17,6 @@ from aioslimproto.discovery import start_discovery from music_assistant.common.models.config_entries import ( - CONF_ENTRY_CROSSFADE_DURATION, CONF_ENTRY_OUTPUT_CODEC, ConfigEntry, ConfigValueOption, @@ -79,6 +78,16 @@ class SyncPlayPoint: DEFAULT_PLAYER_VOLUME = 20 DEFAULT_SLIMPROTO_PORT = 3483 +CONF_ENTRY_CROSSFADE_DURATION = ConfigEntry( + key=CONF_CROSSFADE_DURATION, + type=ConfigEntryType.INTEGER, + range=(1, 10), + default_value=8, + label="Crossfade duration", + description="Duration in seconds of the crossfade between tracks (if enabled)", + advanced=True, +) + async def setup( mass: MusicAssistant, manifest: ProviderManifest, config: ProviderConfig