diff --git a/epicyon.py b/epicyon.py index 7154750f3..3caff9ee4 100644 --- a/epicyon.py +++ b/epicyon.py @@ -1946,24 +1946,26 @@ if args.speaker: if speakerJson: if speakerJson['say'] != prevSay: if speakerJson.get('name'): - # Get the speech parameters, based upon the speaker's name + # echo spoken text to the screen nameStr = speakerJson['name'] print(html.unescape(nameStr) + ': ' + html.unescape(speakerJson['say']) + '\n') - pitch = getSpeakerPitch(nameStr) - if args.screenreader == 'espeak': - espeak.set_parameter(espeak.Parameter.Pitch, pitch) - rate = getSpeakerRate(nameStr) - if args.screenreader == 'espeak': - espeak.set_parameter(espeak.Parameter.Rate, rate) + + # get the speech parameters + pitch = getSpeakerPitch(nameStr, args.screenreader) + rate = getSpeakerRate(nameStr, args.screenreader) srange = getSpeakerRange(nameStr) # say the speaker's name if args.screenreader == 'espeak': + espeak.set_parameter(espeak.Parameter.Pitch, pitch) + espeak.set_parameter(espeak.Parameter.Rate, rate) espeak.set_parameter(espeak.Parameter.Range, srange) espeak.synth(html.unescape(nameStr)) elif args.screenreader == 'picospeaker': - os.system('picospeaker "' + + os.system('picospeaker ' + + '-r ' + str(rate) + + ' -p ' + str(pitch) + ' "' + html.unescape(nameStr) + '"') time.sleep(3) @@ -1978,7 +1980,9 @@ if args.speaker: if args.screenreader == 'espeak': espeak.synth(html.unescape(sayStr)) elif args.screenreader == 'picospeaker': - os.system('picospeaker "' + + os.system('picospeaker ' + + '-r ' + str(rate) + + ' -p ' + str(pitch) + ' "' + html.unescape(sayStr) + '"') prevSay = speakerJson['say'] diff --git a/speaker.py b/speaker.py index a54c75b9f..55715f48a 100644 --- a/speaker.py +++ b/speaker.py @@ -13,17 +13,21 @@ from session import getJson from utils import getFullDomain -def getSpeakerPitch(displayName: str) -> int: +def getSpeakerPitch(displayName: str, screenreader: str) -> int: """Returns the speech synthesis pitch for the given name """ random.seed(displayName) + if screenreader == 'picospeaker': + return random.randint(-79, 39) return random.randint(1, 100) -def getSpeakerRate(displayName: str) -> int: +def getSpeakerRate(displayName: str, screenreader: str) -> int: """Returns the speech synthesis rate for the given name """ random.seed(displayName) + if screenreader == 'picospeaker': + return random.randint(-90, 9900) return random.randint(50, 120)