add playFrequence to outputManager

This commit is contained in:
Chrys 2021-05-19 11:06:44 +02:00
parent 9ab92174e3
commit 7a1f93607d
3 changed files with 58 additions and 29 deletions

View File

@ -18,12 +18,13 @@ class fenrirManager():
if not cliArgs: if not cliArgs:
return return
try: try:
self.environment = settingsManager.settingsManager().initFenrirConfig(cliArgs, self) self.environment = settingsManager.settingsManager().initFenrirConfig(cliArgs, self)
if not self.environment: if not self.environment:
raise RuntimeError('Cannot Initialize. Maybe the configfile is not available or not parseable') raise RuntimeError('Cannot Initialize. Maybe the configfile is not available or not parseable')
except RuntimeError: except RuntimeError:
raise raise
self.environment['runtime']['outputManager'].presentText(_("Start Fenrir"), soundIcon='ScreenReaderOn', interrupt=True) self.environment['runtime']['outputManager'].playFrequence(500, 500, interrupt=True)
#self.environment['runtime']['outputManager'].presentText(_("Start Fenrir"), soundIcon='ScreenReaderOn', interrupt=True)
signal.signal(signal.SIGINT, self.captureSignal) signal.signal(signal.SIGINT, self.captureSignal)
signal.signal(signal.SIGTERM, self.captureSignal) signal.signal(signal.SIGTERM, self.captureSignal)
self.initialized = True self.initialized = True

View File

@ -29,14 +29,14 @@ class outputManager():
return return
self.env['runtime']['debug'].writeDebugOut("presentText:\nsoundIcon:'"+soundIcon+"'\nText:\n" + text ,debug.debugLevel.INFO) self.env['runtime']['debug'].writeDebugOut("presentText:\nsoundIcon:'"+soundIcon+"'\nText:\n" + text ,debug.debugLevel.INFO)
if self.playSoundIcon(soundIcon, interrupt): if self.playSoundIcon(soundIcon, interrupt):
self.env['runtime']['debug'].writeDebugOut("soundIcon found" ,debug.debugLevel.INFO) self.env['runtime']['debug'].writeDebugOut("soundIcon found" ,debug.debugLevel.INFO)
return return
if (len(text) > 1) and (text.strip(string.whitespace) == ''): if (len(text) > 1) and (text.strip(string.whitespace) == ''):
return return
toAnnounceCapital = announceCapital and text[0].isupper() toAnnounceCapital = announceCapital and text[0].isupper()
if toAnnounceCapital: if toAnnounceCapital:
if self.playSoundIcon('capital', False): if self.playSoundIcon('capital', False):
toAnnounceCapital = False toAnnounceCapital = False
self.lastEcho = text self.lastEcho = text
self.speakText(text, interrupt, ignorePunctuation,toAnnounceCapital) self.speakText(text, interrupt, ignorePunctuation,toAnnounceCapital)
if flush: if flush:
@ -89,7 +89,7 @@ class outputManager():
self.env['runtime']['debug'].writeDebugOut("setting speech module in outputManager.speakText",debug.debugLevel.ERROR) self.env['runtime']['debug'].writeDebugOut("setting speech module in outputManager.speakText",debug.debugLevel.ERROR)
self.env['runtime']['debug'].writeDebugOut(str(e),debug.debugLevel.ERROR) self.env['runtime']['debug'].writeDebugOut(str(e),debug.debugLevel.ERROR)
try: try:
self.env['runtime']['speechDriver'].setVolume(self.env['runtime']['settingsManager'].getSettingAsFloat('speech', 'volume')) self.env['runtime']['speechDriver'].setVolume(self.env['runtime']['settingsManager'].getSettingAsFloat('speech', 'volume'))
except Exception as e: except Exception as e:
self.env['runtime']['debug'].writeDebugOut("setting speech volume in outputManager.speakText ",debug.debugLevel.ERROR) self.env['runtime']['debug'].writeDebugOut("setting speech volume in outputManager.speakText ",debug.debugLevel.ERROR)
@ -114,7 +114,7 @@ class outputManager():
if not self.env['runtime']['settingsManager'].getSettingAsBool('braille', 'enabled'): if not self.env['runtime']['settingsManager'].getSettingAsBool('braille', 'enabled'):
return return
if self.env['runtime']['brailleDriver'] == None: if self.env['runtime']['brailleDriver'] == None:
return return
if flush: if flush:
self.env['output']['nextFlush'] = time.time() + self.getFlushTime(text) self.env['output']['nextFlush'] = time.time() + self.getFlushTime(text)
self.env['output']['messageOffset'] = {'x':0,'y':0} self.env['output']['messageOffset'] = {'x':0,'y':0}
@ -136,7 +136,7 @@ class outputManager():
displayText = self.getBrailleTextWithOffset(self.env['output']['messageText'], self.env['output']['messageOffset']) displayText = self.getBrailleTextWithOffset(self.env['output']['messageText'], self.env['output']['messageOffset'])
self.env['runtime']['brailleDriver'].writeText('flush'+displayText) self.env['runtime']['brailleDriver'].writeText('flush'+displayText)
def resetSpeechDriver(self): def resetSpeechDriver(self):
try: try:
self.env['runtime']['speechDriver'].reset() self.env['runtime']['speechDriver'].reset()
except Exception as e: except Exception as e:
self.env['runtime']['debug'].writeDebugOut("reset " + str(e),debug.debugLevel.ERROR) self.env['runtime']['debug'].writeDebugOut("reset " + str(e),debug.debugLevel.ERROR)
@ -169,7 +169,7 @@ class outputManager():
if self.env['runtime']['settingsManager'].getSettingAsInt('braille', 'panSizeHorizontal') <= 0: if self.env['runtime']['settingsManager'].getSettingAsInt('braille', 'panSizeHorizontal') <= 0:
return size[0] return size[0]
if self.env['runtime']['settingsManager'].getSettingAsInt('braille', 'panSizeHorizontal') >= size[0]: if self.env['runtime']['settingsManager'].getSettingAsInt('braille', 'panSizeHorizontal') >= size[0]:
return size[0] return size[0]
return self.env['runtime']['settingsManager'].getSettingAsInt('braille', 'panSizeHorizontal') return self.env['runtime']['settingsManager'].getSettingAsInt('braille', 'panSizeHorizontal')
def getHorizontalPanLevel(self,offsetChange = 0): def getHorizontalPanLevel(self,offsetChange = 0):
panned = True panned = True
@ -189,14 +189,14 @@ class outputManager():
if self.env['output']['messageOffset']: if self.env['output']['messageOffset']:
self.env['output']['messageOffset'] = newPan.copy() self.env['output']['messageOffset'] = newPan.copy()
else: else:
self.env['output']['cursorOffset'] = newPan.copy() self.env['output']['cursorOffset'] = newPan.copy()
return panned return panned
def setPanRight(self): def setPanRight(self):
newPan, panned = self.getHorizontalPanLevel(1) newPan, panned = self.getHorizontalPanLevel(1)
if self.env['output']['messageOffset']: if self.env['output']['messageOffset']:
self.env['output']['messageOffset'] = newPan.copy() self.env['output']['messageOffset'] = newPan.copy()
else: else:
self.env['output']['cursorOffset'] = newPan.copy() self.env['output']['cursorOffset'] = newPan.copy()
return panned return panned
def removePanning(self): def removePanning(self):
if self.env['output']['messageOffset']: if self.env['output']['messageOffset']:
@ -212,9 +212,9 @@ class outputManager():
if cursor and not offset: if cursor and not offset:
if self.env['runtime']['settingsManager'].getSetting('braille', 'cursorFollowMode').upper() == 'FIXCELL': if self.env['runtime']['settingsManager'].getSetting('braille', 'cursorFollowMode').upper() == 'FIXCELL':
#fix cell #fix cell
cursorCell = self.getFixCursorCell() cursorCell = self.getFixCursorCell()
offsetStart = cursor['x'] offsetStart = cursor['x']
if offsetStart < size[0]: if offsetStart < size[0]:
if offsetStart <= cursorCell: if offsetStart <= cursorCell:
return offsetText[0: size[0]] return offsetText[0: size[0]]
@ -227,21 +227,21 @@ class outputManager():
else: else:
if not offset: if not offset:
offset = {'x':0,'y':0} offset = {'x':0,'y':0}
offsetStart = offset['x'] offsetStart = offset['x']
if offsetStart >= len(offsetText): if offsetStart >= len(offsetText):
offsetStart = len(offsetText) - size[0] offsetStart = len(offsetText) - size[0]
if offsetStart < 0: if offsetStart < 0:
offsetStart = 0 offsetStart = 0
offsetEnd = offsetStart + size[0] offsetEnd = offsetStart + size[0]
offsetText = offsetText[offsetStart: offsetEnd] offsetText = offsetText[offsetStart: offsetEnd]
return offsetText return offsetText
def interruptOutput(self): def interruptOutput(self):
try: try:
self.env['runtime']['speechDriver'].cancel() self.env['runtime']['speechDriver'].cancel()
self.env['runtime']['debug'].writeDebugOut("Interrupt speech",debug.debugLevel.INFO) self.env['runtime']['debug'].writeDebugOut("Interrupt speech",debug.debugLevel.INFO)
except: except:
pass pass
def clearFlushTime(self): def clearFlushTime(self):
self.setFlushTime(0.0) self.setFlushTime(0.0)
@ -252,7 +252,7 @@ class outputManager():
def getFlushTime(self,text=''): def getFlushTime(self,text=''):
if self.env['runtime']['settingsManager'].getSettingAsFloat('braille', 'flushTimeout') < 0 or \ if self.env['runtime']['settingsManager'].getSettingAsFloat('braille', 'flushTimeout') < 0 or \
self.env['runtime']['settingsManager'].getSetting('braille', 'flushMode').upper() == 'NONE': self.env['runtime']['settingsManager'].getSetting('braille', 'flushMode').upper() == 'NONE':
return 999999999999 return 999999999999
if self.env['runtime']['settingsManager'].getSetting('braille', 'flushMode').upper() == 'FIX': if self.env['runtime']['settingsManager'].getSetting('braille', 'flushMode').upper() == 'FIX':
return self.env['runtime']['settingsManager'].getSettingAsFloat('braille', 'flushTimeout') return self.env['runtime']['settingsManager'].getSettingAsFloat('braille', 'flushTimeout')
if self.env['runtime']['settingsManager'].getSetting('braille', 'flushMode').upper() == 'CHAR': if self.env['runtime']['settingsManager'].getSetting('braille', 'flushMode').upper() == 'CHAR':
@ -260,23 +260,23 @@ class outputManager():
if self.env['runtime']['settingsManager'].getSetting('braille', 'flushMode').upper() == 'WORD': if self.env['runtime']['settingsManager'].getSetting('braille', 'flushMode').upper() == 'WORD':
wordsList = text.split(' ') wordsList = text.split(' ')
return self.env['runtime']['settingsManager'].getSettingAsFloat('braille', 'flushTimeout') * len( list( filter(None, wordsList) ) ) return self.env['runtime']['settingsManager'].getSettingAsFloat('braille', 'flushTimeout') * len( list( filter(None, wordsList) ) )
def playSoundIcon(self, soundIcon = '', interrupt=True): def playSoundIcon(self, soundIcon = '', interrupt=True):
if soundIcon == '': if soundIcon == '':
return False return False
soundIcon = soundIcon.upper() soundIcon = soundIcon.upper()
if not self.env['runtime']['settingsManager'].getSettingAsBool('sound', 'enabled'): if not self.env['runtime']['settingsManager'].getSettingAsBool('sound', 'enabled'):
self.env['runtime']['debug'].writeDebugOut("Sound disabled in outputManager.speakText",debug.debugLevel.INFO) self.env['runtime']['debug'].writeDebugOut("Sound disabled in outputManager.playSoundIcon",debug.debugLevel.INFO)
return False return False
try: try:
e = self.env['soundIcons'][soundIcon] e = self.env['soundIcons'][soundIcon]
except: except:
self.env['runtime']['debug'].writeDebugOut("SoundIcon doesnt exist: " + soundIcon, debug.debugLevel.WARNING) self.env['runtime']['debug'].writeDebugOut("SoundIcon doesnt exist: " + soundIcon, debug.debugLevel.WARNING)
return False return False
if self.env['runtime']['soundDriver'] == None: if self.env['runtime']['soundDriver'] == None:
self.env['runtime']['debug'].writeDebugOut("No speechDriver in outputManager.speakText",debug.debugLevel.ERROR) self.env['runtime']['debug'].writeDebugOut("No soundDriver in outputManager.playSoundIcon: soundDriver not loaded",debug.debugLevel.ERROR)
return False return False
try: try:
@ -292,15 +292,43 @@ class outputManager():
return False return False
return False return False
def playFrequence(self, frequence, duration, interrupt=True):
if not self.env['runtime']['settingsManager'].getSettingAsBool('sound', 'enabled'):
self.env['runtime']['debug'].writeDebugOut("Sound disabled in outputManager.playFrequence",debug.debugLevel.INFO)
return False
if frequence < 1 or frequence > 20000:
self.env['runtime']['debug'].writeDebugOut("outputManager.playFrequence::Filefrequence is out of range:" + str(frequence),debug.debugLevel.INFO)
return False
if self.env['runtime']['soundDriver'] == None:
self.env['runtime']['debug'].writeDebugOut("No soundDriver in outputManager.playFrequence: soundDriver not loaded",debug.debugLevel.ERROR)
return False
try:
self.env['runtime']['soundDriver'].setVolume(self.env['runtime']['settingsManager'].getSettingAsFloat('sound', 'volume'))
except Exception as e:
self.env['runtime']['debug'].writeDebugOut("outputManager.playSoundIcon::setVolume: " + str(e),debug.debugLevel.ERROR)
try:
self.env['runtime']['soundDriver'].playFrequence(frequence, duration, interrupt)
return True
except Exception as e:
self.env['runtime']['debug'].writeDebugOut("outputManager.playSoundIcon::playSoundFile: " + str(e),debug.debugLevel.ERROR)
return False
return False
def tempDisableSpeech(self): def tempDisableSpeech(self):
if self.env['runtime']['settingsManager'].getSettingAsBool('speech', 'enabled'): if self.env['runtime']['settingsManager'].getSettingAsBool('speech', 'enabled'):
self.presentText(_("speech temporary disabled"), soundIcon='SpeechOff', interrupt=True) self.presentText(_("speech temporary disabled"), soundIcon='SpeechOff', interrupt=True)
self.env['commandBuffer']['enableSpeechOnKeypress'] = True self.env['commandBuffer']['enableSpeechOnKeypress'] = True
self.env['runtime']['settingsManager'].setSetting('speech', 'enabled', str(not self.env['runtime']['settingsManager'].getSettingAsBool('speech', 'enabled'))) self.env['runtime']['settingsManager'].setSetting('speech', 'enabled', str(not self.env['runtime']['settingsManager'].getSettingAsBool('speech', 'enabled')))
self.interruptOutput() self.interruptOutput()
def announceActiveCursor(self, interrupt_p=False): def announceActiveCursor(self, interrupt_p=False):
if self.env['runtime']['cursorManager'].isReviewMode(): if self.env['runtime']['cursorManager'].isReviewMode():
self.presentText(' review cursor ', interrupt=interrupt_p) self.presentText(' review cursor ', interrupt=interrupt_p)
else: else:
self.presentText(' text cursor ', interrupt=interrupt_p) self.presentText(' text cursor ', interrupt=interrupt_p)

View File

@ -92,7 +92,7 @@ class driver(soundDriver):
self._player.set_property('uri', 'file://%s' % fileName) self._player.set_property('uri', 'file://%s' % fileName)
self._player.set_state(Gst.State.PLAYING) self._player.set_state(Gst.State.PLAYING)
def playFrequence(self, frequence, duration, adjustVolume, interrupt=True): def playFrequence(self, frequence, duration, interrupt=True):
if not self._initialized: if not self._initialized:
return return
if interrupt: if interrupt: