screenreader option

merge-requests/21/head
Bob Mottram 2021-03-02 14:32:25 +00:00
parent 77350a8e6a
commit fc97c499e3
1 changed files with 27 additions and 12 deletions

View File

@ -6,7 +6,12 @@ __maintainer__ = "Bob Mottram"
__email__ = "bob@freedombone.net" __email__ = "bob@freedombone.net"
__status__ = "Production" __status__ = "Production"
import os
import html import html
import shutil
import sys
import time
import argparse
from person import createPerson from person import createPerson
from person import createGroup from person import createGroup
from person import setProfileImage from person import setProfileImage
@ -33,10 +38,6 @@ from session import getJson
from newswire import getRSS from newswire import getRSS
from filters import addFilter from filters import addFilter
from filters import removeFilter from filters import removeFilter
import os
import shutil
import sys
import time
from pprint import pprint from pprint import pprint
from daemon import runDaemon from daemon import runDaemon
from follow import clearFollows from follow import clearFollows
@ -80,7 +81,6 @@ from speaker import getSpeakerFromServer
from speaker import getSpeakerPitch from speaker import getSpeakerPitch
from speaker import getSpeakerRate from speaker import getSpeakerRate
from speaker import getSpeakerRange from speaker import getSpeakerRange
import argparse
def str2bool(v) -> bool: def str2bool(v) -> bool:
@ -100,6 +100,9 @@ parser = argparse.ArgumentParser(description='ActivityPub Server')
parser.add_argument('-n', '--nickname', dest='nickname', type=str, parser.add_argument('-n', '--nickname', dest='nickname', type=str,
default=None, default=None,
help='Nickname of the account to use') help='Nickname of the account to use')
parser.add_argument('--screenreader', dest='screenreader', type=str,
default='espeak',
help='Name of the screen reader')
parser.add_argument('--fol', '--follow', dest='follow', type=str, parser.add_argument('--fol', '--follow', dest='follow', type=str,
default=None, default=None,
help='Handle of account to follow. eg. nickname@domain') help='Handle of account to follow. eg. nickname@domain')
@ -1926,8 +1929,9 @@ if args.speaker:
elif args.gnunet: elif args.gnunet:
proxyType = 'gnunet' proxyType = 'gnunet'
print('Setting up espeak') if args.screenreader == 'espeak':
from espeak import espeak print('Setting up espeak')
from espeak import espeak
print('Running speaker for ' + nickname + '@' + domain) print('Running speaker for ' + nickname + '@' + domain)
@ -1942,22 +1946,33 @@ if args.speaker:
if speakerJson: if speakerJson:
if speakerJson['say'] != prevSay: if speakerJson['say'] != prevSay:
if speakerJson.get('name'): if speakerJson.get('name'):
# say the speaker's name
print(html.unescape(speakerJson['name']) + ': ' + print(html.unescape(speakerJson['name']) + ': ' +
html.unescape(speakerJson['say']) + '\n') html.unescape(speakerJson['say']) + '\n')
pitch = getSpeakerPitch(speakerJson['name']) pitch = getSpeakerPitch(speakerJson['name'])
espeak.set_parameter(espeak.Parameter.Pitch, pitch) if args.screenreader == 'espeak':
espeak.set_parameter(espeak.Parameter.Pitch, pitch)
rate = getSpeakerRate(speakerJson['name']) rate = getSpeakerRate(speakerJson['name'])
espeak.set_parameter(espeak.Parameter.Rate, rate) if args.screenreader == 'espeak':
espeak.set_parameter(espeak.Parameter.Rate, rate)
srange = getSpeakerRange(speakerJson['name']) srange = getSpeakerRange(speakerJson['name'])
espeak.set_parameter(espeak.Parameter.Range, srange) if args.screenreader == 'espeak':
espeak.synth(html.unescape(speakerJson['name'])) espeak.set_parameter(espeak.Parameter.Range, srange)
espeak.synth(html.unescape(speakerJson['name']))
time.sleep(3) time.sleep(3)
# append image description if needed
if not speakerJson.get('imageDescription'): if not speakerJson.get('imageDescription'):
sayStr = speakerJson['say'] sayStr = speakerJson['say']
else: else:
sayStr = speakerJson['say'] + '. ' + \ sayStr = speakerJson['say'] + '. ' + \
speakerJson['imageDescription'] speakerJson['imageDescription']
espeak.synth(html.unescape(sayStr))
# speak the post content
if args.screenreader == 'espeak':
espeak.synth(html.unescape(sayStr))
elif args.screenreader == 'picospeaker':
os.system('picospeaker ' + html.unescape(sayStr))
prevSay = speakerJson['say'] prevSay = speakerJson['say']
time.sleep(30) time.sleep(30)