TTS custom pronounce

merge-requests/21/head
Bob Mottram 2021-03-02 12:39:18 +00:00
parent 2b26b09980
commit 32e5f03948
17 changed files with 105 additions and 15 deletions

View File

@ -83,6 +83,7 @@ from categories import guessHashtagCategory
from context import hasValidContext
from content import htmlReplaceQuoteMarks
from speaker import speakerReplaceLinks
from speaker import speakerPronounce
def storeHashTags(baseDir: str, nickname: str, postJsonObject: {}) -> None:
@ -2168,6 +2169,7 @@ def _updateSpeaker(baseDir: str, nickname: str, domain: str,
content = html.unescape(content)
content = removeHtml(htmlReplaceQuoteMarks(content))
content = speakerReplaceLinks(content, translate, detectedLinks)
content = speakerPronounce(baseDir, content, translate)
imageDescription = ''
if postJsonObject['object'].get('attachment'):

View File

@ -6,6 +6,7 @@ __maintainer__ = "Bob Mottram"
__email__ = "bob@freedombone.net"
__status__ = "Production"
import os
import random
from auth import createBasicAuthHeader
from session import getJson
@ -33,6 +34,48 @@ def getSpeakerRange(displayName: str) -> int:
return random.randint(300, 800)
def speakerPronounce(baseDir: str, sayText: str, translate: {}) -> str:
"""Screen readers may not always pronounce correctly, so you
can have a file which specifies conversions. File should contain
line items such as:
Epicyon -> Epi-cyon
"""
pronounceFilename = baseDir + '/accounts/speaker_pronounce.txt'
convertDict = {
"Epicyon": "Epi-cyon",
"espeak": "e-speak",
"#": translate["hashtag"],
":)": translate["smile"],
";)": translate["wink"],
":-)": translate["smile"],
";-)": translate["wink"],
"*": ""
}
if os.path.isfile(pronounceFilename):
with open(pronounceFilename, 'r') as fp:
pronounceList = fp.readlines()
for conversion in pronounceList:
separator = None
if '->' in conversion:
separator = '->'
elif ';' in conversion:
separator = ';'
elif ':' in conversion:
separator = ':'
elif ',' in conversion:
separator = ','
if not separator:
continue
text = conversion.split(separator)[0].strip()
converted = conversion.split(separator)[1].strip()
convertDict[text] = converted
for text, converted in convertDict.items():
if text in sayText:
sayText = sayText.replace(text, converted)
return sayText
def speakerReplaceLinks(sayText: str, translate: {},
detectedLinks: []) -> str:
"""Replaces any links in the given text with "link to [domain]".

View File

@ -374,5 +374,8 @@
"DM bounce": "يتم قبول الرسائل فقط من الحسابات المتبعة",
"Next": "التالي",
"Preview": "معاينة",
"Linked": "رابط موقع"
"Linked": "رابط موقع",
"hashtag": "رابطة هاشتاق",
"smile": "ابتسامة",
"wink": "غمزة"
}

View File

@ -374,5 +374,8 @@
"DM bounce": "Els missatges només saccepten des dels comptes seguits",
"Next": "Pròxim",
"Preview": "Vista prèvia",
"Linked": "enllaç web"
"Linked": "enllaç web",
"hashtag": "etiqueta",
"smile": "somriure",
"wink": "fer l'ullet"
}

View File

@ -374,5 +374,8 @@
"DM bounce": "Dim ond o gyfrifon a ddilynir y derbynnir negeseuon",
"Next": "Nesaf",
"Preview": "Rhagolwg",
"Linked": "Dolen we"
"Linked": "Dolen we",
"hashtag": "hash-nod",
"smile": "gwenu",
"wink": "winc"
}

View File

@ -374,5 +374,8 @@
"DM bounce": "Nachrichten werden nur von folgenden Konten akzeptiert",
"Next": "Nächster",
"Preview": "Vorschau",
"Linked": "Weblink"
"Linked": "Weblink",
"hashtag": "hash-tag",
"smile": "Lächeln",
"wink": "zwinkern"
}

View File

@ -374,5 +374,8 @@
"DM bounce": "Messages are only accepted from followed accounts",
"Next": "Next",
"Preview": "Preview",
"Linked": "Web linked"
"Linked": "Web linked",
"hashtag": "hash-tag",
"smile": "smile",
"wink": "wink"
}

View File

@ -374,5 +374,8 @@
"DM bounce": "Solo se aceptan mensajes de cuentas seguidas",
"Next": "Próxima",
"Preview": "Avance",
"Linked": "enlace web"
"Linked": "enlace web",
"hashtag": "hash-tag",
"smile": "sonreír",
"wink": "guiño"
}

View File

@ -374,5 +374,8 @@
"DM bounce": "Les messages ne sont acceptés que des comptes suivis",
"Next": "Suivante",
"Preview": "Aperçu",
"Linked": "lien Web"
"Linked": "lien Web",
"hashtag": "hash-tag",
"smile": "le sourire",
"wink": "clin d'œil"
}

View File

@ -374,5 +374,8 @@
"DM bounce": "Ní ghlactar le teachtaireachtaí ach ó chuntais a leanann",
"Next": "Ar Aghaidh",
"Preview": "Réamhamharc",
"Linked": "Nasc gréasáin"
"Linked": "Nasc gréasáin",
"hashtag": "hash-tag",
"smile": "aoibh gháire",
"wink": "wink"
}

View File

@ -374,5 +374,8 @@
"DM bounce": "संदेश केवल अनुसरण किए गए खातों से स्वीकार किए जाते हैं",
"Next": "अगला",
"Preview": "पूर्वावलोकन",
"Linked": "वेब लिंक"
"Linked": "वेब लिंक",
"hashtag": "हैशटैग",
"smile": "मुस्कुराओ",
"wink": "आँख मारना"
}

View File

@ -374,5 +374,8 @@
"DM bounce": "I messaggi sono accettati solo dagli account seguiti",
"Next": "Il prossimo",
"Preview": "Anteprima",
"Linked": "collegamento web"
"Linked": "collegamento web",
"hashtag": "hash-tag",
"smile": "Sorridi",
"wink": "occhiolino"
}

View File

@ -374,5 +374,8 @@
"DM bounce": "メッセージはフォローされているアカウントからのみ受け付けられます",
"Next": "次",
"Preview": "プレビュー",
"Linked": "ウェブリンク"
"Linked": "ウェブリンク",
"hashtag": "ハッシュタグ",
"smile": "スマイル",
"wink": "ウィンク"
}

View File

@ -370,5 +370,8 @@
"DM bounce": "Messages are only accepted from followed accounts",
"Next": "Next",
"Preview": "Preview",
"Linked": "Web link"
"Linked": "Web link",
"hashtag": "hash-tag",
"smile": "smile",
"wink": "wink"
}

View File

@ -374,5 +374,8 @@
"DM bounce": "Mensagens são aceitas apenas de contas seguidas",
"Next": "Próxima",
"Preview": "Antevisão",
"Linked": "link da web"
"Linked": "link da web",
"hashtag": "hash-tag",
"smile": "sorrir",
"wink": "piscar"
}

View File

@ -374,5 +374,8 @@
"DM bounce": "Сообщения принимаются только от следующих аккаунтов",
"Next": "Следующий",
"Preview": "Предварительный просмотр",
"Linked": "интернет-ссылка"
"Linked": "интернет-ссылка",
"hashtag": "хэштег",
"smile": "улыбка",
"wink": "подмигивание"
}

View File

@ -374,5 +374,8 @@
"DM bounce": "仅接受来自后续帐户的邮件",
"Next": "下一个",
"Preview": "预览",
"Linked": "网页链接"
"Linked": "网页链接",
"hashtag": "井号",
"smile": "微笑",
"wink": "眨眼"
}