Merge branch 'master' into wordWrappingEndOfScreenBell

This commit is contained in:
chrys 2016-11-20 17:17:30 +01:00
commit b9a21a7162
14 changed files with 78 additions and 29 deletions

View File

@ -1,29 +1,39 @@
# fenrir (Alfa) # fenrir (Alfa)
An TTY screenreader for Linux. An TTY screenreader for Linux.
Its an early alpha version. You can test it. It is not recommended for production use. If you want to help just let me know. Its an early alpha version. You can test it. It is not recommended for production use. In theorie its not limited to linux. but i currently only provide drivers for that because I have no ohter system here. If you want to help or write drivers to make it work on other systems, just let me know.
# requirements # requirements (core)
- linux - linux
- python3 - python3
- python-espeak
- python-evdev - python-evdev
- loaded uinput kernel module - loaded uinput kernel module
Read permission to the following files: - Read permission to the following files:
/sys/devices/virtual/tty/tty0/active - /sys/devices/virtual/tty/tty0/active
/dev/vcsa[1-64] - /dev/vcsa[1-64]
ReadWrite permission - ReadWrite permission
/dev/input - /dev/input
/dev/uinput - /dev/uinput
- speech, sound or braille drivers see "optional (features, drivers)".
# optional # optional (features, drivers)
- sox [its used by default in the generic sound driver for playing sound-icons] - "espeak" speech driver:
- speech-dispatcher, python3-speechd [to use the speech-dispatcher driver] - python-espeak
- brltty, python-brlapi [using braille] # (not implemented yet) - "speechd" speech driver:
- gstreamer [soundicons via gstreamer] - speech-dispatcher
- GLib [soundicons via gstreamer] - python-speechd
- python-pyenchant [spell check functionality] - brltty braille driver (not implemented yet, WIP):
- aspell-<language> [your languagedata for spellchecker, english support "aspell-en"] - brltty (configured and running)
- python-daemonize [use fenrir as background service on Unix like systems] - python-brlapi
- "generic" sound driver:
- sox
- "gstreamer" sound driver
- gstreamer 1.x
- GLib
- spellchecker
- python-pyenchant
- aspell-YourLanguageCode (example aspell-en for us english)
- unix daemon:
- python-daemonize
# installation # installation
- Archlinux: PKGBUILD in AUR - Archlinux: PKGBUILD in AUR
@ -32,5 +42,9 @@ ReadWrite permission
You can just run the following as root: You can just run the following as root:
cd src/fenrir-package/ cd src/fenrir-package/
sudo ./fenrir sudo ./fenrir
Settings are located in the "config" directory. Settings "settings.conf" is located in the "config" directory.
Take care that the used drivers in the config matching your installed drivers.
By default it uses:
- sound driver: generic (via sox, could configured in settings.conf)
- speech driver: speechd
- braille driver: brltty (WIP)

View File

@ -5,7 +5,7 @@ After=systemd-udev-settle.service sound.target
[Service] [Service]
Type=forking Type=forking
PIDFile=/var/run/fenrir.pid PIDFile=/var/run/fenrir.pid
ExecStart=/usr/bin/fenrir ExecStart=/usr/bin/fenrir-daemon
ExecReload=/usr/bin/kill -HUP $MAINPID ExecReload=/usr/bin/kill -HUP $MAINPID
Restart=always Restart=always
#Group=fenrir #Group=fenrir

View File

@ -129,3 +129,8 @@ delaySec=0
# present time after to given minutes example every 15 minutes: 00,15,30,45 # present time after to given minutes example every 15 minutes: 00,15,30,45
# if delaySec is >0 onMinutes is ignored # if delaySec is >0 onMinutes is ignored
onMinutes=00,30 onMinutes=00,30
# announce via soundicon
announce=True
# interrupt current speech for time announcement
interrupt=False

View File

@ -125,7 +125,7 @@ list=
[time] [time]
# automatic time anouncement # automatic time anouncement
enabled=False enabled=True
# present time # present time
presentTime=True presentTime=True
# present date (on change) # present date (on change)
@ -135,3 +135,7 @@ delaySec=0
# present time after to given minutes example every 15 minutes: 00,15,30,45 # present time after to given minutes example every 15 minutes: 00,15,30,45
# if delaySec is >0 onMinutes is ignored # if delaySec is >0 onMinutes is ignored
onMinutes=00,30 onMinutes=00,30
# announce via soundicon (not interrupting)
announce=True
# interrupt current speech for time announcement
interrupt=False

View File

@ -135,3 +135,7 @@ delaySec=0
# present time after to given minutes example every 15 minutes: 00,15,30,45 # present time after to given minutes example every 15 minutes: 00,15,30,45
# if delaySec is >0 onMinutes is ignored # if delaySec is >0 onMinutes is ignored
onMinutes=00,30 onMinutes=00,30
# announce via soundicon
announce=True
# interrupt current speech for time announcement
interrupt=False

View File

@ -85,3 +85,7 @@ delaySec=0
# present time after to given minutes example every 15 minutes: 00,15,30,45 # present time after to given minutes example every 15 minutes: 00,15,30,45
# if delaySec is >0 onMinutes is ignored # if delaySec is >0 onMinutes is ignored
onMinutes=00,30 onMinutes=00,30
# announce via soundicon
announce=True
# interrupt current speech for time announcement
interrupt=False

Binary file not shown.

View File

@ -48,3 +48,5 @@ PromotedText='PromotedText.wav'
mispell='mispell.wav' mispell='mispell.wav'
# the for capital letter # the for capital letter
capital='Caps.wav' capital='Caps.wav'
# general announcement
announce="Announce.wav"

Binary file not shown.

View File

@ -48,3 +48,5 @@ PromotedText='PromotedText.opus'
mispell='mispell.opus' mispell='mispell.opus'
# the for capital letter # the for capital letter
capital='Caps.opus' capital='Caps.opus'
# general announcement
announce="Announce.opus"

View File

@ -48,3 +48,5 @@ PromotedText=''
mispell='' mispell=''
# the for capital letter: # the for capital letter:
capital='' capital=''
# general announcement
announce=""

View File

@ -20,7 +20,7 @@ setup(
# Packages # Packages
packages=find_packages('src/fenrir'), packages=find_packages('src/fenrir'),
package_dir={'': 'src/fenrir'}, package_dir={'': 'src/fenrir'},
scripts=['src/fenrir/fenrir'], scripts=['src/fenrir/fenrir','src/fenrir/fenrir-daemon'],
#entry_points = { #entry_points = {
# "console_scripts": ['fenrir = fenrir:main'] # "console_scripts": ['fenrir = fenrir:main']
# }, # },

View File

@ -44,18 +44,28 @@ class command():
if now.hour == self.lastTime.hour: if now.hour == self.lastTime.hour:
if now.minute == self.lastTime.minute: if now.minute == self.lastTime.minute:
return return
dateFormat = self.env['runtime']['settingsManager'].getSetting('general', 'dateFormat')
dateString = datetime.datetime.strftime(now, dateFormat)
presentDate = self.env['runtime']['settingsManager'].getSettingAsBool('time', 'presentDate') and \
self.lastDateString != dateString
presentTime = self.env['runtime']['settingsManager'].getSettingAsBool('time', 'presentTime')
# no changed value to announce
if not (presentDate or presentTime):
return
timeFormat = self.env['runtime']['settingsManager'].getSetting('general', 'timeFormat') timeFormat = self.env['runtime']['settingsManager'].getSetting('general', 'timeFormat')
timeString = datetime.datetime.strftime(now, timeFormat) timeString = datetime.datetime.strftime(now, timeFormat)
dateFormat = self.env['runtime']['settingsManager'].getSetting('general', 'dateFormat') if self.env['runtime']['settingsManager'].getSettingAsBool('time', 'interrupt'):
dateString = datetime.datetime.strftime(now, dateFormat) self.env['runtime']['outputManager'].interruptOutput()
if self.env['runtime']['settingsManager'].getSettingAsBool('time', 'presentTime'): if self.env['runtime']['settingsManager'].getSettingAsBool('time', 'announce'):
self.env['runtime']['outputManager'].playSoundIcon('announce')
if presentTime:
# present the time # present the time
self.env['runtime']['outputManager'].presentText('Autotime: ' + timeString , soundIcon='', interrupt=False) self.env['runtime']['outputManager'].presentText('Autotime: ' + timeString , soundIcon='', interrupt=False)
# and date if changes # and date if changes
if self.env['runtime']['settingsManager'].getSettingAsBool('time', 'presentDate'): if presentDate:
if self.lastDateString != dateString:
self.env['runtime']['outputManager'].presentText(dateString , soundIcon='', interrupt=False) self.env['runtime']['outputManager'].presentText(dateString , soundIcon='', interrupt=False)
self.lastDateString = dateString self.lastDateString = dateString
self.lastTime = datetime.datetime.now() self.lastTime = datetime.datetime.now()

View File

@ -70,6 +70,8 @@ settings = {
'presentDate': True, 'presentDate': True,
'delaySec': 0, 'delaySec': 0,
'onMinutes': '00,30', 'onMinutes': '00,30',
'announce': True,
'interrupt': False,
}, },
'keyboard':{ 'keyboard':{
'driver': 'evdev', 'driver': 'evdev',