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