Merge branch 'master' into wordWrappingEndOfScreenBell
This commit is contained in:
commit
b9a21a7162
54
README.md
54
README.md
@ -1,29 +1,39 @@
|
||||
# fenrir (Alfa)
|
||||
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
|
||||
- python3
|
||||
- python-espeak
|
||||
- python-evdev
|
||||
- loaded uinput kernel module
|
||||
Read permission to the following files:
|
||||
/sys/devices/virtual/tty/tty0/active
|
||||
/dev/vcsa[1-64]
|
||||
ReadWrite permission
|
||||
/dev/input
|
||||
/dev/uinput
|
||||
- Read permission to the following files:
|
||||
- /sys/devices/virtual/tty/tty0/active
|
||||
- /dev/vcsa[1-64]
|
||||
- ReadWrite permission
|
||||
- /dev/input
|
||||
- /dev/uinput
|
||||
- speech, sound or braille drivers see "optional (features, drivers)".
|
||||
|
||||
# optional
|
||||
- sox [its used by default in the generic sound driver for playing sound-icons]
|
||||
- speech-dispatcher, python3-speechd [to use the speech-dispatcher driver]
|
||||
- brltty, python-brlapi [using braille] # (not implemented yet)
|
||||
- gstreamer [soundicons via gstreamer]
|
||||
- GLib [soundicons via gstreamer]
|
||||
- python-pyenchant [spell check functionality]
|
||||
- aspell-<language> [your languagedata for spellchecker, english support "aspell-en"]
|
||||
- python-daemonize [use fenrir as background service on Unix like systems]
|
||||
# optional (features, drivers)
|
||||
- "espeak" speech driver:
|
||||
- python-espeak
|
||||
- "speechd" speech driver:
|
||||
- speech-dispatcher
|
||||
- python-speechd
|
||||
- brltty braille driver (not implemented yet, WIP):
|
||||
- brltty (configured and running)
|
||||
- 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
|
||||
- Archlinux: PKGBUILD in AUR
|
||||
@ -32,5 +42,9 @@ ReadWrite permission
|
||||
You can just run the following as root:
|
||||
cd src/fenrir-package/
|
||||
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)
|
||||
|
@ -5,7 +5,7 @@ After=systemd-udev-settle.service sound.target
|
||||
[Service]
|
||||
Type=forking
|
||||
PIDFile=/var/run/fenrir.pid
|
||||
ExecStart=/usr/bin/fenrir
|
||||
ExecStart=/usr/bin/fenrir-daemon
|
||||
ExecReload=/usr/bin/kill -HUP $MAINPID
|
||||
Restart=always
|
||||
#Group=fenrir
|
||||
|
@ -129,3 +129,8 @@ delaySec=0
|
||||
# present time after to given minutes example every 15 minutes: 00,15,30,45
|
||||
# if delaySec is >0 onMinutes is ignored
|
||||
onMinutes=00,30
|
||||
# announce via soundicon
|
||||
announce=True
|
||||
# interrupt current speech for time announcement
|
||||
interrupt=False
|
||||
|
||||
|
@ -125,7 +125,7 @@ list=
|
||||
|
||||
[time]
|
||||
# automatic time anouncement
|
||||
enabled=False
|
||||
enabled=True
|
||||
# present time
|
||||
presentTime=True
|
||||
# present date (on change)
|
||||
@ -135,3 +135,7 @@ delaySec=0
|
||||
# present time after to given minutes example every 15 minutes: 00,15,30,45
|
||||
# if delaySec is >0 onMinutes is ignored
|
||||
onMinutes=00,30
|
||||
# announce via soundicon (not interrupting)
|
||||
announce=True
|
||||
# interrupt current speech for time announcement
|
||||
interrupt=False
|
||||
|
@ -135,3 +135,7 @@ delaySec=0
|
||||
# present time after to given minutes example every 15 minutes: 00,15,30,45
|
||||
# if delaySec is >0 onMinutes is ignored
|
||||
onMinutes=00,30
|
||||
# announce via soundicon
|
||||
announce=True
|
||||
# interrupt current speech for time announcement
|
||||
interrupt=False
|
||||
|
@ -85,3 +85,7 @@ delaySec=0
|
||||
# present time after to given minutes example every 15 minutes: 00,15,30,45
|
||||
# if delaySec is >0 onMinutes is ignored
|
||||
onMinutes=00,30
|
||||
# announce via soundicon
|
||||
announce=True
|
||||
# interrupt current speech for time announcement
|
||||
interrupt=False
|
||||
|
BIN
config/sound/default-wav/Announce.wav
Normal file
BIN
config/sound/default-wav/Announce.wav
Normal file
Binary file not shown.
@ -48,3 +48,5 @@ PromotedText='PromotedText.wav'
|
||||
mispell='mispell.wav'
|
||||
# the for capital letter
|
||||
capital='Caps.wav'
|
||||
# general announcement
|
||||
announce="Announce.wav"
|
||||
|
BIN
config/sound/default/Announce.opus
Normal file
BIN
config/sound/default/Announce.opus
Normal file
Binary file not shown.
@ -48,3 +48,5 @@ PromotedText='PromotedText.opus'
|
||||
mispell='mispell.opus'
|
||||
# the for capital letter
|
||||
capital='Caps.opus'
|
||||
# general announcement
|
||||
announce="Announce.opus"
|
||||
|
@ -48,3 +48,5 @@ PromotedText=''
|
||||
mispell=''
|
||||
# the for capital letter:
|
||||
capital=''
|
||||
# general announcement
|
||||
announce=""
|
||||
|
2
setup.py
2
setup.py
@ -20,7 +20,7 @@ setup(
|
||||
# Packages
|
||||
packages=find_packages('src/fenrir'),
|
||||
package_dir={'': 'src/fenrir'},
|
||||
scripts=['src/fenrir/fenrir'],
|
||||
scripts=['src/fenrir/fenrir','src/fenrir/fenrir-daemon'],
|
||||
#entry_points = {
|
||||
# "console_scripts": ['fenrir = fenrir:main']
|
||||
# },
|
||||
|
@ -44,18 +44,28 @@ class command():
|
||||
if now.hour == self.lastTime.hour:
|
||||
if now.minute == self.lastTime.minute:
|
||||
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')
|
||||
timeString = datetime.datetime.strftime(now, timeFormat)
|
||||
|
||||
dateFormat = self.env['runtime']['settingsManager'].getSetting('general', 'dateFormat')
|
||||
dateString = datetime.datetime.strftime(now, dateFormat)
|
||||
if self.env['runtime']['settingsManager'].getSettingAsBool('time', 'presentTime'):
|
||||
if self.env['runtime']['settingsManager'].getSettingAsBool('time', 'interrupt'):
|
||||
self.env['runtime']['outputManager'].interruptOutput()
|
||||
if self.env['runtime']['settingsManager'].getSettingAsBool('time', 'announce'):
|
||||
self.env['runtime']['outputManager'].playSoundIcon('announce')
|
||||
|
||||
if presentTime:
|
||||
# present the time
|
||||
self.env['runtime']['outputManager'].presentText('Autotime: ' + timeString , soundIcon='', interrupt=False)
|
||||
# and date if changes
|
||||
if self.env['runtime']['settingsManager'].getSettingAsBool('time', 'presentDate'):
|
||||
if self.lastDateString != dateString:
|
||||
if presentDate:
|
||||
self.env['runtime']['outputManager'].presentText(dateString , soundIcon='', interrupt=False)
|
||||
self.lastDateString = dateString
|
||||
self.lastTime = datetime.datetime.now()
|
||||
|
@ -70,6 +70,8 @@ settings = {
|
||||
'presentDate': True,
|
||||
'delaySec': 0,
|
||||
'onMinutes': '00,30',
|
||||
'announce': True,
|
||||
'interrupt': False,
|
||||
},
|
||||
'keyboard':{
|
||||
'driver': 'evdev',
|
||||
|
Loading…
Reference in New Issue
Block a user