add lock to soundlib volume utility
This commit is contained in:
parent
4cf3328339
commit
624574df3d
53
soundLib.py
53
soundLib.py
|
@ -2,7 +2,7 @@
|
||||||
Implements all sound functionality
|
Implements all sound functionality
|
||||||
'''
|
'''
|
||||||
import logging, os, hashlib, queue, time, psutil
|
import logging, os, hashlib, queue, time, psutil
|
||||||
from threading import Event
|
from threading import Event, RLock
|
||||||
from exceptionThreading import ExceptionThread, async
|
from exceptionThreading import ExceptionThread, async
|
||||||
from pygame import mixer
|
from pygame import mixer
|
||||||
from subprocess import call
|
from subprocess import call
|
||||||
|
@ -114,6 +114,7 @@ class SoundLib:
|
||||||
|
|
||||||
self._ttsQueue = queue.Queue()
|
self._ttsQueue = queue.Queue()
|
||||||
self._stopper = Event()
|
self._stopper = Event()
|
||||||
|
self._lock = RLock()
|
||||||
|
|
||||||
def start(self):
|
def start(self):
|
||||||
self._startMonitor()
|
self._startMonitor()
|
||||||
|
@ -137,42 +138,44 @@ class SoundLib:
|
||||||
|
|
||||||
@async(daemon=False)
|
@async(daemon=False)
|
||||||
def _fader(self, lowerVolume, totalDuration, fadeDuration=0.2, stepSize=5):
|
def _fader(self, lowerVolume, totalDuration, fadeDuration=0.2, stepSize=5):
|
||||||
alarm = self.soundEffects['triggered']
|
with self._lock:
|
||||||
alarmVolume = alarm.volume
|
alarm = self.soundEffects['triggered']
|
||||||
alarmVolumeDelta = alarmVolume - lowerVolume
|
alarmVolume = alarm.volume
|
||||||
|
alarmVolumeDelta = alarmVolume - lowerVolume
|
||||||
|
|
||||||
masterVolume = self.volume
|
masterVolume = self.volume
|
||||||
masterVolumeDelta = self.volume - lowerVolume
|
masterVolumeDelta = self.volume - lowerVolume
|
||||||
|
|
||||||
sleepFadeTime = fadeDuration / stepSize
|
sleepFadeTime = fadeDuration / stepSize
|
||||||
|
|
||||||
for i in range(0, stepSize):
|
for i in range(0, stepSize):
|
||||||
if alarmVolumeDelta > 0:
|
if alarmVolumeDelta > 0:
|
||||||
alarm.set_volume(alarmVolume - alarmVolumeDelta * i / stepSize, force=True)
|
alarm.set_volume(alarmVolume - alarmVolumeDelta * i / stepSize, force=True)
|
||||||
|
|
||||||
if masterVolumeDelta > 0:
|
if masterVolumeDelta > 0:
|
||||||
self._applyVolumesToSounds(masterVolume - masterVolumeDelta * i / stepSize)
|
self._applyVolumesToSounds(masterVolume - masterVolumeDelta * i / stepSize)
|
||||||
|
|
||||||
time.sleep(sleepFadeTime)
|
time.sleep(sleepFadeTime)
|
||||||
|
|
||||||
time.sleep(totalDuration - 2 * fadeDuration)
|
time.sleep(totalDuration - 2 * fadeDuration)
|
||||||
|
|
||||||
for i in range(stepSize - 1, -1, -1):
|
for i in range(stepSize - 1, -1, -1):
|
||||||
if alarmVolumeDelta > 0:
|
if alarmVolumeDelta > 0:
|
||||||
alarm.set_volume(alarmVolume - alarmVolumeDelta * i / stepSize, force=True)
|
alarm.set_volume(alarmVolume - alarmVolumeDelta * i / stepSize, force=True)
|
||||||
|
|
||||||
if masterVolumeDelta > 0:
|
if masterVolumeDelta > 0:
|
||||||
self._applyVolumesToSounds(masterVolume - masterVolumeDelta * i / stepSize)
|
self._applyVolumesToSounds(masterVolume - masterVolumeDelta * i / stepSize)
|
||||||
|
|
||||||
time.sleep(sleepFadeTime)
|
time.sleep(sleepFadeTime)
|
||||||
|
|
||||||
# will not change sounds that have preset volume
|
# will not change sounds that have preset volume
|
||||||
def _applyVolumesToSounds(self, volume):
|
def _applyVolumesToSounds(self, volume):
|
||||||
self.volume = volume
|
with self._lock:
|
||||||
v = volume/100
|
self.volume = volume
|
||||||
s = self.soundEffects
|
v = volume/100
|
||||||
for name, sound in s.items():
|
s = self.soundEffects
|
||||||
sound.set_volume(v)
|
for name, sound in s.items():
|
||||||
|
sound.set_volume(v)
|
||||||
|
|
||||||
def _ttsMonitor(self):
|
def _ttsMonitor(self):
|
||||||
q = self._ttsQueue
|
q = self._ttsQueue
|
||||||
|
|
Loading…
Reference in New Issue