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)
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
# 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(
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
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(
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
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(