From b20ac5ff8985b038baf7409458ff2f62c766c561 Mon Sep 17 00:00:00 2001 From: Brandon Thomas Date: Tue, 28 Jun 2022 03:25:02 -0400 Subject: [PATCH] Phonemes WIP --- tts/phonetics/__init__.py | 0 tts/phonetics/base.py | 16 ++++++++++++++++ tts/phonetics/english_arpabet_v1.py | 29 +++++++++++++++++++++++++++++ tts/phonetics/spanish_arpabet_v1.py | 0 4 files changed, 45 insertions(+) create mode 100644 tts/phonetics/__init__.py create mode 100644 tts/phonetics/base.py create mode 100644 tts/phonetics/english_arpabet_v1.py create mode 100644 tts/phonetics/spanish_arpabet_v1.py diff --git a/tts/phonetics/__init__.py b/tts/phonetics/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/tts/phonetics/base.py b/tts/phonetics/base.py new file mode 100644 index 0000000..f2af653 --- /dev/null +++ b/tts/phonetics/base.py @@ -0,0 +1,16 @@ +""" +Base class for Arpabet Sequence Transformers. +""" + +class ArpabetTransformer: + + def transform_text(self, text): + """ + Input: String text sequence + Output: 2-dimensional tensor sequence + """ + pass + + + + diff --git a/tts/phonetics/english_arpabet_v1.py b/tts/phonetics/english_arpabet_v1.py new file mode 100644 index 0000000..e0e1884 --- /dev/null +++ b/tts/phonetics/english_arpabet_v1.py @@ -0,0 +1,29 @@ +import torch +import numpy as np + +from base import ArpabetTransformer + +class EnglishMixedArpabetTransformerV1(ArpabetTransformer): + + def transform_text(self, text): + pre_sequence = self._handle_multi_lines(text) + return self._convert_to_sequence(pre_sequence) + + def _handle_multi_lines(self, text): + # NB: This code is adapted from vanilla Tacotron. It's not very graceful. + pre_sequence = '' + for line in text.split("\n"): + if len(line) < 1: + continue + if line[-1] != ";": + line = line + ";" + pre_sequence += line + + return pre_sequence + + def _convert_to_sequence(self, pre_sequence_text): + with torch.no_grad(): + # save VRAM by not including gradients + sequence = np.array(text_to_sequence(pre_sequence_text, ['english_cleaners']))[None, :] + sequence = torch.autograd.Variable(torch.from_numpy(sequence)).cuda().long() + return sequence diff --git a/tts/phonetics/spanish_arpabet_v1.py b/tts/phonetics/spanish_arpabet_v1.py new file mode 100644 index 0000000..e69de29