From 770a135d5118e604c81bb82c19e7ff5a261e1c85 Mon Sep 17 00:00:00 2001 From: Bob Mottram Date: Wed, 3 Mar 2021 14:02:14 +0000 Subject: [PATCH] Alter TTS pitch based upon speaker gender --- epicyon.py | 5 ++++- speaker.py | 17 ++++++++++++++--- 2 files changed, 18 insertions(+), 4 deletions(-) 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: