diff --git a/epicyon.py b/epicyon.py index 565674b26..62f283443 100644 --- a/epicyon.py +++ b/epicyon.py @@ -1945,9 +1945,12 @@ if args.speaker: if speakerJson['say'] != prevSay: if speakerJson.get('name'): nameStr = speakerJson['name'] + gender = 'They/Them' + if speakerJson.get('gender'): + gender = speakerJson['gender'] # get the speech parameters - pitch = getSpeakerPitch(nameStr, args.screenreader) + pitch = getSpeakerPitch(nameStr, args.screenreader, gender) rate = getSpeakerRate(nameStr, args.screenreader) srange = getSpeakerRange(nameStr) diff --git a/speaker.py b/speaker.py index cdccc1b3c..bd14ea414 100644 --- a/speaker.py +++ b/speaker.py @@ -16,13 +16,24 @@ from utils import getFullDomain speakerRemoveChars = ('.\n', '. ', ',', ';', '?', '!') -def getSpeakerPitch(displayName: str, screenreader: str) -> int: +def getSpeakerPitch(displayName: str, screenreader: str, gender) -> int: """Returns the speech synthesis pitch for the given name """ random.seed(displayName) + rangeMin = 1 + rangeMax = 100 + if 'She' in gender: + rangeMin = 50 + elif 'Him' in gender: + rangeMax = 50 if screenreader == 'picospeaker': - return random.randint(-8, 3) - return random.randint(1, 100) + rangeMin = -8 + rangeMax = 3 + if 'She' in gender: + rangeMin = -1 + elif 'Him' in gender: + rangeMax = -1 + return random.randint(rangeMin, rangeMax) def getSpeakerRate(displayName: str, screenreader: str) -> int: