Support for custom audio volume for alarms
This commit is contained in:
parent
2d3c61173d
commit
fb17aafe53
2 changed files with 13 additions and 5 deletions
|
@ -29,6 +29,7 @@ class Alarm:
|
|||
|
||||
def __init__(self, when: str, actions: Optional[list] = None, name: Optional[str] = None,
|
||||
audio_file: Optional[str] = None, audio_plugin: Optional[str] = None,
|
||||
audio_volume: Optional[Union[int, float]] = None,
|
||||
snooze_interval: float = 300.0, enabled: bool = True):
|
||||
with self._id_lock:
|
||||
self._alarms_count += 1
|
||||
|
@ -43,6 +44,7 @@ class Alarm:
|
|||
assert os.path.isfile(self.audio_file), 'No such audio file: {}'.format(self.audio_file)
|
||||
|
||||
self.audio_plugin = audio_plugin
|
||||
self.audio_volume = audio_volume
|
||||
self.snooze_interval = snooze_interval
|
||||
self.state: Optional[AlarmState] = None
|
||||
self.timer: Optional[threading.Timer] = None
|
||||
|
@ -109,6 +111,8 @@ class Alarm:
|
|||
def play_audio(self):
|
||||
def thread():
|
||||
self._get_audio_plugin().play(self.audio_file)
|
||||
if self.audio_volume is not None:
|
||||
self._get_audio_plugin().set_volume(self.audio_volume)
|
||||
|
||||
self.state = AlarmState.RUNNING
|
||||
audio_thread = threading.Thread(target=thread)
|
||||
|
@ -192,6 +196,8 @@ class AlarmBackend(Backend):
|
|||
morning_alarm:
|
||||
when: '0 7 * * 1-5' # Cron expression format: run every weekday at 7 AM
|
||||
audio_file: ~/path/your_ringtone.mp3
|
||||
audio_plugin: media.mplayer
|
||||
audio_volume: 10 # 10%
|
||||
snooze_interval: 300 # 5 minutes snooze
|
||||
actions:
|
||||
- action: tts.say
|
||||
|
@ -226,9 +232,9 @@ class AlarmBackend(Backend):
|
|||
self.alarms: Dict[str, Alarm] = {alarm.name: alarm for alarm in alarms}
|
||||
|
||||
def add_alarm(self, when: str, actions: list, name: Optional[str] = None, audio_file: Optional[str] = None,
|
||||
enabled: bool = True) -> Alarm:
|
||||
audio_volume: Optional[Union[int, float]] = None, enabled: bool = True) -> Alarm:
|
||||
alarm = Alarm(when=when, actions=actions, name=name, enabled=enabled, audio_file=audio_file,
|
||||
audio_plugin=self.audio_plugin)
|
||||
audio_plugin=self.audio_plugin, audio_volume=audio_volume)
|
||||
|
||||
if alarm.name in self.alarms:
|
||||
self.logger.info('Overwriting existing alarm {}'.format(alarm.name))
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
from typing import Optional, Dict, Any, List
|
||||
from typing import Optional, Dict, Any, List, Union
|
||||
|
||||
from platypush.backend.alarm import AlarmBackend
|
||||
from platypush.context import get_backend
|
||||
|
@ -21,7 +21,8 @@ class AlarmPlugin(Plugin):
|
|||
|
||||
@action
|
||||
def add(self, when: str, actions: Optional[list] = None, name: Optional[str] = None,
|
||||
audio_file: Optional[str] = None, enabled: bool = True) -> str:
|
||||
audio_file: Optional[str] = None, audio_volume: Optional[Union[int, float]] = None,
|
||||
enabled: bool = True) -> str:
|
||||
"""
|
||||
Add a new alarm. NOTE: alarms that aren't configured in the :class:`platypush.backend.alarm.AlarmBackend`
|
||||
will only run in the current session. If you want an alarm to be permanently stored, you should configure
|
||||
|
@ -33,11 +34,12 @@ class AlarmPlugin(Plugin):
|
|||
:param actions: List of actions to be executed.
|
||||
:param name: Alarm name.
|
||||
:param audio_file: Path of the audio file to be played.
|
||||
:param audio_volume: Volume of the audio.
|
||||
:param enabled: Whether the new alarm should be enabled (default: True).
|
||||
:return: The alarm name.
|
||||
"""
|
||||
alarm = self._get_backend().add_alarm(when=when, audio_file=audio_file, actions=actions or [],
|
||||
name=name, enabled=enabled)
|
||||
name=name, enabled=enabled, audio_volume=audio_volume)
|
||||
return alarm.name
|
||||
|
||||
@action
|
||||
|
|
Loading…
Reference in a new issue