@@ -146,6 +146,7 @@ def __init__(self):
146146 self .media_start_time = 0
147147 self .now_playing = None
148148 self .next_media_update = 0
149+ self .fadeout = False
149150
150151 self .show_data = None
151152 self .playlist = None
@@ -351,6 +352,7 @@ def play_media(self, media, offset, present_time):
351352 self .end_time ()
352353 and self .media_start_time + media ["duration" ] > self .end_time ()
353354 ):
355+ self .fadeout = True
354356 self .ctrl .add_request (
355357 start_time = self .media_start_time ,
356358 end_time = self .end_time (),
@@ -362,8 +364,10 @@ def play_media(self, media, offset, present_time):
362364 order_num = media ["order_num" ],
363365 artist = media ["artist" ],
364366 title = media ["title" ],
367+ mixerend = ['primary_on' , {}], # restore the mixer from fade-out when the track stops
365368 )
366369 else :
370+ self .fadeout = False
367371 self .ctrl .add_request (
368372 start_time = self .media_start_time ,
369373 media_type = media ["media_type" ],
@@ -566,6 +570,10 @@ def __init__(self, first_sync=False):
566570 self .lock = threading .Lock ()
567571 self .first_sync = first_sync
568572
573+ self .showfade_ctrl = obplayer .Player .create_controller (
574+ "showfade" , priority = 50 , default_play_mode = "overlap" , allow_overlay = True
575+ )
576+
569577 self .voicetrack_ctrl = obplayer .Player .create_controller (
570578 "voicetrack" , priority = 50 , default_play_mode = "overlap" , allow_overlay = True
571579 )
@@ -579,30 +587,42 @@ def __init__(self, first_sync=False):
579587
580588 self .voicetrack_ctrl .set_request_callback (self .do_voicetrack_request )
581589 self .voicetrack_ctrl .set_update_callback (self .do_voicetrack_update )
590+
591+ self .showfade_duration = float (obplayer .Config .setting ("fade_duration" , 5 ))
592+ self .showfade_ctrl .set_request_callback (self .do_showfade_request )
593+ self .showfade_ctrl .set_update_callback (self .do_showfade_update )
582594
583595 self .present_show = None
584596 self .next_show_update = 0
585597
586- # initial request?
598+ def do_showfade_request (self , ctrl , present_time , media_class ):
599+ self .do_showfade_update (ctrl , present_time )
600+
601+ def do_showfade_update (self , ctrl , present_time ):
602+ self .showfade_ctrl .set_next_update (present_time + 0.25 )
603+ if self .present_show and type (self .present_show ) is ObShow and self .present_show .fadeout :
604+ ending_in = self .present_show .end_time () - present_time
605+ fade_duration = self .showfade_duration # adding 0.25 to account for this only being called every 0.25, so we might be late
606+
607+ if (ending_in <= (fade_duration + 0.25 )):
608+ obplayer .Player .outputs ["mixer" ].fade (
609+ {
610+ "element" : "mixer-primary-volume" ,
611+ "volume" : 0.0 ,
612+ "time" : self .showfade_duration
613+ }
614+ )
615+
616+ self .present_show .fadeout = False
617+
587618 def do_voicetrack_request (self , ctrl , present_time , media_class ):
588619 self .do_voicetrack_update (ctrl , present_time )
589620
590- # update request after initial?
591621 def do_voicetrack_update (self , ctrl , present_time ):
592622 self .voicetrack_ctrl .set_next_update (present_time + 0.25 )
593623 if self .present_show :
594624 self .present_show .play_current_voicetrack (present_time )
595625
596- # self.check_show(present_time)
597-
598- # if self.present_show is not None:
599- # self.present_show.play_next_voicetrack(present_time)
600-
601- # self.set_voicetrack_update(present_time)
602-
603- def set_voicetrack_update (self , present_time ):
604- self .voicetrack_ctrl .set_next_update (present_time + 0.25 )
605-
606626 def do_player_request (self , ctrl , present_time , media_class ):
607627 self .check_show (present_time )
608628
0 commit comments