Fade in/out volume
This commit is contained in:
parent
36818f6bdc
commit
d3d3d4d040
|
@ -3,7 +3,6 @@
|
||||||
A wake-up light for Raspberry Pi
|
A wake-up light for Raspberry Pi
|
||||||
|
|
||||||
# To do / ideas in no specific order:
|
# To do / ideas in no specific order:
|
||||||
* themes
|
|
||||||
* theme automatic (switch at intensity = 50% + simulate sunrise with background)
|
* theme automatic (switch at intensity = 50% + simulate sunrise with background)
|
||||||
* store / recall settings
|
* store / recall settings
|
||||||
* calendar
|
* calendar
|
||||||
|
@ -11,4 +10,3 @@ A wake-up light for Raspberry Pi
|
||||||
* moonshine (esp32 + ledstrip + MQTT)
|
* moonshine (esp32 + ledstrip + MQTT)
|
||||||
* bluetooth speaker: https://www.collabora.com/news-and-blog/blog/2022/09/02/using-a-raspberry-pi-as-a-bluetooth-speaker-with-pipewire-wireplumber/
|
* bluetooth speaker: https://www.collabora.com/news-and-blog/blog/2022/09/02/using-a-raspberry-pi-as-a-bluetooth-speaker-with-pipewire-wireplumber/
|
||||||
* replace VLC with GStreamer
|
* replace VLC with GStreamer
|
||||||
* fade volume
|
|
||||||
|
|
49
clock.py
49
clock.py
|
@ -199,6 +199,11 @@ class MyClockWidget(FloatLayout):
|
||||||
intensity_target_prev = None
|
intensity_target_prev = None
|
||||||
rgbw_prev = None
|
rgbw_prev = None
|
||||||
|
|
||||||
|
volume_target = 0
|
||||||
|
volume_prev = 0
|
||||||
|
volume_curr = 0
|
||||||
|
volume_target_prev = None
|
||||||
|
|
||||||
# Ugly workaround for issue with Kivy and Raspberry Pi 3 + touch screen
|
# Ugly workaround for issue with Kivy and Raspberry Pi 3 + touch screen
|
||||||
# For each type of touch event, handling of the event is ignored until the last event is more than touch_delay_time seconds old
|
# For each type of touch event, handling of the event is ignored until the last event is more than touch_delay_time seconds old
|
||||||
touch_delay_time = 0.1
|
touch_delay_time = 0.1
|
||||||
|
@ -379,6 +384,11 @@ class MyClockWidget(FloatLayout):
|
||||||
x.add_widget(b)
|
x.add_widget(b)
|
||||||
self.settings_menu_wake_up_sound_Ok_button = b
|
self.settings_menu_wake_up_sound_Ok_button = b
|
||||||
|
|
||||||
|
def set_volume(self, x):
|
||||||
|
self.mixer.setvolume(int(x * 100))
|
||||||
|
self.volume_prev = self.volume_curr
|
||||||
|
self.volume_curr = x
|
||||||
|
|
||||||
def play_sound(self, source):
|
def play_sound(self, source):
|
||||||
alarm_settings = App.get_running_app().alarm_settings
|
alarm_settings = App.get_running_app().alarm_settings
|
||||||
|
|
||||||
|
@ -388,6 +398,7 @@ class MyClockWidget(FloatLayout):
|
||||||
(self.player.get_state() == vlc.State.Ended) or \
|
(self.player.get_state() == vlc.State.Ended) or \
|
||||||
(self.player.get_state() == vlc.State.Error):
|
(self.player.get_state() == vlc.State.Error):
|
||||||
print("beep beep! " + source)
|
print("beep beep! " + source)
|
||||||
|
self.volume_target = alarm_settings.volume / 20.0
|
||||||
media = self.vlc.media_new(source)
|
media = self.vlc.media_new(source)
|
||||||
self.player.set_media(media)
|
self.player.set_media(media)
|
||||||
self.player.play()
|
self.player.play()
|
||||||
|
@ -646,6 +657,27 @@ class MyClockWidget(FloatLayout):
|
||||||
|
|
||||||
self.intensity_curr = self.intensity_curr + step
|
self.intensity_curr = self.intensity_curr + step
|
||||||
|
|
||||||
|
def process_volume_state(self):
|
||||||
|
alarm_settings = App.get_running_app().alarm_settings
|
||||||
|
|
||||||
|
if (alarm_settings.alarm_playing) and (self.player.get_state() == vlc.State.Playing):
|
||||||
|
step = 0.005
|
||||||
|
|
||||||
|
if (self.volume_curr <= self.volume_target):
|
||||||
|
if (self.volume_curr + step > self.volume_target):
|
||||||
|
step = self.volume_target - self.volume_curr
|
||||||
|
else:
|
||||||
|
step = -step
|
||||||
|
if (self.volume_curr + step < self.volume_target):
|
||||||
|
step = self.volume_target - self.volume_curr
|
||||||
|
|
||||||
|
if step != 0:
|
||||||
|
volume_next = self.volume_curr + step
|
||||||
|
self.set_volume(volume_next)
|
||||||
|
|
||||||
|
if volume_next == 0:
|
||||||
|
self.stop_sound()
|
||||||
|
|
||||||
def check_play_sound(self):
|
def check_play_sound(self):
|
||||||
alarm_settings = App.get_running_app().alarm_settings
|
alarm_settings = App.get_running_app().alarm_settings
|
||||||
|
|
||||||
|
@ -677,6 +709,7 @@ class MyClockWidget(FloatLayout):
|
||||||
self.set_leds()
|
self.set_leds()
|
||||||
self.update_backlight()
|
self.update_backlight()
|
||||||
self.check_play_sound()
|
self.check_play_sound()
|
||||||
|
self.process_volume_state()
|
||||||
|
|
||||||
def update_clock(self):
|
def update_clock(self):
|
||||||
self.draw_list_curr_frame.append(["self.hide_widget", self.ids["face_plate"], False])
|
self.draw_list_curr_frame.append(["self.hide_widget", self.ids["face_plate"], False])
|
||||||
|
@ -981,9 +1014,9 @@ class MyClockWidget(FloatLayout):
|
||||||
|
|
||||||
print("Volume changed to " + str(alarm_settings.volume))
|
print("Volume changed to " + str(alarm_settings.volume))
|
||||||
|
|
||||||
# Volume is in 0-100 range
|
|
||||||
old_vol = self.mixer.getvolume()
|
old_vol = self.mixer.getvolume()
|
||||||
self.mixer.setvolume(int(alarm_settings.volume * 5.0))
|
self.volume_target = alarm_settings.volume / 20.0
|
||||||
|
self.set_volume(self.volume_target)
|
||||||
new_vol = self.mixer.getvolume()
|
new_vol = self.mixer.getvolume()
|
||||||
print("HW volume changed from " + str(old_vol) + " to " + str(new_vol))
|
print("HW volume changed from " + str(old_vol) + " to " + str(new_vol))
|
||||||
|
|
||||||
|
@ -1017,6 +1050,8 @@ class MyClockWidget(FloatLayout):
|
||||||
elif self.light_state == "reading":
|
elif self.light_state == "reading":
|
||||||
self.light_state = "off"
|
self.light_state = "off"
|
||||||
self.intensity_target = 0
|
self.intensity_target = 0
|
||||||
|
if alarm_settings.alarm_playing:
|
||||||
|
self.volume_target = 0
|
||||||
elif self.light_state == "sunrise":
|
elif self.light_state == "sunrise":
|
||||||
# allow enabling reading mode when sunrise has not yet reached that level
|
# allow enabling reading mode when sunrise has not yet reached that level
|
||||||
if self.intensity_target < alarm_settings.reading_light_brightness / 20.0:
|
if self.intensity_target < alarm_settings.reading_light_brightness / 20.0:
|
||||||
|
@ -1028,14 +1063,12 @@ class MyClockWidget(FloatLayout):
|
||||||
elif self.light_state == "on":
|
elif self.light_state == "on":
|
||||||
self.light_state = "reading"
|
self.light_state = "reading"
|
||||||
self.intensity_target = 0
|
self.intensity_target = 0
|
||||||
if alarm_settings.alarm_playing:
|
|
||||||
self.stop_sound()
|
|
||||||
|
|
||||||
def on_play_button_pressed(self):
|
def on_play_button_pressed(self):
|
||||||
print("play button pressed from view " + self.view)
|
print("play button pressed from view " + self.view)
|
||||||
alarm_settings = App.get_running_app().alarm_settings
|
alarm_settings = App.get_running_app().alarm_settings
|
||||||
if alarm_settings.alarm_playing:
|
if alarm_settings.alarm_playing:
|
||||||
self.stop_sound()
|
self.volume_target = 0
|
||||||
else:
|
else:
|
||||||
self.play_sound(alarm_settings.sound_source)
|
self.play_sound(alarm_settings.sound_source)
|
||||||
|
|
||||||
|
@ -1238,7 +1271,7 @@ class MyClockWidget(FloatLayout):
|
||||||
elif self.view == "settings_menu_theme_select":
|
elif self.view == "settings_menu_theme_select":
|
||||||
pass
|
pass
|
||||||
elif self.view == "clock":
|
elif self.view == "clock":
|
||||||
self.stop_sound()
|
self.volume_target = 0
|
||||||
|
|
||||||
super(MyClockWidget, self).on_touch_down(touch)
|
super(MyClockWidget, self).on_touch_down(touch)
|
||||||
|
|
||||||
|
@ -1322,9 +1355,9 @@ class MyApp(App):
|
||||||
if is_arm():
|
if is_arm():
|
||||||
Window.borderless = True
|
Window.borderless = True
|
||||||
|
|
||||||
# Volume is in 0-100 range
|
# Volume is in 0-1.0 range
|
||||||
old_vol = clock_widget.mixer.getvolume()
|
old_vol = clock_widget.mixer.getvolume()
|
||||||
clock_widget.mixer.setvolume(int(self.alarm_settings.volume * 5.0))
|
clock_widget.volume_target = self.alarm_settings.volume / 20.0
|
||||||
new_vol = clock_widget.mixer.getvolume()
|
new_vol = clock_widget.mixer.getvolume()
|
||||||
print("HW volume changed from " + str(old_vol) + " to " + str(new_vol))
|
print("HW volume changed from " + str(old_vol) + " to " + str(new_vol))
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue