7
7
from trainer .io import get_user_data_dir
8
8
9
9
from tests import get_tests_data_path , run_cli
10
+ from TTS .api import TTS
10
11
from TTS .tts .utils .languages import LanguageManager
11
12
from TTS .tts .utils .speakers import SpeakerManager
12
13
from TTS .utils .manage import ModelManager
@@ -29,55 +30,61 @@ def run_around_tests(tmp_path):
29
30
shutil .rmtree (tmp_path )
30
31
31
32
32
- def run_models (tmp_path , offset = 0 , step = 1 ):
33
- """Check if all the models are downloadable and tts models run correctly."""
34
- print (" > Run synthesizer with all the models." )
33
+ @pytest .fixture
34
+ def manager (tmp_path ):
35
+ """Set up model manager."""
36
+ return ModelManager (output_prefix = tmp_path , progress_bar = False )
37
+
38
+
39
+ # To split tests into different CI jobs
40
+ num_partitions = int (os .getenv ("NUM_PARTITIONS" , "1" ))
41
+ partition = int (os .getenv ("TEST_PARTITION" , "0" ))
42
+ model_names = [name for name in TTS .list_models () if name not in MODELS_WITH_SEP_TESTS ]
43
+ model_names = [name for i , name in enumerate (model_names ) if i % num_partitions == partition ]
44
+
45
+
46
+ @pytest .mark .parametrize ("model_name" , model_names )
47
+ def test_models (tmp_path , model_name , manager ):
48
+ print (f"\n > Run - { model_name } " )
35
49
output_path = tmp_path / "output.wav"
36
- manager = ModelManager (output_prefix = tmp_path , progress_bar = False )
37
- model_names = [name for name in manager .list_models () if name not in MODELS_WITH_SEP_TESTS ]
38
- print ("Model names:" , model_names )
39
- for model_name in model_names [offset ::step ]:
40
- print (f"\n > Run - { model_name } " )
41
- model_path , _ , _ = manager .download_model (model_name )
42
- if "tts_models" in model_name :
43
- local_download_dir = model_path .parent
44
- # download and run the model
45
- speaker_files = list (local_download_dir .glob ("speaker*" ))
46
- language_files = list (local_download_dir .glob ("language*" ))
47
- speaker_arg = ""
48
- language_arg = ""
49
- if len (speaker_files ) > 0 :
50
- # multi-speaker model
51
- if "speaker_ids" in speaker_files [0 ].stem :
52
- speaker_manager = SpeakerManager (speaker_id_file_path = speaker_files [0 ])
53
- elif "speakers" in speaker_files [0 ].stem :
54
- speaker_manager = SpeakerManager (d_vectors_file_path = speaker_files [0 ])
55
- speakers = list (speaker_manager .name_to_id .keys ())
56
- if len (speakers ) > 1 :
57
- speaker_arg = f'--speaker_idx "{ speakers [0 ]} "'
58
- if len (language_files ) > 0 and "language_ids" in language_files [0 ].stem :
59
- # multi-lingual model
60
- language_manager = LanguageManager (language_ids_file_path = language_files [0 ])
61
- languages = language_manager .language_names
62
- if len (languages ) > 1 :
63
- language_arg = f'--language_idx "{ languages [0 ]} "'
64
- run_cli (
65
- f'tts --model_name { model_name } --text "This is an example." '
66
- f'--out_path "{ output_path } " { speaker_arg } { language_arg } --no-progress_bar'
67
- )
68
- elif "voice_conversion_models" in model_name :
69
- speaker_wav = os .path .join (get_tests_data_path (), "ljspeech" , "wavs" , "LJ001-0001.wav" )
70
- reference_wav = os .path .join (get_tests_data_path (), "ljspeech" , "wavs" , "LJ001-0032.wav" )
71
- run_cli (
72
- f"tts --model_name { model_name } "
73
- f'--out_path "{ output_path } " --source_wav "{ speaker_wav } " --target_wav "{ reference_wav } " --no-progress_bar'
74
- )
75
- else :
76
- # only download the model
77
- manager .download_model (model_name )
78
- # remove downloaded models
79
- shutil .rmtree (get_user_data_dir ("tts" ))
80
- print (f" | > OK: { model_name } " )
50
+ model_path , _ , _ = manager .download_model (model_name )
51
+ if "tts_models" in model_name :
52
+ local_download_dir = model_path .parent
53
+ # download and run the model
54
+ speaker_files = list (local_download_dir .glob ("speaker*" ))
55
+ language_files = list (local_download_dir .glob ("language*" ))
56
+ speaker_arg = ""
57
+ language_arg = ""
58
+ if len (speaker_files ) > 0 :
59
+ # multi-speaker model
60
+ if "speaker_ids" in speaker_files [0 ].stem :
61
+ speaker_manager = SpeakerManager (speaker_id_file_path = speaker_files [0 ])
62
+ elif "speakers" in speaker_files [0 ].stem :
63
+ speaker_manager = SpeakerManager (d_vectors_file_path = speaker_files [0 ])
64
+ speakers = list (speaker_manager .name_to_id .keys ())
65
+ if len (speakers ) > 1 :
66
+ speaker_arg = f'--speaker_idx "{ speakers [0 ]} "'
67
+ if len (language_files ) > 0 and "language_ids" in language_files [0 ].stem :
68
+ # multi-lingual model
69
+ language_manager = LanguageManager (language_ids_file_path = language_files [0 ])
70
+ languages = language_manager .language_names
71
+ if len (languages ) > 1 :
72
+ language_arg = f'--language_idx "{ languages [0 ]} "'
73
+ run_cli (
74
+ f'tts --model_name { model_name } --text "This is an example." '
75
+ f'--out_path "{ output_path } " { speaker_arg } { language_arg } --no-progress_bar'
76
+ )
77
+ elif "voice_conversion_models" in model_name :
78
+ speaker_wav = os .path .join (get_tests_data_path (), "ljspeech" , "wavs" , "LJ001-0001.wav" )
79
+ reference_wav = os .path .join (get_tests_data_path (), "ljspeech" , "wavs" , "LJ001-0032.wav" )
80
+ run_cli (
81
+ f"tts --model_name { model_name } "
82
+ f'--out_path "{ output_path } " --source_wav "{ speaker_wav } " --target_wav "{ reference_wav } " --no-progress_bar'
83
+ )
84
+ else :
85
+ # only download the model
86
+ manager .download_model (model_name )
87
+ print (f" | > OK: { model_name } " )
81
88
82
89
83
90
@pytest .mark .skipif (GITHUB_ACTIONS , reason = "Model too big for CI" )
@@ -263,20 +270,3 @@ def test_voice_conversion(tmp_path):
263
270
f"tts --model_name { model_name } "
264
271
f" --out_path { output_path } --speaker_wav { speaker_wav } --reference_wav { reference_wav } --language_idx { language_id } --no-progress_bar"
265
272
)
266
-
267
-
268
- """
269
- These are used to split tests into different actions on Github.
270
- """
271
-
272
-
273
- def test_models_offset_0_step_3 (tmp_path ):
274
- run_models (tmp_path , offset = 0 , step = 3 )
275
-
276
-
277
- def test_models_offset_1_step_3 (tmp_path ):
278
- run_models (tmp_path , offset = 1 , step = 3 )
279
-
280
-
281
- def test_models_offset_2_step_3 (tmp_path ):
282
- run_models (tmp_path , offset = 2 , step = 3 )
0 commit comments