From 1ced59bfc0b86295ab837862352ca420fd80d61e Mon Sep 17 00:00:00 2001 From: Brandon Thomas Date: Tue, 5 Jul 2022 01:59:21 -0400 Subject: [PATCH] require instance of phonetization to be passed --- tts/text/pipeline/english_pipeline_v1.py | 9 +++++---- tts/text/pipeline/test_english_pipeline_v1.py | 20 +++++++++++++------ 2 files changed, 19 insertions(+), 10 deletions(-) diff --git a/tts/text/pipeline/english_pipeline_v1.py b/tts/text/pipeline/english_pipeline_v1.py index 790087b..3af6ed9 100644 --- a/tts/text/pipeline/english_pipeline_v1.py +++ b/tts/text/pipeline/english_pipeline_v1.py @@ -2,13 +2,11 @@ from typing import List from tts.text.pipeline.base_pipeline import BasePipeline from tts.text.pipeline_components.input_parsing.parser import ArpabetSequence, GraphemeSequence, ParsedSequence, parse_grapheme_and_arpabet_sequence from tts.text.pipeline_components.normalization.english_normalization import normalize_english +from tts.text.pipeline_components.phonetization.base_phonetization import BasePhonetization from tts.text.pipeline_components.phonetization.cmudict import DEFAULT_CMUDICT_PATH, CMUDict from tts.text.pipeline_components.phonetization.english_phonetization import EnglishPhonetization from tts.text.pipeline_components.sequencing.english_symbols_v1 import SPACE_INTEGER_ENCODING, arpabet_to_sequence, symbols_to_sequence -_ENGLISH_DICTIONARY = CMUDict(DEFAULT_CMUDICT_PATH) -_ENGLISH_PHONETIZER = EnglishPhonetization(_ENGLISH_DICTIONARY) - class EnglishPipelineV1(BasePipeline): """ This is a new text pipeline for FakeYou that will be introduced in July 2022. @@ -17,6 +15,9 @@ class EnglishPipelineV1(BasePipeline): the model input expectations on both sides match one another. """ + def __init__(self, phonetization: BasePhonetization): + self.phonetization = phonetization + def user_input_to_sequence(self, input_text: str) -> List[int]: """Convert raw user input into a numerical sequence for ML inference.""" @@ -45,7 +46,7 @@ class EnglishPipelineV1(BasePipeline): updated_sequence.append(subsequence) elif isinstance(subsequence, GraphemeSequence): - converted_sequence = _ENGLISH_PHONETIZER.try_convert_to_phonemes(subsequence.sequence) + converted_sequence = self.phonetization.try_convert_to_phonemes(subsequence.sequence) updated_sequence.extend(converted_sequence) return updated_sequence diff --git a/tts/text/pipeline/test_english_pipeline_v1.py b/tts/text/pipeline/test_english_pipeline_v1.py index 0c81128..6bec91c 100644 --- a/tts/text/pipeline/test_english_pipeline_v1.py +++ b/tts/text/pipeline/test_english_pipeline_v1.py @@ -1,25 +1,33 @@ from tts.text.pipeline.english_pipeline_v1 import EnglishPipelineV1 +from tts.text.pipeline_components.phonetization.cmudict import DEFAULT_CMUDICT_PATH, CMUDict +from tts.text.pipeline_components.phonetization.english_phonetization import EnglishPhonetization class TestEnglishPipelineV1: + def build_pipeline_instance(self): + # NB: CMUDict used in production may differ + cmudict = CMUDict(DEFAULT_CMUDICT_PATH) + phonetization = EnglishPhonetization(cmudict) + return EnglishPipelineV1(phonetization) + def test_no_input(self): - pipeline = EnglishPipelineV1() + pipeline = self.build_pipeline_instance() output = pipeline.user_input_to_sequence("") assert output == [] def test_whitespace(self): - pipeline = EnglishPipelineV1() + pipeline = self.build_pipeline_instance() output = pipeline.user_input_to_sequence(" \n \t ") assert output == [] def test_single_word(self): - pipeline = EnglishPipelineV1() + pipeline = self.build_pipeline_instance() output = pipeline.user_input_to_sequence("hello") assert output == [106, 73, 117, 123] # NB: Arpabet encoded def test_two_words(self): - pipeline = EnglishPipelineV1() + pipeline = self.build_pipeline_instance() output = pipeline.user_input_to_sequence("hello hello") assert output == [ 106, 73, 117, 123, # NB: Arpabet encoded @@ -28,7 +36,7 @@ class TestEnglishPipelineV1: ] def test_two_words_with_arpabet_segment(self): - pipeline = EnglishPipelineV1() + pipeline = self.build_pipeline_instance() output = pipeline.user_input_to_sequence("hello {HH AH0 L OW1}") assert output == [ 106, 73, 117, 123, # NB: Arpabet encoded @@ -37,7 +45,7 @@ class TestEnglishPipelineV1: ] def test_words_and_punctuation(self): - pipeline = EnglishPipelineV1() + pipeline = self.build_pipeline_instance() output = pipeline.user_input_to_sequence("hello friends, welcome!") assert output == [ 106, 73, 117, 123, # NB: Arpabet encoded