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 context import hasValidContext
from content import htmlReplaceQuoteMarks from content import htmlReplaceQuoteMarks
from speaker import speakerReplaceLinks from speaker import speakerReplaceLinks
from speaker import speakerPronounce
def storeHashTags(baseDir: str, nickname: str, postJsonObject: {}) -> None: 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 = html.unescape(content)
content = removeHtml(htmlReplaceQuoteMarks(content)) content = removeHtml(htmlReplaceQuoteMarks(content))
content = speakerReplaceLinks(content, translate, detectedLinks) content = speakerReplaceLinks(content, translate, detectedLinks)
content = speakerPronounce(baseDir, content, translate)
imageDescription = '' imageDescription = ''
if postJsonObject['object'].get('attachment'): if postJsonObject['object'].get('attachment'):

View File

@ -6,6 +6,7 @@ __maintainer__ = "Bob Mottram"
__email__ = "bob@freedombone.net" __email__ = "bob@freedombone.net"
__status__ = "Production" __status__ = "Production"
import os
import random import random
from auth import createBasicAuthHeader from auth import createBasicAuthHeader
from session import getJson from session import getJson
@ -33,6 +34,48 @@ def getSpeakerRange(displayName: str) -> int:
return random.randint(300, 800) 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: {}, def speakerReplaceLinks(sayText: str, translate: {},
detectedLinks: []) -> str: detectedLinks: []) -> str:
"""Replaces any links in the given text with "link to [domain]". """Replaces any links in the given text with "link to [domain]".

View File

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

View File

@ -374,5 +374,8 @@
"DM bounce": "Els missatges només saccepten des dels comptes seguits", "DM bounce": "Els missatges només saccepten des dels comptes seguits",
"Next": "Pròxim", "Next": "Pròxim",
"Preview": "Vista prèvia", "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", "DM bounce": "Dim ond o gyfrifon a ddilynir y derbynnir negeseuon",
"Next": "Nesaf", "Next": "Nesaf",
"Preview": "Rhagolwg", "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", "DM bounce": "Nachrichten werden nur von folgenden Konten akzeptiert",
"Next": "Nächster", "Next": "Nächster",
"Preview": "Vorschau", "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", "DM bounce": "Messages are only accepted from followed accounts",
"Next": "Next", "Next": "Next",
"Preview": "Preview", "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", "DM bounce": "Solo se aceptan mensajes de cuentas seguidas",
"Next": "Próxima", "Next": "Próxima",
"Preview": "Avance", "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", "DM bounce": "Les messages ne sont acceptés que des comptes suivis",
"Next": "Suivante", "Next": "Suivante",
"Preview": "Aperçu", "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", "DM bounce": "Ní ghlactar le teachtaireachtaí ach ó chuntais a leanann",
"Next": "Ar Aghaidh", "Next": "Ar Aghaidh",
"Preview": "Réamhamharc", "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": "संदेश केवल अनुसरण किए गए खातों से स्वीकार किए जाते हैं", "DM bounce": "संदेश केवल अनुसरण किए गए खातों से स्वीकार किए जाते हैं",
"Next": "अगला", "Next": "अगला",
"Preview": "पूर्वावलोकन", "Preview": "पूर्वावलोकन",
"Linked": "वेब लिंक" "Linked": "वेब लिंक",
"hashtag": "हैशटैग",
"smile": "मुस्कुराओ",
"wink": "आँख मारना"
} }

View File

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

View File

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

View File

@ -370,5 +370,8 @@
"DM bounce": "Messages are only accepted from followed accounts", "DM bounce": "Messages are only accepted from followed accounts",
"Next": "Next", "Next": "Next",
"Preview": "Preview", "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", "DM bounce": "Mensagens são aceitas apenas de contas seguidas",
"Next": "Próxima", "Next": "Próxima",
"Preview": "Antevisão", "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": "Сообщения принимаются только от следующих аккаунтов", "DM bounce": "Сообщения принимаются только от следующих аккаунтов",
"Next": "Следующий", "Next": "Следующий",
"Preview": "Предварительный просмотр", "Preview": "Предварительный просмотр",
"Linked": "интернет-ссылка" "Linked": "интернет-ссылка",
"hashtag": "хэштег",
"smile": "улыбка",
"wink": "подмигивание"
} }

View File

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