phoonnx 0.2.6a2__py3-none-any.whl → 0.3.0__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- phoonnx/config.py +4 -1
- phoonnx/phonemizers/__init__.py +2 -0
- phoonnx/phonemizers/pt.py +57 -0
- phoonnx/version.py +3 -3
- {phoonnx-0.2.6a2.dist-info → phoonnx-0.3.0.dist-info}/METADATA +2 -1
- {phoonnx-0.2.6a2.dist-info → phoonnx-0.3.0.dist-info}/RECORD +9 -8
- phoonnx_train/preprocess.py +23 -0
- {phoonnx-0.2.6a2.dist-info → phoonnx-0.3.0.dist-info}/WHEEL +0 -0
- {phoonnx-0.2.6a2.dist-info → phoonnx-0.3.0.dist-info}/top_level.txt +0 -0
phoonnx/config.py
CHANGED
@@ -56,6 +56,7 @@ class PhonemeType(str, Enum):
|
|
56
56
|
OPENPHONEMIZER = "openphonemizer" # en
|
57
57
|
G2PEN = "g2pen" # en
|
58
58
|
|
59
|
+
TUGAPHONE = "tugaphone" # pt
|
59
60
|
G2PFA = "g2pfa"
|
60
61
|
OPENJTALK = "openjtalk" # ja
|
61
62
|
CUTLET = "cutlet" # ja
|
@@ -395,7 +396,7 @@ def get_phonemizer(phoneme_type: PhonemeType,
|
|
395
396
|
from phoonnx.phonemizers import (EpitranPhonemizer, EspeakPhonemizer, OpenPhonemizer, OpenJTaklPhonemizer,
|
396
397
|
ByT5Phonemizer, CharsiuPhonemizer, DeepPhonemizer, PersianPhonemizer,
|
397
398
|
G2pCPhonemizer, G2pMPhonemizer, G2PKPhonemizer, G2PEnPhonemizer,
|
398
|
-
TransphonePhonemizer, MirandesePhonemizer, GoruutPhonemizer,
|
399
|
+
TransphonePhonemizer, MirandesePhonemizer, GoruutPhonemizer, TugaphonePhonemizer,
|
399
400
|
GruutPhonemizer, GraphemePhonemizer, MantoqPhonemizer, MisakiPhonemizer,
|
400
401
|
KoG2PPhonemizer, PypinyinPhonemizer, PyKakasiPhonemizer, CotoviaPhonemizer,
|
401
402
|
CutletPhonemizer, PhonikudPhonemizer, VIPhonemePhonemizer, XpinyinPhonemizer,
|
@@ -404,6 +405,8 @@ def get_phonemizer(phoneme_type: PhonemeType,
|
|
404
405
|
phonemizer = EspeakPhonemizer()
|
405
406
|
elif phoneme_type == PhonemeType.BYT5:
|
406
407
|
phonemizer = ByT5Phonemizer(model)
|
408
|
+
elif phoneme_type == PhonemeType.TUGAPHONE:
|
409
|
+
phonemizer = TugaphonePhonemizer()
|
407
410
|
elif phoneme_type == PhonemeType.CHARSIU:
|
408
411
|
phonemizer = CharsiuPhonemizer(model)
|
409
412
|
elif phoneme_type == PhonemeType.GRUUT:
|
phoonnx/phonemizers/__init__.py
CHANGED
@@ -7,6 +7,7 @@ from phoonnx.phonemizers.vi import VIPhonemePhonemizer
|
|
7
7
|
from phoonnx.phonemizers.he import PhonikudPhonemizer
|
8
8
|
from phoonnx.phonemizers.ar import MantoqPhonemizer
|
9
9
|
from phoonnx.phonemizers.fa import PersianPhonemizer
|
10
|
+
from phoonnx.phonemizers.pt import TugaphonePhonemizer
|
10
11
|
from phoonnx.phonemizers.ja import PyKakasiPhonemizer, CutletPhonemizer, OpenJTaklPhonemizer
|
11
12
|
from phoonnx.phonemizers.ko import KoG2PPhonemizer, G2PKPhonemizer
|
12
13
|
from phoonnx.phonemizers.zh import (G2pCPhonemizer, G2pMPhonemizer, PypinyinPhonemizer,
|
@@ -18,6 +19,7 @@ from phoonnx.phonemizers.mwl import MirandesePhonemizer
|
|
18
19
|
Phonemizer = Union[
|
19
20
|
MisakiPhonemizer,
|
20
21
|
ByT5Phonemizer,
|
22
|
+
TugaphonePhonemizer,
|
21
23
|
UnicodeCodepointPhonemizer,
|
22
24
|
CharsiuPhonemizer,
|
23
25
|
EspeakPhonemizer,
|
@@ -0,0 +1,57 @@
|
|
1
|
+
from phoonnx.phonemizers.base import BasePhonemizer
|
2
|
+
from phoonnx.config import Alphabet
|
3
|
+
|
4
|
+
|
5
|
+
class TugaphonePhonemizer(BasePhonemizer):
|
6
|
+
|
7
|
+
def __init__(self):
|
8
|
+
from tugaphone import TugaPhonemizer
|
9
|
+
self.tuga = TugaPhonemizer()
|
10
|
+
super().__init__(Alphabet.IPA)
|
11
|
+
|
12
|
+
@classmethod
|
13
|
+
def get_lang(cls, target_lang: str) -> str:
|
14
|
+
"""
|
15
|
+
Validates and returns the closest supported language code.
|
16
|
+
|
17
|
+
Args:
|
18
|
+
target_lang (str): The language code to validate.
|
19
|
+
|
20
|
+
Returns:
|
21
|
+
str: The validated language code.
|
22
|
+
|
23
|
+
Raises:
|
24
|
+
ValueError: If the language code is unsupported.
|
25
|
+
"""
|
26
|
+
# this check is here only to throw an exception if invalid language is provided
|
27
|
+
return cls.match_lang(target_lang, ["pt-PT", "pt-BR", "pt-AO", "pt-MZ", "pt-TL"])
|
28
|
+
|
29
|
+
def phonemize_string(self, text: str, lang: str) -> str:
|
30
|
+
lang = self.get_lang(lang)
|
31
|
+
# TODO - support regional dialects
|
32
|
+
return self.tuga.phonemize_sentence(text, lang)
|
33
|
+
|
34
|
+
|
35
|
+
|
36
|
+
if __name__ == "__main__":
|
37
|
+
|
38
|
+
pho = TugaphonePhonemizer()
|
39
|
+
|
40
|
+
sentences = [
|
41
|
+
"O gato dorme.",
|
42
|
+
"Tu falas português muito bem.",
|
43
|
+
"O comboio chegou à estação.",
|
44
|
+
"A menina comeu o pão todo.",
|
45
|
+
"Vou pôr a manteiga no frigorífico.",
|
46
|
+
"Ele está a trabalhar no escritório.",
|
47
|
+
"Choveu muito ontem à noite.",
|
48
|
+
"A rapariga comprou um telemóvel novo.",
|
49
|
+
"Vamos tomar um pequeno-almoço.",
|
50
|
+
"O carro ficou sem gasolina."
|
51
|
+
]
|
52
|
+
|
53
|
+
for s in sentences:
|
54
|
+
print(s)
|
55
|
+
for code in ["pt-PT", "pt-BR", "pt-AO", "pt-MZ", "pt-TL"]:
|
56
|
+
print(f"{code} → {pho.phonemize_string(s, code)}")
|
57
|
+
print("######")
|
phoonnx/version.py
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.1
|
2
2
|
Name: phoonnx
|
3
|
-
Version: 0.
|
3
|
+
Version: 0.3.0
|
4
4
|
Home-page: https://github.com/TigreGotico/phoonnx
|
5
5
|
Author: JarbasAi
|
6
6
|
Author-email: jarbasai@mailfence.com
|
@@ -171,6 +171,7 @@ Requires-Dist: epitran; extra == "pl"
|
|
171
171
|
Provides-Extra: pt
|
172
172
|
Requires-Dist: gruut[pt]<3.0,>=2.3.0; extra == "pt"
|
173
173
|
Requires-Dist: epitran; extra == "pt"
|
174
|
+
Requires-Dist: tugaphone; extra == "pt"
|
174
175
|
Provides-Extra: quy
|
175
176
|
Requires-Dist: epitran; extra == "quy"
|
176
177
|
Provides-Extra: rn
|
@@ -1,14 +1,14 @@
|
|
1
1
|
phoonnx/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
2
|
-
phoonnx/config.py,sha256=
|
2
|
+
phoonnx/config.py,sha256=WUhgICfj3JRv3KqTtFg3xrXM-ks_jY4Rx7Kyg7Lg5MI,20129
|
3
3
|
phoonnx/phoneme_ids.py,sha256=FiNgZwV6naEsBh6XwFLh3_FyOgPiCsK9qo7S0v-CmI4,13667
|
4
4
|
phoonnx/util.py,sha256=XSjFEoqSFcujFTHxednacgC9GrSYyF-Il5L6Utmxmu4,25909
|
5
|
-
phoonnx/version.py,sha256=
|
5
|
+
phoonnx/version.py,sha256=NUwzOY8IGh0U8GKeNkPENyUypeBLWtHGxtzjSYT-4eE,237
|
6
6
|
phoonnx/voice.py,sha256=Fh60o87-_sIw4zTP8NEGvEV7XzTC0FhW9Jkq7Fr60lQ,19382
|
7
7
|
phoonnx/locale/ca/phonetic_spellings.txt,sha256=igv3t7jxLSRE5GHsdn57HOpxiWNcEmECPql6m02wbO0,47
|
8
8
|
phoonnx/locale/en/phonetic_spellings.txt,sha256=xGQlWOABLzbttpQvopl9CU-NnwEJRqKx8iuylsdUoQA,27
|
9
9
|
phoonnx/locale/gl/phonetic_spellings.txt,sha256=igv3t7jxLSRE5GHsdn57HOpxiWNcEmECPql6m02wbO0,47
|
10
10
|
phoonnx/locale/pt/phonetic_spellings.txt,sha256=KntS8QMynEJ5A3Clvcjq4qlmL-ThSbhfD6v0nKSrlqs,49
|
11
|
-
phoonnx/phonemizers/__init__.py,sha256=
|
11
|
+
phoonnx/phonemizers/__init__.py,sha256=Na6ZjPJjPbf_MpQm0K7alxO-TlGBOIv9DOaal_m-xUo,1896
|
12
12
|
phoonnx/phonemizers/ar.py,sha256=xxILq5iyH0kcI-NqFfRK4abGtpdUbykBjt_dZmPuO2w,3216
|
13
13
|
phoonnx/phonemizers/base.py,sha256=FHvAsvSjAl_oSa1GoeEi96CQ_JO_xkKXWq0ukuMxiuo,8660
|
14
14
|
phoonnx/phonemizers/en.py,sha256=N2SVoVhplQao7Ej5TXbxJU-YkAgkY0Fr9iYBFnsjFSE,9271
|
@@ -19,6 +19,7 @@ phoonnx/phonemizers/ja.py,sha256=Xojsrt715ihnIiEk9K6giYqDo9Iykw-SHfIidrHtHSU,383
|
|
19
19
|
phoonnx/phonemizers/ko.py,sha256=kwWoOFqanCB8kv2JRx17A0hP78P1wbXlX6e8VBn1ezQ,2989
|
20
20
|
phoonnx/phonemizers/mul.py,sha256=Y_M5BUY4Yka6Ba62Eea1HvgC6FTrrigaulo4KNRi1vE,99580
|
21
21
|
phoonnx/phonemizers/mwl.py,sha256=xAOB1Bz_uVO14WbYlSFgvPxsezxzUKFwy6GT2mDgP2w,1007
|
22
|
+
phoonnx/phonemizers/pt.py,sha256=6YCirAj5vTjf6SwpeMumCGVA9InexNMP1JZmG9P-TGc,1731
|
22
23
|
phoonnx/phonemizers/vi.py,sha256=_XJc-Xeawr1Lxr7o8mE_hJao1aGcj4g01XYAOxC_Scg,1311
|
23
24
|
phoonnx/phonemizers/zh.py,sha256=88Ywq8h9LDanlyz8RHjRSCY_PRK_Dq808tBADyrgaP8,9657
|
24
25
|
phoonnx/thirdparty/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
@@ -63,7 +64,7 @@ phoonnx/thirdparty/tashkeel/input_id_map.json,sha256=cnpJqjx-k53AbzKyfC4GxMS771l
|
|
63
64
|
phoonnx/thirdparty/tashkeel/model.onnx,sha256=UsQNQsoJT_n_B6CR0KHq_XuqXPI4jmCpzIm6zY5elV8,4788213
|
64
65
|
phoonnx/thirdparty/tashkeel/target_id_map.json,sha256=baNAJL_UwP9U91mLt01aAEBRRNdGr-csFB_O6roh7TA,181
|
65
66
|
phoonnx_train/export_onnx.py,sha256=UFn1id5-p9tIXxK9FvHOry59WkotNqXtupinkeKcSDs,12881
|
66
|
-
phoonnx_train/preprocess.py,sha256=
|
67
|
+
phoonnx_train/preprocess.py,sha256=dAuHEF4-yEVhVpsVTRNat_S6_jljlwa4VpM5SZezyWc,23146
|
67
68
|
phoonnx_train/train.py,sha256=nsINvDQ3dYvBne5UWPgLZ0a4qZFdSsOKk8HzZHGTLY4,8757
|
68
69
|
phoonnx_train/norm_audio/__init__.py,sha256=Al_YwqMnENXRWp0c79cDZqbdd7pFYARXKxCfBaedr1c,3030
|
69
70
|
phoonnx_train/norm_audio/trim.py,sha256=_ZsE3SYhahQSdEdBLeSwyFJGcvEbt-5E_lnWwTT4tcY,1698
|
@@ -83,7 +84,7 @@ phoonnx_train/vits/utils.py,sha256=exiyrtPHbnnGvcHWSbaH9-gR6srH5ZPHlKiqV2IHUrQ,4
|
|
83
84
|
phoonnx_train/vits/wavfile.py,sha256=oQZiTIrdw0oLTbcVwKfGXye1WtKte6qK_52qVwiMvfc,26396
|
84
85
|
phoonnx_train/vits/monotonic_align/__init__.py,sha256=5IdAOD1Z7UloMb6d_9NRFsXoNIjEQ3h9mvOSh_AtO3k,636
|
85
86
|
phoonnx_train/vits/monotonic_align/setup.py,sha256=0K5iJJ2mKIklx6ncEfCQS34skm5hHPiz9vRlQEvevvY,266
|
86
|
-
phoonnx-0.
|
87
|
-
phoonnx-0.
|
88
|
-
phoonnx-0.
|
89
|
-
phoonnx-0.
|
87
|
+
phoonnx-0.3.0.dist-info/METADATA,sha256=q8aeLB2Qlv5hLtryA399_EhE4pozB9lQMbVvQdmLQXk,8288
|
88
|
+
phoonnx-0.3.0.dist-info/WHEEL,sha256=tZoeGjtWxWRfdplE7E3d45VPlLNQnvbKiYnx7gwAy8A,92
|
89
|
+
phoonnx-0.3.0.dist-info/top_level.txt,sha256=ZrnHXe-4HqbOSX6fbdY-JiP7YEu2Bok9T0ji351MrmM,22
|
90
|
+
phoonnx-0.3.0.dist-info/RECORD,,
|
phoonnx_train/preprocess.py
CHANGED
@@ -377,6 +377,16 @@ def phonemize_worker(
|
|
377
377
|
is_flag=True,
|
378
378
|
help="Add diacritics to text (phonemizer specific, e.g., to denote stress).",
|
379
379
|
)
|
380
|
+
@click.option(
|
381
|
+
"--jsonl-audio-path",
|
382
|
+
default=None,
|
383
|
+
help="override audio_path base directory (everything before '/wav') in generated dataset.jsonl"
|
384
|
+
)
|
385
|
+
@click.option(
|
386
|
+
"--jsonl-audio-spec-path",
|
387
|
+
default=None,
|
388
|
+
help="override audio_norm_path/audio_spec_path base directory (everything before '/cache') in generated dataset.jsonl"
|
389
|
+
)
|
380
390
|
def cli(
|
381
391
|
input_dir: Path,
|
382
392
|
output_dir: Path,
|
@@ -397,6 +407,8 @@ def cli(
|
|
397
407
|
skip_audio: bool,
|
398
408
|
debug: bool,
|
399
409
|
add_diacritics: bool,
|
410
|
+
jsonl_audio_path: Optional[str],
|
411
|
+
jsonl_audio_spec_path: Optional[str],
|
400
412
|
) -> None:
|
401
413
|
"""
|
402
414
|
Preprocess a TTS dataset (e.g., LJSpeech format) for training a VITS-style model.
|
@@ -609,6 +621,17 @@ def cli(
|
|
609
621
|
_LOGGER.warning("Skipping utterance with invalid phoneme_ids before writing: %s", utt.audio_path)
|
610
622
|
continue
|
611
623
|
|
624
|
+
# apply path overrides if needed
|
625
|
+
# this allows pre-processing the dataset in one system and then train in other
|
626
|
+
if jsonl_audio_path:
|
627
|
+
base_path, fname = str(utt.audio_path).split("/wav/")
|
628
|
+
utt.audio_path = Path(f"{jsonl_audio_path}/wav/{fname}")
|
629
|
+
if jsonl_audio_spec_path:
|
630
|
+
base_path, fname = str(utt.audio_norm_path).split("/cache/")
|
631
|
+
utt.audio_norm_path = Path(f"{jsonl_audio_spec_path}/cache/{fname}")
|
632
|
+
base_path, fname = str(utt.audio_spec_path).split("/cache/")
|
633
|
+
utt.audio_spec_path = Path(f"{jsonl_audio_spec_path}/cache/{fname}")
|
634
|
+
|
612
635
|
json.dump(
|
613
636
|
utt.asdict(),
|
614
637
|
dataset_file,
|
File without changes
|
File without changes
|