Alter TTS pitch based upon speaker gender

merge-requests/30/head
Bob Mottram 2021-03-03 14:02:14 +00:00
parent 8d085d615d
commit 770a135d51
2 changed files with 18 additions and 4 deletions

View File

@ -1945,9 +1945,12 @@ if args.speaker:
if speakerJson['say'] != prevSay: if speakerJson['say'] != prevSay:
if speakerJson.get('name'): if speakerJson.get('name'):
nameStr = speakerJson['name'] nameStr = speakerJson['name']
gender = 'They/Them'
if speakerJson.get('gender'):
gender = speakerJson['gender']
# get the speech parameters # get the speech parameters
pitch = getSpeakerPitch(nameStr, args.screenreader) pitch = getSpeakerPitch(nameStr, args.screenreader, gender)
rate = getSpeakerRate(nameStr, args.screenreader) rate = getSpeakerRate(nameStr, args.screenreader)
srange = getSpeakerRange(nameStr) srange = getSpeakerRange(nameStr)

View File

@ -16,13 +16,24 @@ from utils import getFullDomain
speakerRemoveChars = ('.\n', '. ', ',', ';', '?', '!') 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 """Returns the speech synthesis pitch for the given name
""" """
random.seed(displayName) random.seed(displayName)
rangeMin = 1
rangeMax = 100
if 'She' in gender:
rangeMin = 50
elif 'Him' in gender:
rangeMax = 50
if screenreader == 'picospeaker': if screenreader == 'picospeaker':
return random.randint(-8, 3) rangeMin = -8
return random.randint(1, 100) 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: def getSpeakerRate(displayName: str, screenreader: str) -> int: