From f4748086c3fd59fac9a61d87c67f3aab1de899c2 Mon Sep 17 00:00:00 2001 From: Marcel van der Veldt Date: Sat, 15 Mar 2025 18:59:50 +0100 Subject: [PATCH] Fix: don't use single stream mode on flowmode players It causes side effects and more headache than needed --- music_assistant/controllers/player_queues.py | 3 --- music_assistant/controllers/streams.py | 4 ++-- music_assistant/providers/airplay/provider.py | 9 --------- music_assistant/providers/player_group/__init__.py | 6 ------ music_assistant/providers/snapcast/__init__.py | 7 ------- music_assistant/providers/squeezelite/__init__.py | 6 ------ 6 files changed, 2 insertions(+), 33 deletions(-) diff --git a/music_assistant/controllers/player_queues.py b/music_assistant/controllers/player_queues.py index a3f38614..a68620a4 100644 --- a/music_assistant/controllers/player_queues.py +++ b/music_assistant/controllers/player_queues.py @@ -777,9 +777,6 @@ class PlayerQueuesController(CoreController): queue.index_in_buffer = index queue.flow_mode_stream_log = [] queue.flow_mode = await self.mass.config.get_player_config_value(queue_id, CONF_FLOW_MODE) - # no point in enabling flow mode for radio sources - if queue_item.media_type == MediaType.RADIO: - queue.flow_mode = False queue.current_item = queue_item # handle resume point of audiobook(chapter) or podcast(episode) diff --git a/music_assistant/controllers/streams.py b/music_assistant/controllers/streams.py index c2d43b2d..1eb3f4fc 100644 --- a/music_assistant/controllers/streams.py +++ b/music_assistant/controllers/streams.py @@ -805,7 +805,7 @@ class StreamsController(CoreController): pcm_format=pcm_format, ): # buffer size needs to be big enough to include the crossfade part - req_buffer_size = pcm_sample_size * 2 if not use_crossfade else crossfade_size + req_buffer_size = pcm_sample_size if not use_crossfade else crossfade_size # ALWAYS APPEND CHUNK TO BUFFER buffer += chunk @@ -1006,7 +1006,7 @@ class StreamsController(CoreController): # for radio stations (or other live streams) that do not provide any look ahead buffer # without this, some radio streams jitter a lot, especially with dynamic normalization, # if the stream does not provide a look ahead buffer - pad_silence_seconds = 2 + pad_silence_seconds = 4 first_chunk_received = False async for chunk in get_media_stream( diff --git a/music_assistant/providers/airplay/provider.py b/music_assistant/providers/airplay/provider.py index e01aa0fb..f08c895c 100644 --- a/music_assistant/providers/airplay/provider.py +++ b/music_assistant/providers/airplay/provider.py @@ -335,15 +335,6 @@ class AirplayProvider(PlayerProvider): ugp_stream = ugp_provider.ugp_streams[media.queue_id] input_format = ugp_stream.base_pcm_format audio_source = ugp_stream.subscribe_raw() - elif media.media_type == MediaType.RADIO and media.queue_id and media.queue_item_id: - # use single item stream request for radio streams - input_format = AIRPLAY_PCM_FORMAT - queue_item = self.mass.player_queues.get_item(media.queue_id, media.queue_item_id) - assert queue_item is not None # for type checking - audio_source = self.mass.streams.get_queue_item_stream( - queue_item=queue_item, - pcm_format=AIRPLAY_PCM_FORMAT, - ) elif media.queue_id and media.queue_item_id: # regular queue (flow) stream request input_format = AIRPLAY_FLOW_PCM_FORMAT diff --git a/music_assistant/providers/player_group/__init__.py b/music_assistant/providers/player_group/__init__.py index 42f83e2d..efa1b6c1 100644 --- a/music_assistant/providers/player_group/__init__.py +++ b/music_assistant/providers/player_group/__init__.py @@ -465,12 +465,6 @@ class PlayerGroupProvider(PlayerProvider): output_format=UGP_FORMAT, player_id=media.custom_data["player_id"], ) - elif media.media_type == MediaType.RADIO: - # use single item stream request for radio streams - audio_source = self.mass.streams.get_queue_item_stream( - queue_item=self.mass.player_queues.get_item(media.queue_id, media.queue_item_id), - pcm_format=UGP_FORMAT, - ) elif media.queue_id and media.queue_item_id: # regular queue stream request audio_source = self.mass.streams.get_queue_flow_stream( diff --git a/music_assistant/providers/snapcast/__init__.py b/music_assistant/providers/snapcast/__init__.py index 904eaacc..108f4599 100644 --- a/music_assistant/providers/snapcast/__init__.py +++ b/music_assistant/providers/snapcast/__init__.py @@ -567,13 +567,6 @@ class SnapCastProvider(PlayerProvider): ugp_stream = ugp_provider.ugp_streams[media.queue_id] input_format = ugp_stream.base_pcm_format audio_source = ugp_stream.subscribe_raw() - elif media.media_type == MediaType.RADIO: - # use single item stream request for radio streams - input_format = DEFAULT_SNAPCAST_FORMAT - audio_source = self.mass.streams.get_queue_item_stream( - queue_item=self.mass.player_queues.get_item(media.queue_id, media.queue_item_id), - pcm_format=DEFAULT_SNAPCAST_FORMAT, - ) elif media.queue_id and media.queue_item_id: # regular queue (flow) stream request input_format = DEFAULT_SNAPCAST_PCM_FORMAT diff --git a/music_assistant/providers/squeezelite/__init__.py b/music_assistant/providers/squeezelite/__init__.py index 60c95416..746785ed 100644 --- a/music_assistant/providers/squeezelite/__init__.py +++ b/music_assistant/providers/squeezelite/__init__.py @@ -399,12 +399,6 @@ class SlimprotoProvider(PlayerProvider): ugp_stream = ugp_provider.ugp_streams[media.queue_id] # Filter is later applied in MultiClientStream audio_source = ugp_stream.get_stream(master_audio_format, filter_params=None) - elif media.media_type == MediaType.RADIO: - # use single item stream request for radio streams - audio_source = self.mass.streams.get_queue_item_stream( - queue_item=self.mass.player_queues.get_item(media.queue_id, media.queue_item_id), - pcm_format=master_audio_format, - ) elif media.queue_id and media.queue_item_id: # regular queue stream request audio_source = self.mass.streams.get_queue_flow_stream( -- 2.34.1