Configurable crossfade duration for flow stream (#748)
authorMarcel van der Veldt <m.vanderveldt@outlook.com>
Fri, 7 Jul 2023 23:25:42 +0000 (01:25 +0200)
committerGitHub <noreply@github.com>
Fri, 7 Jul 2023 23:25:42 +0000 (01:25 +0200)
configurable crossfade duration for flow stream

music_assistant/common/models/config_entries.py
music_assistant/server/controllers/streams.py
music_assistant/server/providers/slimproto/__init__.py

index 2085aa30d95c69030681319aad7bcb4ac840d716..82669913bfbb4e5e681161845944b5439ad6980c 100644 (file)
@@ -414,10 +414,11 @@ CONF_ENTRY_HIDE_GROUP_MEMBERS = ConfigEntry(
 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 @@ DEFAULT_PLAYER_CONFIG_ENTRIES = (
     CONF_ENTRY_EQ_MID,
     CONF_ENTRY_EQ_TREBLE,
     CONF_ENTRY_OUTPUT_CHANNELS,
+    CONF_ENTRY_CROSSFADE_DURATION,
 )
index 6d7ce67f405c114565884dd3e795315c8a777b40..7f576e67ed52189d483d7e60d6a2806db095eac6 100644 (file)
@@ -27,6 +27,7 @@ from music_assistant.common.models.queue_item import QueueItem
 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 @@ class StreamsController(CoreController):
 
             # 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)
index 9a6c704c4b61574915b48c27d51a668f6b0c4c5e..4e499463abc07fd34f0574c06e33694daaa2b1be 100644 (file)
@@ -17,7 +17,6 @@ from aioslimproto.const import EventType as SlimEventType
 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 @@ CONF_DISCOVERY = "discovery"
 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