Add phoneme map to phonemize script

This commit is contained in:
Michael Hansen
2023-05-12 14:30:34 -05:00
parent 5bff1c3da7
commit 1ee3d7c7c5
3 changed files with 33 additions and 6 deletions

View File

@@ -173,6 +173,11 @@ DEFAULT_PHONEME_ID_MAP: Dict[str, List[int]] = {
"": [151],
}
PHONEME_MAPS = {
# Brazilian Portuguese
"pt-br": {"c": ["k"]}
}
ALPHABETS = {
# Ukrainian
"uk": {
@@ -224,16 +229,33 @@ ALPHABETS = {
"\u0301": [45], # combining acute accent
"\u0306": [46], # combining breve
"\u0308": [47], # combining diaeresis
"": [48], # em dash
"": [48], # em dash
}
}
def phonemize(text: str, phonemizer: Phonemizer) -> List[str]:
def phonemize(
text: str,
phonemizer: Phonemizer,
phoneme_map: Optional[Dict[str, List[str]]] = None,
) -> List[str]:
phonemes_str = phonemizer.phonemize(text=text, keep_clause_breakers=True)
# Phonemes are decomposed into unicode codepoints
return list(unicodedata.normalize("NFD", phonemes_str))
unmapped_phonemes = list(unicodedata.normalize("NFD", phonemes_str))
if not phoneme_map:
return unmapped_phonemes
# Phonemes can be mapped to lists of other phonemes
mapped_phonemes = []
for phoneme in unmapped_phonemes:
sub_phonemes = phoneme_map.get(phoneme)
if sub_phonemes:
mapped_phonemes.extend(sub_phonemes)
else:
mapped_phonemes.append(phoneme)
return mapped_phonemes
def phonemes_to_ids(
@@ -281,13 +303,14 @@ def main() -> None:
args = parser.parse_args()
phonemizer = Phonemizer(args.language)
phoneme_map = PHONEME_MAPS.get(args.language)
for line in sys.stdin:
line = line.strip()
if not line:
continue
phonemes = phonemize(line, phonemizer)
phonemes = phonemize(line, phonemizer, phoneme_map=phoneme_map)
phoneme_ids = phonemes_to_ids(phonemes)
json.dump(
{

View File

@@ -24,6 +24,7 @@ from .phonemize import (
PhonemeType,
phonemes_to_ids,
phonemize,
PHONEME_MAPS,
)
_LOGGER = logging.getLogger("preprocess")
@@ -250,6 +251,7 @@ def phonemize_batch_espeak(
casing = get_text_casing(args.text_casing)
silence_detector = make_silence_detector()
phonemizer = Phonemizer(default_voice=args.language)
phoneme_map = PHONEME_MAPS.get(args.langauge)
while True:
utt_batch = queue_in.get()
@@ -259,7 +261,9 @@ def phonemize_batch_espeak(
for utt in utt_batch:
try:
_LOGGER.debug(utt)
utt.phonemes = phonemize(casing(utt.text), phonemizer)
utt.phonemes = phonemize(
casing(utt.text), phonemizer, phoneme_map=phoneme_map
)
utt.phoneme_ids = phonemes_to_ids(
utt.phonemes,
missing_phonemes=utt.missing_phonemes,