Wismut commited on
Commit
6c68b83
·
1 Parent(s): 7c73742

switched to openphonemizer

Browse files
Files changed (6) hide show
  1. espeak_util.py +0 -206
  2. inference.py +4 -11
  3. packages.txt +0 -1
  4. pyproject.toml +22 -21
  5. requirements.txt +2 -1
  6. uv.lock +153 -0
espeak_util.py DELETED
@@ -1,206 +0,0 @@
1
- import platform
2
- import subprocess
3
- import shutil
4
- from pathlib import Path
5
- import os
6
- from typing import Optional, Tuple
7
- from phonemizer.backend.espeak.wrapper import EspeakWrapper
8
-
9
-
10
- class EspeakConfig:
11
- """Utility class for configuring espeak-ng library and binary."""
12
-
13
- @staticmethod
14
- def find_espeak_binary() -> tuple[bool, Optional[str]]:
15
- """
16
- Find espeak-ng binary using multiple methods.
17
-
18
- Returns:
19
- tuple: (bool indicating if espeak is available, path to espeak binary if found)
20
- """
21
- # Common binary names
22
- binary_names = ["espeak-ng", "espeak"]
23
- if platform.system() == "Windows":
24
- binary_names = ["espeak-ng.exe", "espeak.exe"]
25
-
26
- # Common installation directories for Linux
27
- linux_paths = [
28
- "/usr/bin",
29
- "/usr/local/bin",
30
- "/usr/lib/espeak-ng",
31
- "/usr/local/lib/espeak-ng",
32
- "/opt/espeak-ng/bin",
33
- ]
34
-
35
- # First check if it's in PATH
36
- for name in binary_names:
37
- espeak_path = shutil.which(name)
38
- if espeak_path:
39
- return True, espeak_path
40
-
41
- # For Linux, check common installation directories
42
- if platform.system() == "Linux":
43
- for directory in linux_paths:
44
- for name in binary_names:
45
- path = Path(directory) / name
46
- if path.exists():
47
- return True, str(path)
48
-
49
- # Try running the command directly as a last resort
50
- try:
51
- subprocess.run(
52
- ["espeak-ng", "--version"],
53
- stdout=subprocess.PIPE,
54
- stderr=subprocess.PIPE,
55
- check=True,
56
- )
57
- return True, "espeak-ng"
58
- except (subprocess.SubprocessError, FileNotFoundError):
59
- pass
60
-
61
- return False, None
62
-
63
- @staticmethod
64
- def find_library_path() -> Optional[str]:
65
- """
66
- Find the espeak-ng library using multiple search methods.
67
-
68
- Returns:
69
- Optional[str]: Path to the library if found, None otherwise
70
- """
71
- system = platform.system()
72
-
73
- if system == "Linux":
74
- lib_names = ["libespeak-ng.so", "libespeak-ng.so.1"]
75
- common_paths = [
76
- # Debian/Ubuntu paths
77
- "/usr/lib/x86_64-linux-gnu",
78
- "/usr/lib/aarch64-linux-gnu", # For ARM64
79
- "/usr/lib/arm-linux-gnueabihf", # For ARM32
80
- "/usr/lib",
81
- "/usr/local/lib",
82
- # Fedora/RHEL paths
83
- "/usr/lib64",
84
- "/usr/lib32",
85
- # Common additional paths
86
- "/usr/lib/espeak-ng",
87
- "/usr/local/lib/espeak-ng",
88
- "/opt/espeak-ng/lib",
89
- ]
90
-
91
- # Check common locations first
92
- for path in common_paths:
93
- for lib_name in lib_names:
94
- lib_path = Path(path) / lib_name
95
- if lib_path.exists():
96
- return str(lib_path)
97
-
98
- # Search system library paths
99
- try:
100
- # Use ldconfig to find the library
101
- result = subprocess.run(
102
- ["ldconfig", "-p"], capture_output=True, text=True, check=True
103
- )
104
- for line in result.stdout.splitlines():
105
- if "libespeak-ng.so" in line:
106
- # Extract path from ldconfig output
107
- return line.split("=>")[-1].strip()
108
- except (subprocess.SubprocessError, FileNotFoundError):
109
- pass
110
-
111
- elif system == "Darwin": # macOS
112
- common_paths = [
113
- Path("/opt/homebrew/lib/libespeak-ng.dylib"),
114
- Path("/usr/local/lib/libespeak-ng.dylib"),
115
- *list(
116
- Path("/opt/homebrew/Cellar/espeak-ng").glob(
117
- "*/lib/libespeak-ng.dylib"
118
- )
119
- ),
120
- *list(
121
- Path("/usr/local/Cellar/espeak-ng").glob("*/lib/libespeak-ng.dylib")
122
- ),
123
- ]
124
-
125
- for path in common_paths:
126
- if path.exists():
127
- return str(path)
128
-
129
- elif system == "Windows":
130
- common_paths = [
131
- Path(os.environ.get("PROGRAMFILES", "C:\\Program Files"))
132
- / "eSpeak NG"
133
- / "libespeak-ng.dll",
134
- Path(os.environ.get("PROGRAMFILES(X86)", "C:\\Program Files (x86)"))
135
- / "eSpeak NG"
136
- / "libespeak-ng.dll",
137
- *[
138
- Path(p) / "libespeak-ng.dll"
139
- for p in os.environ.get("PATH", "").split(os.pathsep)
140
- ],
141
- ]
142
-
143
- for path in common_paths:
144
- if path.exists():
145
- return str(path)
146
-
147
- return None
148
-
149
- @classmethod
150
- def configure_espeak(cls) -> Tuple[bool, str]:
151
- """
152
- Configure espeak-ng for use with the phonemizer.
153
-
154
- Returns:
155
- Tuple[bool, str]: (Success status, Status message)
156
- """
157
- # First check if espeak binary is available
158
- espeak_available, espeak_path = cls.find_espeak_binary()
159
- if not espeak_available:
160
- raise FileNotFoundError(
161
- "Could not find espeak-ng binary. Please install espeak-ng:\n"
162
- "Ubuntu/Debian: sudo apt-get install espeak-ng espeak-ng-data\n"
163
- "Fedora: sudo dnf install espeak-ng\n"
164
- "Arch: sudo pacman -S espeak-ng\n"
165
- "MacOS: brew install espeak-ng\n"
166
- "Windows: Download from https://github.com/espeak-ng/espeak-ng/releases"
167
- )
168
-
169
- # Find the library
170
- library_path = cls.find_library_path()
171
- if not library_path:
172
- # On Linux, we might not need to explicitly set the library path
173
- if platform.system() == "Linux":
174
- return True, f"Using system espeak-ng installation at: {espeak_path}"
175
- else:
176
- raise FileNotFoundError(
177
- "Could not find espeak-ng library. Please ensure espeak-ng is properly installed."
178
- )
179
-
180
- # Try to set the library path
181
- try:
182
- EspeakWrapper.set_library(library_path)
183
- return True, f"Successfully configured espeak-ng library at: {library_path}"
184
- except Exception as e:
185
- if platform.system() == "Linux":
186
- # On Linux, try to continue without explicit library path
187
- return True, f"Using system espeak-ng installation at: {espeak_path}"
188
- else:
189
- raise RuntimeError(f"Failed to configure espeak-ng library: {str(e)}")
190
-
191
-
192
- def setup_espeak():
193
- """
194
- Set up espeak-ng for use with the phonemizer.
195
- Raises appropriate exceptions if setup fails.
196
- """
197
- try:
198
- success, message = EspeakConfig.configure_espeak()
199
- print(message)
200
- except Exception as e:
201
- print(f"Error configuring espeak-ng: {str(e)}")
202
- raise
203
-
204
-
205
- # Replace the original set_espeak_library function with this
206
- set_espeak_library = setup_espeak
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
inference.py CHANGED
@@ -2,10 +2,9 @@ import yaml
2
  import random
3
  import librosa
4
  import numpy as np
5
- import phonemizer
6
  import torch
7
  import torchaudio
8
-
9
  from collections import OrderedDict
10
  from munch import Munch
11
  from nltk.tokenize import word_tokenize
@@ -14,7 +13,6 @@ from cached_path import cached_path
14
 
15
  # Local or project imports
16
  from models import *
17
- from espeak_util import set_espeak_library
18
  from Utils.PLBERT.util import load_plbert
19
  from Modules.diffusion.sampler import DiffusionSampler, ADPM2Sampler, KarrasSchedule
20
 
@@ -145,10 +143,7 @@ elif torch.backends.mps.is_available():
145
  # -----------------------------------------------------------------------------
146
  # PHONEMIZER INITIALIZATION
147
  # -----------------------------------------------------------------------------
148
- set_espeak_library()
149
- global_phonemizer = phonemizer.backend.EspeakBackend(
150
- language="en-us", preserve_punctuation=True, with_stress=True
151
- )
152
 
153
  # -----------------------------------------------------------------------------
154
  # LOAD CONFIG
@@ -165,8 +160,6 @@ text_aligner = load_ASR_models(ASR_path, ASR_config)
165
  F0_path = config.get("F0_path", False)
166
  pitch_extractor = load_F0_models(F0_path)
167
 
168
- from Utils.PLBERT.util import load_plbert
169
-
170
  BERT_path = config.get("PLBERT_dir", False)
171
  plbert = load_plbert(BERT_path)
172
 
@@ -238,8 +231,8 @@ def inference(
238
  """
239
  text = text.strip()
240
  # Phonemize
241
- ps = global_phonemizer.phonemize([text])
242
- ps = word_tokenize(ps[0])
243
  ps = " ".join(ps)
244
  tokens = textclenaer(ps)
245
  tokens.insert(0, 0) # Insert padding index at the start
 
2
  import random
3
  import librosa
4
  import numpy as np
 
5
  import torch
6
  import torchaudio
7
+ from openphonemizer import OpenPhonemizer
8
  from collections import OrderedDict
9
  from munch import Munch
10
  from nltk.tokenize import word_tokenize
 
13
 
14
  # Local or project imports
15
  from models import *
 
16
  from Utils.PLBERT.util import load_plbert
17
  from Modules.diffusion.sampler import DiffusionSampler, ADPM2Sampler, KarrasSchedule
18
 
 
143
  # -----------------------------------------------------------------------------
144
  # PHONEMIZER INITIALIZATION
145
  # -----------------------------------------------------------------------------
146
+ global_phonemizer = OpenPhonemizer()
 
 
 
147
 
148
  # -----------------------------------------------------------------------------
149
  # LOAD CONFIG
 
160
  F0_path = config.get("F0_path", False)
161
  pitch_extractor = load_F0_models(F0_path)
162
 
 
 
163
  BERT_path = config.get("PLBERT_dir", False)
164
  plbert = load_plbert(BERT_path)
165
 
 
231
  """
232
  text = text.strip()
233
  # Phonemize
234
+ ps = global_phonemizer(text)
235
+ ps = word_tokenize(ps)
236
  ps = " ".join(ps)
237
  tokens = textclenaer(ps)
238
  tokens.insert(0, 0) # Insert padding index at the start
packages.txt CHANGED
@@ -1 +0,0 @@
1
- espeak-ng
 
 
pyproject.toml CHANGED
@@ -5,27 +5,28 @@ description = "Add your description here"
5
  readme = "README.md"
6
  requires-python = ">=3.10"
7
  dependencies = [
8
- "audiofile>=1.5.0",
9
- "cached-path>=1.6.6",
10
- "einops>=0.8.0",
11
- "einops-exts>=0.0.4",
12
- "gradio>=5.9.1",
13
- "huggingface-hub>=0.26.5",
14
- "librosa>=0.10.2.post1",
15
- "markdown>=3.7",
16
- "matplotlib>=3.10.0",
17
- "monotonic-align",
18
- "munch>=4.0.0",
19
- "nltk>=3.9.1",
20
- "numpy==2.0",
21
- "phonemizer>=3.3.0",
22
- "scikit-learn>=1.6.0",
23
- "soundfile>=0.12.1",
24
- "torch>=2.5.1",
25
- "torchaudio>=2.5.1",
26
- "tqdm>=4.67.1",
27
- "transformers>=4.47.1",
28
- "txtsplit>=1.0.0",
 
29
  ]
30
 
31
  [tool.uv.sources]
 
5
  readme = "README.md"
6
  requires-python = ">=3.10"
7
  dependencies = [
8
+ "audiofile>=1.5.0",
9
+ "cached-path>=1.6.6",
10
+ "einops>=0.8.0",
11
+ "einops-exts>=0.0.4",
12
+ "gradio>=5.9.1",
13
+ "huggingface-hub>=0.26.5",
14
+ "librosa>=0.10.2.post1",
15
+ "markdown>=3.7",
16
+ "matplotlib>=3.10.0",
17
+ "monotonic-align",
18
+ "munch>=4.0.0",
19
+ "nltk>=3.9.1",
20
+ "numpy==2.0",
21
+ "openphonemizer>=0.1.2",
22
+ "phonemizer>=3.3.0",
23
+ "scikit-learn>=1.6.0",
24
+ "soundfile>=0.12.1",
25
+ "torch>=2.5.1",
26
+ "torchaudio>=2.5.1",
27
+ "tqdm>=4.67.1",
28
+ "transformers>=4.47.1",
29
+ "txtsplit>=1.0.0",
30
  ]
31
 
32
  [tool.uv.sources]
requirements.txt CHANGED
@@ -18,4 +18,5 @@ torch
18
  torchaudio==2.5.1
19
  tqdm==4.67.1
20
  transformers==4.47.1
21
- txtsplit==1.0.0
 
 
18
  torchaudio==2.5.1
19
  tqdm==4.67.1
20
  transformers==4.47.1
21
+ txtsplit
22
+ openphonemizer
uv.lock CHANGED
@@ -7,6 +7,15 @@ resolution-markers = [
7
  "python_full_version >= '3.13'",
8
  ]
9
 
 
 
 
 
 
 
 
 
 
10
  [[package]]
11
  name = "aiofiles"
12
  version = "23.2.1"
@@ -58,6 +67,7 @@ dependencies = [
58
  { name = "munch" },
59
  { name = "nltk" },
60
  { name = "numpy" },
 
61
  { name = "phonemizer" },
62
  { name = "scikit-learn" },
63
  { name = "soundfile" },
@@ -83,6 +93,7 @@ requires-dist = [
83
  { name = "munch", specifier = ">=4.0.0" },
84
  { name = "nltk", specifier = ">=3.9.1" },
85
  { name = "numpy", specifier = "==2.0" },
 
86
  { name = "phonemizer", specifier = ">=3.3.0" },
87
  { name = "scikit-learn", specifier = ">=1.6.0" },
88
  { name = "soundfile", specifier = ">=0.12.1" },
@@ -544,6 +555,21 @@ wheels = [
544
  { url = "https://files.pythonhosted.org/packages/d5/50/83c593b07763e1161326b3b8c6686f0f4b0f24d5526546bee538c89837d6/decorator-5.1.1-py3-none-any.whl", hash = "sha256:b8c3f85900b9dc423225913c5aace94729fe1fa9763b38939a95226f02d37186", size = 9073 },
545
  ]
546
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
547
  [[package]]
548
  name = "dlinfo"
549
  version = "1.2.1"
@@ -553,6 +579,12 @@ wheels = [
553
  { url = "https://files.pythonhosted.org/packages/a7/f9/e014eb5740dfc6ebe6105f4c38890f361e5b0e1537a9f04bb4f34432efb9/dlinfo-1.2.1-py3-none-any.whl", hash = "sha256:a97d7cc66d997b4ac491f0e8068eb324790994834951a9beb5a4619835b361d9", size = 3559 },
554
  ]
555
 
 
 
 
 
 
 
556
  [[package]]
557
  name = "einops"
558
  version = "0.8.0"
@@ -830,6 +862,50 @@ wheels = [
830
  { url = "https://files.pythonhosted.org/packages/69/ca/4d8ae560144a3e39b2a6d1848a5852c2822624506f9eccf90dabccd004bf/gradio_client-1.5.2-py3-none-any.whl", hash = "sha256:e25615059e540247724856fef15b3974cc9290b158356d4e541b0105c0342514", size = 320385 },
831
  ]
832
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
833
  [[package]]
834
  name = "h11"
835
  version = "0.14.0"
@@ -1410,6 +1486,18 @@ wheels = [
1410
  { url = "https://files.pythonhosted.org/packages/4d/66/7d9e26593edda06e8cb531874633f7c2372279c3b0f46235539fe546df8b/nltk-3.9.1-py3-none-any.whl", hash = "sha256:4fa26829c5b00715afe3061398a8989dc643b92ce7dd93fb4585a70930d168a1", size = 1505442 },
1411
  ]
1412
 
 
 
 
 
 
 
 
 
 
 
 
 
1413
  [[package]]
1414
  name = "numba"
1415
  version = "0.60.0"
@@ -1595,6 +1683,20 @@ wheels = [
1595
  { url = "https://files.pythonhosted.org/packages/87/20/199b8713428322a2f22b722c62b8cc278cc53dffa9705d744484b5035ee9/nvidia_nvtx_cu12-12.4.127-py3-none-manylinux2014_x86_64.whl", hash = "sha256:781e950d9b9f60d8241ccea575b32f5105a5baf4c2351cab5256a24869f12a1a", size = 99144 },
1596
  ]
1597
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1598
  [[package]]
1599
  name = "orjson"
1600
  version = "3.10.12"
@@ -2623,6 +2725,36 @@ wheels = [
2623
  { url = "https://files.pythonhosted.org/packages/40/44/4a5f08c96eb108af5cb50b41f76142f0afa346dfa99d5296fe7202a11854/tabulate-0.9.0-py3-none-any.whl", hash = "sha256:024ca478df22e9340661486f85298cff5f6dcdba14f3813e8830015b9ed1948f", size = 35252 },
2624
  ]
2625
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2626
  [[package]]
2627
  name = "threadpoolctl"
2628
  version = "3.5.0"
@@ -2905,3 +3037,24 @@ wheels = [
2905
  { url = "https://files.pythonhosted.org/packages/39/9c/16916d9a436c109a1d7ba78817e8fee357b78968be3f6e6f517f43afa43d/websockets-14.1-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:5a42d3ecbb2db5080fc578314439b1d79eef71d323dc661aa616fb492436af5d", size = 163316 },
2906
  { url = "https://files.pythonhosted.org/packages/b0/0b/c7e5d11020242984d9d37990310520ed663b942333b83a033c2f20191113/websockets-14.1-py3-none-any.whl", hash = "sha256:4d4fc827a20abe6d544a119896f6b78ee13fe81cbfef416f3f2ddf09a03f0e2e", size = 156277 },
2907
  ]
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
7
  "python_full_version >= '3.13'",
8
  ]
9
 
10
+ [[package]]
11
+ name = "absl-py"
12
+ version = "2.1.0"
13
+ source = { registry = "https://pypi.org/simple" }
14
+ sdist = { url = "https://files.pythonhosted.org/packages/7a/8f/fc001b92ecc467cc32ab38398bd0bfb45df46e7523bf33c2ad22a505f06e/absl-py-2.1.0.tar.gz", hash = "sha256:7820790efbb316739cde8b4e19357243fc3608a152024288513dd968d7d959ff", size = 118055 }
15
+ wheels = [
16
+ { url = "https://files.pythonhosted.org/packages/a2/ad/e0d3c824784ff121c03cc031f944bc7e139a8f1870ffd2845cc2dd76f6c4/absl_py-2.1.0-py3-none-any.whl", hash = "sha256:526a04eadab8b4ee719ce68f204172ead1027549089702d99b9059f129ff1308", size = 133706 },
17
+ ]
18
+
19
  [[package]]
20
  name = "aiofiles"
21
  version = "23.2.1"
 
67
  { name = "munch" },
68
  { name = "nltk" },
69
  { name = "numpy" },
70
+ { name = "openphonemizer" },
71
  { name = "phonemizer" },
72
  { name = "scikit-learn" },
73
  { name = "soundfile" },
 
93
  { name = "munch", specifier = ">=4.0.0" },
94
  { name = "nltk", specifier = ">=3.9.1" },
95
  { name = "numpy", specifier = "==2.0" },
96
+ { name = "openphonemizer", specifier = ">=0.1.2" },
97
  { name = "phonemizer", specifier = ">=3.3.0" },
98
  { name = "scikit-learn", specifier = ">=1.6.0" },
99
  { name = "soundfile", specifier = ">=0.12.1" },
 
555
  { url = "https://files.pythonhosted.org/packages/d5/50/83c593b07763e1161326b3b8c6686f0f4b0f24d5526546bee538c89837d6/decorator-5.1.1-py3-none-any.whl", hash = "sha256:b8c3f85900b9dc423225913c5aace94729fe1fa9763b38939a95226f02d37186", size = 9073 },
556
  ]
557
 
558
+ [[package]]
559
+ name = "deep-phonemizer"
560
+ version = "0.0.19"
561
+ source = { registry = "https://pypi.org/simple" }
562
+ dependencies = [
563
+ { name = "certifi" },
564
+ { name = "pyyaml" },
565
+ { name = "setuptools" },
566
+ { name = "tensorboard" },
567
+ { name = "torch" },
568
+ { name = "tqdm" },
569
+ { name = "wheel" },
570
+ ]
571
+ sdist = { url = "https://files.pythonhosted.org/packages/6f/39/f04c12980b6d639247b7d544abcd5b5e2727ee2b9c5f2e01e8a0bf735041/deep-phonemizer-0.0.19.tar.gz", hash = "sha256:6f47af558f0a51eec20080fc2dce999010d9342586ad42350496da0ba1610ec3", size = 29731 }
572
+
573
  [[package]]
574
  name = "dlinfo"
575
  version = "1.2.1"
 
579
  { url = "https://files.pythonhosted.org/packages/a7/f9/e014eb5740dfc6ebe6105f4c38890f361e5b0e1537a9f04bb4f34432efb9/dlinfo-1.2.1-py3-none-any.whl", hash = "sha256:a97d7cc66d997b4ac491f0e8068eb324790994834951a9beb5a4619835b361d9", size = 3559 },
580
  ]
581
 
582
+ [[package]]
583
+ name = "docopt"
584
+ version = "0.6.2"
585
+ source = { registry = "https://pypi.org/simple" }
586
+ sdist = { url = "https://files.pythonhosted.org/packages/a2/55/8f8cab2afd404cf578136ef2cc5dfb50baa1761b68c9da1fb1e4eed343c9/docopt-0.6.2.tar.gz", hash = "sha256:49b3a825280bd66b3aa83585ef59c4a8c82f2c8a522dbe754a8bc8d08c85c491", size = 25901 }
587
+
588
  [[package]]
589
  name = "einops"
590
  version = "0.8.0"
 
862
  { url = "https://files.pythonhosted.org/packages/69/ca/4d8ae560144a3e39b2a6d1848a5852c2822624506f9eccf90dabccd004bf/gradio_client-1.5.2-py3-none-any.whl", hash = "sha256:e25615059e540247724856fef15b3974cc9290b158356d4e541b0105c0342514", size = 320385 },
863
  ]
864
 
865
+ [[package]]
866
+ name = "grpcio"
867
+ version = "1.68.1"
868
+ source = { registry = "https://pypi.org/simple" }
869
+ sdist = { url = "https://files.pythonhosted.org/packages/91/ec/b76ff6d86bdfd1737a5ec889394b54c18b1ec3832d91041e25023fbcb67d/grpcio-1.68.1.tar.gz", hash = "sha256:44a8502dd5de653ae6a73e2de50a401d84184f0331d0ac3daeb044e66d5c5054", size = 12694654 }
870
+ wheels = [
871
+ { url = "https://files.pythonhosted.org/packages/f5/88/d1ac9676a0809e3efec154d45246474ec12a4941686da71ffb3d34190294/grpcio-1.68.1-cp310-cp310-linux_armv7l.whl", hash = "sha256:d35740e3f45f60f3c37b1e6f2f4702c23867b9ce21c6410254c9c682237da68d", size = 5171054 },
872
+ { url = "https://files.pythonhosted.org/packages/ec/cb/94ca41e100201fee8876a4b44d64e43ac7405929909afe1fa943d65b25ef/grpcio-1.68.1-cp310-cp310-macosx_12_0_universal2.whl", hash = "sha256:d99abcd61760ebb34bdff37e5a3ba333c5cc09feda8c1ad42547bea0416ada78", size = 11078566 },
873
+ { url = "https://files.pythonhosted.org/packages/d5/b0/ad4c66f2e3181b4eab99885686c960c403ae2300bacfe427526282facc07/grpcio-1.68.1-cp310-cp310-manylinux_2_17_aarch64.whl", hash = "sha256:f8261fa2a5f679abeb2a0a93ad056d765cdca1c47745eda3f2d87f874ff4b8c9", size = 5690039 },
874
+ { url = "https://files.pythonhosted.org/packages/67/1e/f5d3410674d021831c9fef2d1d7ca2357b08d09c840ad4e054ea8ffc302e/grpcio-1.68.1-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0feb02205a27caca128627bd1df4ee7212db051019a9afa76f4bb6a1a80ca95e", size = 6317470 },
875
+ { url = "https://files.pythonhosted.org/packages/91/93/701d5f33b163a621c8f2d4453f9e22f6c14e996baed54118d0dea93fc8c7/grpcio-1.68.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:919d7f18f63bcad3a0f81146188e90274fde800a94e35d42ffe9eadf6a9a6330", size = 5941884 },
876
+ { url = "https://files.pythonhosted.org/packages/67/44/06917ffaa35ca463b93dde60f324015fe4192312b0f4dd0faec061e7ca7f/grpcio-1.68.1-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:963cc8d7d79b12c56008aabd8b457f400952dbea8997dd185f155e2f228db079", size = 6646332 },
877
+ { url = "https://files.pythonhosted.org/packages/d4/94/074db039532687ec8ef07ebbcc747c46547c94329016e22b97d97b9e5f3b/grpcio-1.68.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:ccf2ebd2de2d6661e2520dae293298a3803a98ebfc099275f113ce1f6c2a80f1", size = 6212515 },
878
+ { url = "https://files.pythonhosted.org/packages/c5/f2/0c939264c36c6038fae1732a2a3e01a7075ba171a2154d86842ee0ac9b0a/grpcio-1.68.1-cp310-cp310-win32.whl", hash = "sha256:2cc1fd04af8399971bcd4f43bd98c22d01029ea2e56e69c34daf2bf8470e47f5", size = 3650459 },
879
+ { url = "https://files.pythonhosted.org/packages/b6/90/b0e9278e88f747879d13b79fb893c9acb381fb90541ad9e416c7816c5eaf/grpcio-1.68.1-cp310-cp310-win_amd64.whl", hash = "sha256:ee2e743e51cb964b4975de572aa8fb95b633f496f9fcb5e257893df3be854746", size = 4399144 },
880
+ { url = "https://files.pythonhosted.org/packages/fe/0d/fde5a5777d65696c39bb3e622fe1239dd0a878589bf6c5066980e7d19154/grpcio-1.68.1-cp311-cp311-linux_armv7l.whl", hash = "sha256:55857c71641064f01ff0541a1776bfe04a59db5558e82897d35a7793e525774c", size = 5180919 },
881
+ { url = "https://files.pythonhosted.org/packages/07/fd/e5fa75b5ddf5d9f16606196973f9c2b4b1adf5a1735117eb7129fc33d2ec/grpcio-1.68.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:4b177f5547f1b995826ef529d2eef89cca2f830dd8b2c99ffd5fde4da734ba73", size = 11150922 },
882
+ { url = "https://files.pythonhosted.org/packages/86/1e/aaf5a1dae87fe47f277c5a1be72b31d2c209d095bebb0ce1d2df5cb8779c/grpcio-1.68.1-cp311-cp311-manylinux_2_17_aarch64.whl", hash = "sha256:3522c77d7e6606d6665ec8d50e867f13f946a4e00c7df46768f1c85089eae515", size = 5685685 },
883
+ { url = "https://files.pythonhosted.org/packages/a9/69/c4fdf87d5c5696207e2ed232e4bdde656d8c99ba91f361927f3f06aa41ca/grpcio-1.68.1-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9d1fae6bbf0816415b81db1e82fb3bf56f7857273c84dcbe68cbe046e58e1ccd", size = 6316535 },
884
+ { url = "https://files.pythonhosted.org/packages/6f/c6/539660516ea7db7bc3d39e07154512ae807961b14ec6b5b0c58d15657ff1/grpcio-1.68.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:298ee7f80e26f9483f0b6f94cc0a046caf54400a11b644713bb5b3d8eb387600", size = 5939920 },
885
+ { url = "https://files.pythonhosted.org/packages/38/f3/97a74dc4dd95bf195168d6da2ca4731ab7d3d0b03078f2833b4ff9c4f48f/grpcio-1.68.1-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:cbb5780e2e740b6b4f2d208e90453591036ff80c02cc605fea1af8e6fc6b1bbe", size = 6644770 },
886
+ { url = "https://files.pythonhosted.org/packages/cb/36/79a5e04073e58106aff442509a0c459151fa4f43202395db3eb8f77b78e9/grpcio-1.68.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:ddda1aa22495d8acd9dfbafff2866438d12faec4d024ebc2e656784d96328ad0", size = 6211743 },
887
+ { url = "https://files.pythonhosted.org/packages/73/0f/2250f4a0de1a0bec0726c47a021cbf71af6105f512ecaf67703e2eb1ad2f/grpcio-1.68.1-cp311-cp311-win32.whl", hash = "sha256:b33bd114fa5a83f03ec6b7b262ef9f5cac549d4126f1dc702078767b10c46ed9", size = 3650734 },
888
+ { url = "https://files.pythonhosted.org/packages/4b/29/061c93a35f498238dc35eb8fb039ce168aa99cac2f0f1ce0c8a0a4bdb274/grpcio-1.68.1-cp311-cp311-win_amd64.whl", hash = "sha256:7f20ebec257af55694d8f993e162ddf0d36bd82d4e57f74b31c67b3c6d63d8b2", size = 4400816 },
889
+ { url = "https://files.pythonhosted.org/packages/f5/15/674a1468fef234fa996989509bbdfc0d695878cbb385b9271f5d690d5cd3/grpcio-1.68.1-cp312-cp312-linux_armv7l.whl", hash = "sha256:8829924fffb25386995a31998ccbbeaa7367223e647e0122043dfc485a87c666", size = 5148351 },
890
+ { url = "https://files.pythonhosted.org/packages/62/f5/edce368682d6d0b3573b883b134df022a44b1c888ea416dd7d78d480ab24/grpcio-1.68.1-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:3aed6544e4d523cd6b3119b0916cef3d15ef2da51e088211e4d1eb91a6c7f4f1", size = 11127559 },
891
+ { url = "https://files.pythonhosted.org/packages/ce/14/a6fde3114eafd9e4e345d1ebd0291c544d83b22f0554b1678a2968ae39e1/grpcio-1.68.1-cp312-cp312-manylinux_2_17_aarch64.whl", hash = "sha256:4efac5481c696d5cb124ff1c119a78bddbfdd13fc499e3bc0ca81e95fc573684", size = 5645221 },
892
+ { url = "https://files.pythonhosted.org/packages/21/21/d1865bd6a22f9a26217e4e1b35f9105f7a0cdfb7a5fffe8be48e1a1afafc/grpcio-1.68.1-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6ab2d912ca39c51f46baf2a0d92aa265aa96b2443266fc50d234fa88bf877d8e", size = 6292270 },
893
+ { url = "https://files.pythonhosted.org/packages/3a/f6/19798be6c3515a7b1fb9570198c91710472e2eb21f1900109a76834829e3/grpcio-1.68.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:95c87ce2a97434dffe7327a4071839ab8e8bffd0054cc74cbe971fba98aedd60", size = 5905978 },
894
+ { url = "https://files.pythonhosted.org/packages/9b/43/c3670a657445cd55be1246f64dbc3a6a33cab0f0141c5836df2e04f794c8/grpcio-1.68.1-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:e4842e4872ae4ae0f5497bf60a0498fa778c192cc7a9e87877abd2814aca9475", size = 6630444 },
895
+ { url = "https://files.pythonhosted.org/packages/80/69/fbbebccffd266bea4268b685f3e8e03613405caba69e93125dc783036465/grpcio-1.68.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:255b1635b0ed81e9f91da4fcc8d43b7ea5520090b9a9ad9340d147066d1d3613", size = 6200324 },
896
+ { url = "https://files.pythonhosted.org/packages/65/5c/27a26c21916f94f0c1585111974a5d5a41d8420dcb42c2717ee514c97a97/grpcio-1.68.1-cp312-cp312-win32.whl", hash = "sha256:7dfc914cc31c906297b30463dde0b9be48e36939575eaf2a0a22a8096e69afe5", size = 3638381 },
897
+ { url = "https://files.pythonhosted.org/packages/a3/ba/ba6b65ccc93c7df1031c6b41e45b79a5a37e46b81d816bb3ea68ba476d77/grpcio-1.68.1-cp312-cp312-win_amd64.whl", hash = "sha256:a0c8ddabef9c8f41617f213e527254c41e8b96ea9d387c632af878d05db9229c", size = 4389959 },
898
+ { url = "https://files.pythonhosted.org/packages/37/1a/15ccc08da339a5536690e6f877963422a5abf3f6dfeed96b3175f5c816b9/grpcio-1.68.1-cp313-cp313-linux_armv7l.whl", hash = "sha256:a47faedc9ea2e7a3b6569795c040aae5895a19dde0c728a48d3c5d7995fda385", size = 5149822 },
899
+ { url = "https://files.pythonhosted.org/packages/bc/fe/91bb4b160cd251d5b5ee722e6342355f76d1ffe176c50a6ef0e8256fbb47/grpcio-1.68.1-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:390eee4225a661c5cd133c09f5da1ee3c84498dc265fd292a6912b65c421c78c", size = 11085016 },
900
+ { url = "https://files.pythonhosted.org/packages/55/2d/0bb2478410f5896da1090b9f43c2979dd72e7e97d10bc223bfbdddcf8eca/grpcio-1.68.1-cp313-cp313-manylinux_2_17_aarch64.whl", hash = "sha256:66a24f3d45c33550703f0abb8b656515b0ab777970fa275693a2f6dc8e35f1c1", size = 5645634 },
901
+ { url = "https://files.pythonhosted.org/packages/f5/6c/e2d22d963b695f87a09965246beb1c3224b09ffc666fc0b285820926499a/grpcio-1.68.1-cp313-cp313-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c08079b4934b0bf0a8847f42c197b1d12cba6495a3d43febd7e99ecd1cdc8d54", size = 6291096 },
902
+ { url = "https://files.pythonhosted.org/packages/6f/f6/21d9204e2c4c0804ad72be8c830c44f0e1355e649c173f87508b7f0e5488/grpcio-1.68.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8720c25cd9ac25dd04ee02b69256d0ce35bf8a0f29e20577427355272230965a", size = 5906528 },
903
+ { url = "https://files.pythonhosted.org/packages/39/2a/bf6ae4fef13755ca236d587d630b82207cfad43cf956870adead97fd1ef1/grpcio-1.68.1-cp313-cp313-musllinux_1_1_i686.whl", hash = "sha256:04cfd68bf4f38f5bb959ee2361a7546916bd9a50f78617a346b3aeb2b42e2161", size = 6634215 },
904
+ { url = "https://files.pythonhosted.org/packages/5b/83/9c96a6adfbea5e8a9ed408410c0259942713be64173b8816c7bf6ac2d830/grpcio-1.68.1-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:c28848761a6520c5c6071d2904a18d339a796ebe6b800adc8b3f474c5ce3c3ad", size = 6200750 },
905
+ { url = "https://files.pythonhosted.org/packages/b4/3e/af42f87759c6301c4fed894b3dd801b13162ba1d8e2942412e788ac749eb/grpcio-1.68.1-cp313-cp313-win32.whl", hash = "sha256:77d65165fc35cff6e954e7fd4229e05ec76102d4406d4576528d3a3635fc6172", size = 3637594 },
906
+ { url = "https://files.pythonhosted.org/packages/7e/d1/3bef33a3d5d26d4ea9284e1b464f481d6d21ed8ae1c3da381b05f62c701d/grpcio-1.68.1-cp313-cp313-win_amd64.whl", hash = "sha256:a8040f85dcb9830d8bbb033ae66d272614cec6faceee88d37a88a9bd1a7a704e", size = 4391184 },
907
+ ]
908
+
909
  [[package]]
910
  name = "h11"
911
  version = "0.14.0"
 
1486
  { url = "https://files.pythonhosted.org/packages/4d/66/7d9e26593edda06e8cb531874633f7c2372279c3b0f46235539fe546df8b/nltk-3.9.1-py3-none-any.whl", hash = "sha256:4fa26829c5b00715afe3061398a8989dc643b92ce7dd93fb4585a70930d168a1", size = 1505442 },
1487
  ]
1488
 
1489
+ [[package]]
1490
+ name = "num2words"
1491
+ version = "0.5.14"
1492
+ source = { registry = "https://pypi.org/simple" }
1493
+ dependencies = [
1494
+ { name = "docopt" },
1495
+ ]
1496
+ sdist = { url = "https://files.pythonhosted.org/packages/f6/58/ad645bd38b4b648eb2fc2ba1b909398e54eb0cbb6a7dbd2b4953e38c9621/num2words-0.5.14.tar.gz", hash = "sha256:b066ec18e56b6616a3b38086b5747daafbaa8868b226a36127e0451c0cf379c6", size = 218213 }
1497
+ wheels = [
1498
+ { url = "https://files.pythonhosted.org/packages/d6/5b/545e9267a1cc080c8a1be2746113a063e34bcdd0f5173fd665a5c13cb234/num2words-0.5.14-py3-none-any.whl", hash = "sha256:1c8e5b00142fc2966fd8d685001e36c4a9911e070d1b120e1beb721fa1edb33d", size = 163525 },
1499
+ ]
1500
+
1501
  [[package]]
1502
  name = "numba"
1503
  version = "0.60.0"
 
1683
  { url = "https://files.pythonhosted.org/packages/87/20/199b8713428322a2f22b722c62b8cc278cc53dffa9705d744484b5035ee9/nvidia_nvtx_cu12-12.4.127-py3-none-manylinux2014_x86_64.whl", hash = "sha256:781e950d9b9f60d8241ccea575b32f5105a5baf4c2351cab5256a24869f12a1a", size = 99144 },
1684
  ]
1685
 
1686
+ [[package]]
1687
+ name = "openphonemizer"
1688
+ version = "0.1.2"
1689
+ source = { registry = "https://pypi.org/simple" }
1690
+ dependencies = [
1691
+ { name = "cached-path" },
1692
+ { name = "deep-phonemizer" },
1693
+ { name = "num2words" },
1694
+ ]
1695
+ sdist = { url = "https://files.pythonhosted.org/packages/fc/d6/daa9534f5cc41eb7ad6f60d1ecda351cda09381287e4c632831aa0f0a7c7/openphonemizer-0.1.2.tar.gz", hash = "sha256:4df8e2512c9bd39d8efdf2bdb651d95209b1dfb8a9e4b589a6e5c5a9e736c5e5", size = 4568 }
1696
+ wheels = [
1697
+ { url = "https://files.pythonhosted.org/packages/1f/a2/8ce340b16426d7b62092db1d5dc3a9c050c64d88b1836901b8ee0024d440/openphonemizer-0.1.2-py3-none-any.whl", hash = "sha256:3876cf6ad76c6c9b0aeb69cb7e24da10dad8240076a0ab04f096d3d6266e3a3a", size = 5583 },
1698
+ ]
1699
+
1700
  [[package]]
1701
  name = "orjson"
1702
  version = "3.10.12"
 
2725
  { url = "https://files.pythonhosted.org/packages/40/44/4a5f08c96eb108af5cb50b41f76142f0afa346dfa99d5296fe7202a11854/tabulate-0.9.0-py3-none-any.whl", hash = "sha256:024ca478df22e9340661486f85298cff5f6dcdba14f3813e8830015b9ed1948f", size = 35252 },
2726
  ]
2727
 
2728
+ [[package]]
2729
+ name = "tensorboard"
2730
+ version = "2.18.0"
2731
+ source = { registry = "https://pypi.org/simple" }
2732
+ dependencies = [
2733
+ { name = "absl-py" },
2734
+ { name = "grpcio" },
2735
+ { name = "markdown" },
2736
+ { name = "numpy" },
2737
+ { name = "packaging" },
2738
+ { name = "protobuf" },
2739
+ { name = "setuptools" },
2740
+ { name = "six" },
2741
+ { name = "tensorboard-data-server" },
2742
+ { name = "werkzeug" },
2743
+ ]
2744
+ wheels = [
2745
+ { url = "https://files.pythonhosted.org/packages/b1/de/021c1d407befb505791764ad2cbd56ceaaa53a746baed01d2e2143f05f18/tensorboard-2.18.0-py3-none-any.whl", hash = "sha256:107ca4821745f73e2aefa02c50ff70a9b694f39f790b11e6f682f7d326745eab", size = 5503036 },
2746
+ ]
2747
+
2748
+ [[package]]
2749
+ name = "tensorboard-data-server"
2750
+ version = "0.7.2"
2751
+ source = { registry = "https://pypi.org/simple" }
2752
+ wheels = [
2753
+ { url = "https://files.pythonhosted.org/packages/7a/13/e503968fefabd4c6b2650af21e110aa8466fe21432cd7c43a84577a89438/tensorboard_data_server-0.7.2-py3-none-any.whl", hash = "sha256:7e0610d205889588983836ec05dc098e80f97b7e7bbff7e994ebb78f578d0ddb", size = 2356 },
2754
+ { url = "https://files.pythonhosted.org/packages/b7/85/dabeaf902892922777492e1d253bb7e1264cadce3cea932f7ff599e53fea/tensorboard_data_server-0.7.2-py3-none-macosx_10_9_x86_64.whl", hash = "sha256:9fe5d24221b29625dbc7328b0436ca7fc1c23de4acf4d272f1180856e32f9f60", size = 4823598 },
2755
+ { url = "https://files.pythonhosted.org/packages/73/c6/825dab04195756cf8ff2e12698f22513b3db2f64925bdd41671bfb33aaa5/tensorboard_data_server-0.7.2-py3-none-manylinux_2_31_x86_64.whl", hash = "sha256:ef687163c24185ae9754ed5650eb5bc4d84ff257aabdc33f0cc6f74d8ba54530", size = 6590363 },
2756
+ ]
2757
+
2758
  [[package]]
2759
  name = "threadpoolctl"
2760
  version = "3.5.0"
 
3037
  { url = "https://files.pythonhosted.org/packages/39/9c/16916d9a436c109a1d7ba78817e8fee357b78968be3f6e6f517f43afa43d/websockets-14.1-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:5a42d3ecbb2db5080fc578314439b1d79eef71d323dc661aa616fb492436af5d", size = 163316 },
3038
  { url = "https://files.pythonhosted.org/packages/b0/0b/c7e5d11020242984d9d37990310520ed663b942333b83a033c2f20191113/websockets-14.1-py3-none-any.whl", hash = "sha256:4d4fc827a20abe6d544a119896f6b78ee13fe81cbfef416f3f2ddf09a03f0e2e", size = 156277 },
3039
  ]
3040
+
3041
+ [[package]]
3042
+ name = "werkzeug"
3043
+ version = "3.1.3"
3044
+ source = { registry = "https://pypi.org/simple" }
3045
+ dependencies = [
3046
+ { name = "markupsafe" },
3047
+ ]
3048
+ sdist = { url = "https://files.pythonhosted.org/packages/9f/69/83029f1f6300c5fb2471d621ab06f6ec6b3324685a2ce0f9777fd4a8b71e/werkzeug-3.1.3.tar.gz", hash = "sha256:60723ce945c19328679790e3282cc758aa4a6040e4bb330f53d30fa546d44746", size = 806925 }
3049
+ wheels = [
3050
+ { url = "https://files.pythonhosted.org/packages/52/24/ab44c871b0f07f491e5d2ad12c9bd7358e527510618cb1b803a88e986db1/werkzeug-3.1.3-py3-none-any.whl", hash = "sha256:54b78bf3716d19a65be4fceccc0d1d7b89e608834989dfae50ea87564639213e", size = 224498 },
3051
+ ]
3052
+
3053
+ [[package]]
3054
+ name = "wheel"
3055
+ version = "0.45.1"
3056
+ source = { registry = "https://pypi.org/simple" }
3057
+ sdist = { url = "https://files.pythonhosted.org/packages/8a/98/2d9906746cdc6a6ef809ae6338005b3f21bb568bea3165cfc6a243fdc25c/wheel-0.45.1.tar.gz", hash = "sha256:661e1abd9198507b1409a20c02106d9670b2576e916d58f520316666abca6729", size = 107545 }
3058
+ wheels = [
3059
+ { url = "https://files.pythonhosted.org/packages/0b/2c/87f3254fd8ffd29e4c02732eee68a83a1d3c346ae39bc6822dcbcb697f2b/wheel-0.45.1-py3-none-any.whl", hash = "sha256:708e7481cc80179af0e556bbf0cc00b8444c7321e2700b8d8580231d13017248", size = 72494 },
3060
+ ]