NeoPy commited on
Commit
96134ee
·
verified ·
1 Parent(s): fd33ca5

Upload 115 files

Browse files
This view is limited to 50 files because it contains too many changes.   See raw diff
Files changed (50) hide show
  1. .gitattributes +7 -0
  2. Dockerfile +19 -0
  3. Dockerfile.cuda118 +20 -0
  4. Dockerfile.cuda128 +20 -0
  5. LICENSE +201 -0
  6. README.md +184 -12
  7. assets/f0/.gitattributes +0 -0
  8. assets/ico.png +3 -0
  9. assets/languages/en-US.json +809 -0
  10. assets/languages/id_ID.json +809 -0
  11. assets/languages/ja-JP.json +809 -0
  12. assets/languages/vi-VN.json +809 -0
  13. assets/logs/mute/f0/mute.wav.npy +3 -0
  14. assets/logs/mute/f0_voiced/mute.wav.npy +3 -0
  15. assets/logs/mute/sliced_audios/mute32000.wav +3 -0
  16. assets/logs/mute/sliced_audios/mute40000.wav +3 -0
  17. assets/logs/mute/sliced_audios/mute48000.wav +3 -0
  18. assets/logs/mute/sliced_audios_16k/mute.wav +0 -0
  19. assets/logs/mute/v1_extracted/mute.npy +3 -0
  20. assets/logs/mute/v2_extracted/mute.npy +3 -0
  21. assets/logs/mute_spin/f0/mute.wav.npy +3 -0
  22. assets/logs/mute_spin/f0_voiced/mute.wav.npy +3 -0
  23. assets/logs/mute_spin/sliced_audios/mute32000.wav +3 -0
  24. assets/logs/mute_spin/sliced_audios/mute40000.wav +3 -0
  25. assets/logs/mute_spin/sliced_audios/mute48000.wav +3 -0
  26. assets/logs/mute_spin/sliced_audios_16k/mute.wav +0 -0
  27. assets/logs/mute_spin/v1_extracted/mute.npy +3 -0
  28. assets/logs/mute_spin/v2_extracted/mute.npy +3 -0
  29. assets/models/audioldm2/.gitattributes +0 -0
  30. assets/models/embedders/.gitattributes +0 -0
  31. assets/models/predictors/.gitattributes +0 -0
  32. assets/models/pretrained_custom/.gitattributes +0 -0
  33. assets/models/pretrained_v1/.gitattributes +0 -0
  34. assets/models/pretrained_v2/.gitattributes +0 -0
  35. assets/models/speaker_diarization/assets/gpt2.tiktoken +0 -0
  36. assets/models/speaker_diarization/assets/mel_filters.npz +3 -0
  37. assets/models/speaker_diarization/assets/multilingual.tiktoken +0 -0
  38. assets/models/speaker_diarization/models/.gitattributes +0 -0
  39. assets/models/uvr5/.gitattributes +0 -0
  40. assets/png/.g +1 -0
  41. assets/presets/.gitattributes +0 -0
  42. assets/weights/.gitattributes +0 -0
  43. audios/.gitattributes +0 -0
  44. dataset/.gitattributes +0 -0
  45. docker-compose-cpu.yaml +14 -0
  46. docker-compose-cuda118.yaml +17 -0
  47. docker-compose-cuda128.yaml +17 -0
  48. main/app/app.py +0 -0
  49. main/app/based/utils.py +1534 -0
  50. main/app/parser.py +339 -0
.gitattributes CHANGED
@@ -33,3 +33,10 @@ saved_model/**/* filter=lfs diff=lfs merge=lfs -text
33
  *.zip filter=lfs diff=lfs merge=lfs -text
34
  *.zst filter=lfs diff=lfs merge=lfs -text
35
  *tfevents* filter=lfs diff=lfs merge=lfs -text
 
 
 
 
 
 
 
 
33
  *.zip filter=lfs diff=lfs merge=lfs -text
34
  *.zst filter=lfs diff=lfs merge=lfs -text
35
  *tfevents* filter=lfs diff=lfs merge=lfs -text
36
+ assets/ico.png filter=lfs diff=lfs merge=lfs -text
37
+ assets/logs/mute_spin/sliced_audios/mute32000.wav filter=lfs diff=lfs merge=lfs -text
38
+ assets/logs/mute_spin/sliced_audios/mute40000.wav filter=lfs diff=lfs merge=lfs -text
39
+ assets/logs/mute_spin/sliced_audios/mute48000.wav filter=lfs diff=lfs merge=lfs -text
40
+ assets/logs/mute/sliced_audios/mute32000.wav filter=lfs diff=lfs merge=lfs -text
41
+ assets/logs/mute/sliced_audios/mute40000.wav filter=lfs diff=lfs merge=lfs -text
42
+ assets/logs/mute/sliced_audios/mute48000.wav filter=lfs diff=lfs merge=lfs -text
Dockerfile ADDED
@@ -0,0 +1,19 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ FROM python:3.11-slim
2
+
3
+ EXPOSE 7860
4
+
5
+ RUN apt-get update && apt-get install -y ffmpeg && apt-get clean
6
+
7
+ WORKDIR /app
8
+
9
+ COPY . .
10
+
11
+ RUN python3 -m venv /app/.venv && \
12
+ . /app/.venv/bin/activate && \
13
+ pip install --no-cache-dir --upgrade pip && \
14
+ pip install --no-cache-dir -r requirements.txt
15
+
16
+ VOLUME [ "/app/assets" ]
17
+ ENV PATH="/app/.venv/bin:$PATH"
18
+
19
+ CMD ["python3", "main/app/app.py"]
Dockerfile.cuda118 ADDED
@@ -0,0 +1,20 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ FROM python:3.11-slim
2
+
3
+ EXPOSE 7860
4
+
5
+ RUN apt-get update && apt-get install -y ffmpeg && apt-get clean
6
+
7
+ WORKDIR /app
8
+
9
+ COPY . .
10
+
11
+ RUN python3 -m venv /app/.venv && \
12
+ . /app/.venv/bin/activate && \
13
+ pip install --no-cache-dir --upgrade pip && \
14
+ pip install --no-cache-dir torch==2.7.0 torchvision torchaudio==2.7.0 --index-url https://download.pytorch.org/whl/cu118 && \
15
+ pip install --no-cache-dir -r requirements.txt
16
+
17
+ VOLUME [ "/app/assets" ]
18
+ ENV PATH="/app/.venv/bin:$PATH"
19
+
20
+ CMD ["python3", "main/app/app.py"]
Dockerfile.cuda128 ADDED
@@ -0,0 +1,20 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ FROM python:3.11-slim
2
+
3
+ EXPOSE 7860
4
+
5
+ RUN apt-get update && apt-get install -y ffmpeg && apt-get clean
6
+
7
+ WORKDIR /app
8
+
9
+ COPY . .
10
+
11
+ RUN python3 -m venv /app/.venv && \
12
+ . /app/.venv/bin/activate && \
13
+ pip install --no-cache-dir --upgrade pip && \
14
+ pip install --no-cache-dir torch==2.7.0 torchvision torchaudio==2.7.0 --index-url https://download.pytorch.org/whl/cu128 && \
15
+ pip install --no-cache-dir -r requirements.txt
16
+
17
+ VOLUME [ "/app/assets" ]
18
+ ENV PATH="/app/.venv/bin:$PATH"
19
+
20
+ CMD ["python3", "main/app/app.py"]
LICENSE ADDED
@@ -0,0 +1,201 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ Apache License
2
+ Version 2.0, January 2004
3
+ http://www.apache.org/licenses/
4
+
5
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
6
+
7
+ 1. Definitions.
8
+
9
+ "License" shall mean the terms and conditions for use, reproduction,
10
+ and distribution as defined by Sections 1 through 9 of this document.
11
+
12
+ "Licensor" shall mean the copyright owner or entity authorized by
13
+ the copyright owner that is granting the License.
14
+
15
+ "Legal Entity" shall mean the union of the acting entity and all
16
+ other entities that control, are controlled by, or are under common
17
+ control with that entity. For the purposes of this definition,
18
+ "control" means (i) the power, direct or indirect, to cause the
19
+ direction or management of such entity, whether by contract or
20
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
21
+ outstanding shares, or (iii) beneficial ownership of such entity.
22
+
23
+ "You" (or "Your") shall mean an individual or Legal Entity
24
+ exercising permissions granted by this License.
25
+
26
+ "Source" form shall mean the preferred form for making modifications,
27
+ including but not limited to software source code, documentation
28
+ source, and configuration files.
29
+
30
+ "Object" form shall mean any form resulting from mechanical
31
+ transformation or translation of a Source form, including but
32
+ not limited to compiled object code, generated documentation,
33
+ and conversions to other media types.
34
+
35
+ "Work" shall mean the work of authorship, whether in Source or
36
+ Object form, made available under the License, as indicated by a
37
+ copyright notice that is included in or attached to the work
38
+ (an example is provided in the Appendix below).
39
+
40
+ "Derivative Works" shall mean any work, whether in Source or Object
41
+ form, that is based on (or derived from) the Work and for which the
42
+ editorial revisions, annotations, elaborations, or other modifications
43
+ represent, as a whole, an original work of authorship. For the purposes
44
+ of this License, Derivative Works shall not include works that remain
45
+ separable from, or merely link (or bind by name) to the interfaces of,
46
+ the Work and Derivative Works thereof.
47
+
48
+ "Contribution" shall mean any work of authorship, including
49
+ the original version of the Work and any modifications or additions
50
+ to that Work or Derivative Works thereof, that is intentionally
51
+ submitted to Licensor for inclusion in the Work by the copyright owner
52
+ or by an individual or Legal Entity authorized to submit on behalf of
53
+ the copyright owner. For the purposes of this definition, "submitted"
54
+ means any form of electronic, verbal, or written communication sent
55
+ to the Licensor or its representatives, including but not limited to
56
+ communication on electronic mailing lists, source code control systems,
57
+ and issue tracking systems that are managed by, or on behalf of, the
58
+ Licensor for the purpose of discussing and improving the Work, but
59
+ excluding communication that is conspicuously marked or otherwise
60
+ designated in writing by the copyright owner as "Not a Contribution."
61
+
62
+ "Contributor" shall mean Licensor and any individual or Legal Entity
63
+ on behalf of whom a Contribution has been received by Licensor and
64
+ subsequently incorporated within the Work.
65
+
66
+ 2. Grant of Copyright License. Subject to the terms and conditions of
67
+ this License, each Contributor hereby grants to You a perpetual,
68
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
69
+ copyright license to reproduce, prepare Derivative Works of,
70
+ publicly display, publicly perform, sublicense, and distribute the
71
+ Work and such Derivative Works in Source or Object form.
72
+
73
+ 3. Grant of Patent License. Subject to the terms and conditions of
74
+ this License, each Contributor hereby grants to You a perpetual,
75
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
76
+ (except as stated in this section) patent license to make, have made,
77
+ use, offer to sell, sell, import, and otherwise transfer the Work,
78
+ where such license applies only to those patent claims licensable
79
+ by such Contributor that are necessarily infringed by their
80
+ Contribution(s) alone or by combination of their Contribution(s)
81
+ with the Work to which such Contribution(s) was submitted. If You
82
+ institute patent litigation against any entity (including a
83
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
84
+ or a Contribution incorporated within the Work constitutes direct
85
+ or contributory patent infringement, then any patent licenses
86
+ granted to You under this License for that Work shall terminate
87
+ as of the date such litigation is filed.
88
+
89
+ 4. Redistribution. You may reproduce and distribute copies of the
90
+ Work or Derivative Works thereof in any medium, with or without
91
+ modifications, and in Source or Object form, provided that You
92
+ meet the following conditions:
93
+
94
+ (a) You must give any other recipients of the Work or
95
+ Derivative Works a copy of this License; and
96
+
97
+ (b) You must cause any modified files to carry prominent notices
98
+ stating that You changed the files; and
99
+
100
+ (c) You must retain, in the Source form of any Derivative Works
101
+ that You distribute, all copyright, patent, trademark, and
102
+ attribution notices from the Source form of the Work,
103
+ excluding those notices that do not pertain to any part of
104
+ the Derivative Works; and
105
+
106
+ (d) If the Work includes a "NOTICE" text file as part of its
107
+ distribution, then any Derivative Works that You distribute must
108
+ include a readable copy of the attribution notices contained
109
+ within such NOTICE file, excluding those notices that do not
110
+ pertain to any part of the Derivative Works, in at least one
111
+ of the following places: within a NOTICE text file distributed
112
+ as part of the Derivative Works; within the Source form or
113
+ documentation, if provided along with the Derivative Works; or,
114
+ within a display generated by the Derivative Works, if and
115
+ wherever such third-party notices normally appear. The contents
116
+ of the NOTICE file are for informational purposes only and
117
+ do not modify the License. You may add Your own attribution
118
+ notices within Derivative Works that You distribute, alongside
119
+ or as an addendum to the NOTICE text from the Work, provided
120
+ that such additional attribution notices cannot be construed
121
+ as modifying the License.
122
+
123
+ You may add Your own copyright statement to Your modifications and
124
+ may provide additional or different license terms and conditions
125
+ for use, reproduction, or distribution of Your modifications, or
126
+ for any such Derivative Works as a whole, provided Your use,
127
+ reproduction, and distribution of the Work otherwise complies with
128
+ the conditions stated in this License.
129
+
130
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
131
+ any Contribution intentionally submitted for inclusion in the Work
132
+ by You to the Licensor shall be under the terms and conditions of
133
+ this License, without any additional terms or conditions.
134
+ Notwithstanding the above, nothing herein shall supersede or modify
135
+ the terms of any separate license agreement you may have executed
136
+ with Licensor regarding such Contributions.
137
+
138
+ 6. Trademarks. This License does not grant permission to use the trade
139
+ names, trademarks, service marks, or product names of the Licensor,
140
+ except as required for reasonable and customary use in describing the
141
+ origin of the Work and reproducing the content of the NOTICE file.
142
+
143
+ 7. Disclaimer of Warranty. Unless required by applicable law or
144
+ agreed to in writing, Licensor provides the Work (and each
145
+ Contributor provides its Contributions) on an "AS IS" BASIS,
146
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
147
+ implied, including, without limitation, any warranties or conditions
148
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
149
+ PARTICULAR PURPOSE. You are solely responsible for determining the
150
+ appropriateness of using or redistributing the Work and assume any
151
+ risks associated with Your exercise of permissions under this License.
152
+
153
+ 8. Limitation of Liability. In no event and under no legal theory,
154
+ whether in tort (including negligence), contract, or otherwise,
155
+ unless required by applicable law (such as deliberate and grossly
156
+ negligent acts) or agreed to in writing, shall any Contributor be
157
+ liable to You for damages, including any direct, indirect, special,
158
+ incidental, or consequential damages of any character arising as a
159
+ result of this License or out of the use or inability to use the
160
+ Work (including but not limited to damages for loss of goodwill,
161
+ work stoppage, computer failure or malfunction, or any and all
162
+ other commercial damages or losses), even if such Contributor
163
+ has been advised of the possibility of such damages.
164
+
165
+ 9. Accepting Warranty or Additional Liability. While redistributing
166
+ the Work or Derivative Works thereof, You may choose to offer,
167
+ and charge a fee for, acceptance of support, warranty, indemnity,
168
+ or other liability obligations and/or rights consistent with this
169
+ License. However, in accepting such obligations, You may act only
170
+ on Your own behalf and on Your sole responsibility, not on behalf
171
+ of any other Contributor, and only if You agree to indemnify,
172
+ defend, and hold each Contributor harmless for any liability
173
+ incurred by, or claims asserted against, such Contributor by reason
174
+ of your accepting any such warranty or additional liability.
175
+
176
+ END OF TERMS AND CONDITIONS
177
+
178
+ APPENDIX: How to apply the Apache License to your work.
179
+
180
+ To apply the Apache License to your work, attach the following
181
+ boilerplate notice, with the fields enclosed by brackets "[]"
182
+ replaced with your own identifying information. (Don't include
183
+ the brackets!) The text should be enclosed in the appropriate
184
+ comment syntax for the file format. We also recommend that a
185
+ file or class name and description of purpose be included on the
186
+ same "printed page" as the copyright notice for easier
187
+ identification within third-party archives.
188
+
189
+ Copyright 2025 Phạm Huỳnh Anh
190
+
191
+ Licensed under the Apache License, Version 2.0 (the "License");
192
+ you may not use this file except in compliance with the License.
193
+ You may obtain a copy of the License at
194
+
195
+ http://www.apache.org/licenses/LICENSE-2.0
196
+
197
+ Unless required by applicable law or agreed to in writing, software
198
+ distributed under the License is distributed on an "AS IS" BASIS,
199
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
200
+ See the License for the specific language governing permissions and
201
+ limitations under the License.
README.md CHANGED
@@ -1,12 +1,184 @@
1
- ---
2
- title: RVC MAKER
3
- emoji: 🦀
4
- colorFrom: purple
5
- colorTo: yellow
6
- sdk: gradio
7
- sdk_version: 5.29.1
8
- app_file: app.py
9
- pinned: false
10
- ---
11
-
12
- Check out the configuration reference at https://huggingface.co/docs/hub/spaces-config-reference
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <div align="center">
2
+ <img alt="LOGO" src="assets/ico.png" width="300" height="300" /><div align="center">
3
+ <img src="https://count.nett.moe/get/foo/img?theme=rule34" alt="yeh"></div>
4
+
5
+ </div>
6
+
7
+ A high-quality voice conversion tool focused on ease of use and performance.
8
+
9
+ [![RVC MAKER](https://img.shields.io/badge/GitHub-100000?style=for-the-badge&logo=github&logoColor=white)](https://github.com/TheNeodev/RVC-MAKER)
10
+ [![Open In Colab](https://img.shields.io/badge/Colab-F9AB00?style=for-the-badge&logo=googlecolab&color=525252)](https://colab.research.google.com/github/TheNeodev/RVC-MAKER/blob/main/webui.ipynb)
11
+ [![Licence](https://img.shields.io/github/license/saltstack/salt?style=for-the-badge)](https://github.com/TheNeodev/RVC-MAKER/blob/main/LICENSE)
12
+
13
+ </div>
14
+
15
+ <div align="center">
16
+
17
+
18
+ </div>
19
+
20
+ # Description
21
+ This project is all in one, easy-to-use voice conversion tool. With the goal of creating high-quality and high-performance voice conversion products, the project allows users to change voices smoothly and naturally.
22
+
23
+ # Project Features
24
+
25
+ - Music separation (MDX-Net/Demucs)
26
+
27
+ - Voice conversion (File conversion/Batch conversion/Conversion with Whisper/Text-to-speech conversion)
28
+
29
+ - Background music editing
30
+
31
+ - Apply effects to audio
32
+
33
+ - Generate training data (From linked paths)
34
+
35
+ - Model training (v1/v2, high-quality encoders)
36
+
37
+ - Model fusion
38
+
39
+ - Read model information
40
+
41
+ - Export models to ONNX
42
+
43
+ - Download from pre-existing model repositories
44
+
45
+ - Search for models on the web
46
+
47
+ - Pitch extraction
48
+
49
+ - Support for audio conversion inference using ONNX models
50
+
51
+ - ONNX RVC models also support indexing for inference
52
+
53
+ - Multiple model options:
54
+
55
+ **F0**: `pm, dio, mangio-crepe-tiny, mangio-crepe-small, mangio-crepe-medium, mangio-crepe-large, mangio-crepe-full, crepe-tiny, crepe-small, crepe-medium, crepe-large, crepe-full, fcpe, fcpe-legacy, rmvpe, rmvpe-legacy, harvest, yin, pyin, swipe`
56
+
57
+ **F0_ONNX**: Some models are converted to ONNX to support accelerated extraction
58
+
59
+ **F0_HYBRID**: Multiple options can be combined, such as `hybrid[rmvpe+harvest]`, or you can try combining all options together
60
+
61
+ **EMBEDDERS**: `contentvec_base, hubert_base, japanese_hubert_base, korean_hubert_base, chinese_hubert_base, portuguese_hubert_base`
62
+
63
+ **EMBEDDERS_ONNX**: All the above embedding models have ONNX versions pre-converted for accelerated embedding extraction
64
+
65
+ **EMBEDDERS_TRANSFORMERS**: All the above embedding models have versions pre-converted to Hugging Face for use as an alternative to Fairseq
66
+
67
+ **SPIN_EMBEDDERS**: A new embedding extraction model that may provide higher quality than older extractions
68
+
69
+ # Usage Instructions
70
+
71
+ **Will be provided if I’m truly free...**
72
+
73
+ # Installation and Usage
74
+
75
+ - **Step 1**: Install Python from the official website or [Python](https://www.python.org/ftp/python/3.10.7/python-3.10.7-amd64.exe) (**REQUIRES PYTHON 3.10.x OR PYTHON 3.11.x**)
76
+ - **Step 2**: Install FFmpeg from [FFMPEG](https://github.com/BtbN/FFmpeg-Builds/releases), extract it, and add it to PATH
77
+ - **Step 3**: Download and extract the source code
78
+ - **Step 4**: Navigate to the source code directory and open Command Prompt or Terminal
79
+ - **Step 5**: Run the command to install the required libraries
80
+
81
+ python -m venv envenv\Scripts\activate
82
+
83
+ If you have an NVIDIA GPU, run this step depending on your CUDA version (you may need to change cu117 to cu128, etc.):
84
+
85
+ If using Torch 2.3.1
86
+ python -m pip install torch==2.3.1 torchaudio==2.3.1 torchvision==0.18.1 --index-url https://download.pytorch.org/whl/cu117
87
+ If using Torch 2.6.0
88
+ python -m pip install torch==2.6.0 torchaudio==2.6.0 torchvision==0.21.0 --index-url https://download.pytorch.org/whl/cu117
89
+
90
+ Then run:
91
+
92
+ python -m pip install -r requirements.txt
93
+
94
+ - **Step 6**: Run the `run_app` file to open the user interface (Note: Do not close the Command Prompt or Terminal for the interface)
95
+ - Alternatively, use Command Prompt or Terminal in the source code directory
96
+ - To allow the interface to access files outside the project, add `--allow_all_disk` to the command:
97
+
98
+ env\Scripts\python.exe main\app\app.py --open
99
+
100
+ **To use TensorBoard for training monitoring**:
101
+
102
+ Run the file: tensorboard or the command env\Scripts\python.exe main\app\tensorboard.py
103
+
104
+ # Command-Line Usage
105
+
106
+ python main\app\parser.py --help
107
+
108
+ </pre>
109
+
110
+ # NOTES
111
+
112
+ - **This project only supports NVIDIA GPUs**
113
+ - **Currently, new encoders like MRF HIFIGAN do not yet have complete pre-trained datasets**
114
+ - **MRF HIFIGAN and REFINEGAN encoders do not support training without pitch training**
115
+
116
+ # Terms of Use
117
+
118
+ - You must ensure that the audio content you upload and convert through this project does not violate the intellectual property rights of third parties.
119
+
120
+ - The project must not be used for any illegal activities, including but not limited to fraud, harassment, or causing harm to others.
121
+
122
+ - You are solely responsible for any damages arising from improper use of the product.
123
+
124
+ - I will not be responsible for any direct or indirect damages arising from the use of this project.
125
+
126
+ # This Project is Built Based on the Following Projects
127
+
128
+
129
+
130
+ | Project | Author/Organization | License |
131
+ |---------|---------------------|---------|
132
+ | [Vietnamese-RVC](https://github.com/PhamHuynhAnh16/Vietnamese-RVC) | Phạm Huỳnh Anh | Apache License 2.0 |
133
+ | [Applio](https://github.com/IAHispano/Applio/tree/main) | IAHispano | MIT License |
134
+ | [Python-audio-separator](https://github.com/nomadkaraoke/python-audio-separator/tree/main) | Nomad Karaoke | MIT License |
135
+ | [Retrieval-based-Voice-Conversion-WebUI](https://github.com/RVC-Project/Retrieval-based-Voice-Conversion-WebUI/tree/main) | RVC Project | MIT License |
136
+ | [RVC-ONNX-INFER-BY-Anh](https://github.com/PhamHuynhAnh16/RVC_Onnx_Infer) | Phạm Huỳnh Anh | MIT License |
137
+ | [Torch-Onnx-Crepe-By-Anh](https://github.com/PhamHuynhAnh16/TORCH-ONNX-CREPE) | Phạm Huỳnh Anh | MIT License |
138
+ | [Hubert-No-Fairseq](https://github.com/PhamHuynhAnh16/hubert-no-fairseq) | Phạm Huỳnh Anh | MIT License |
139
+ | [Local-attention](https://github.com/lucidrains/local-attention) | Phil Wang | MIT License |
140
+ | [TorchFcpe](https://github.com/CNChTu/FCPE/tree/main) | CN_ChiTu | MIT License |
141
+ | [FcpeONNX](https://github.com/deiteris/voice-changer/blob/master-custom/server/utils/fcpe_onnx.py) | Yury | MIT License |
142
+ | [ContentVec](https://github.com/auspicious3000/contentvec) | Kaizhi Qian | MIT License |
143
+ | [Mediafiredl](https://github.com/Gann4Life/mediafiredl) | Santiago Ariel Mansilla | MIT License |
144
+ | [Noisereduce](https://github.com/timsainb/noisereduce) | Tim Sainburg | MIT License |
145
+ | [World.py-By-Anh](https://github.com/PhamHuynhAnh16/world.py) | Phạm Huỳnh Anh | MIT License |
146
+ | [Mega.py](https://github.com/odwyersoftware/mega.py) | O'Dwyer Software | Apache 2.0 License |
147
+ | [Gdown](https://github.com/wkentaro/gdown) | Kentaro Wada | MIT License |
148
+ | [Whisper](https://github.com/openai/whisper) | OpenAI | MIT License |
149
+ | [PyannoteAudio](https://github.com/pyannote/pyannote-audio) | pyannote | MIT License |
150
+ | [AudioEditingCode](https://github.com/HilaManor/AudioEditingCode) | Hila Manor | MIT License |
151
+ | [StftPitchShift](https://github.com/jurihock/stftPitchShift) | Jürgen Hock | MIT License |
152
+ | [Codename-RVC-Fork-3](https://github.com/codename0og/codename-rvc-fork-3) | Codename;0 | MIT License |
153
+
154
+
155
+
156
+ # Model Repository for Model Search Tool
157
+
158
+ - **[VOICE-MODELS.COM](https://voice-models.com/)**
159
+
160
+ # Pitch Extraction Methods in RVC
161
+
162
+ This document provides detailed information on the pitch extraction methods used, including their advantages, limitations, strengths, and reliability based on personal experience.
163
+
164
+ | Method | Type | Advantages | Limitations | Strength | Reliability |
165
+ |-------------------|----------------|---------------------------|------------------------------|--------------------|--------------------|
166
+ | pm | Praat | Fast | Less accurate | Low | Low |
167
+ | dio | PYWORLD | Suitable for rap | Less accurate at high frequencies | Medium | Medium |
168
+ | harvest | PYWORLD | More accurate than DIO | Slower processing | High | Very high |
169
+ | crepe | Deep Learning | High accuracy | Requires GPU | Very high | Very high |
170
+ | mangio-crepe | Crepe finetune | Optimized for RVC | Sometimes less accurate than original crepe | Medium to high | Medium to high |
171
+ | fcpe | Deep Learning | Accurate, real-time | Requires powerful GPU | Good | Medium |
172
+ | fcpe-legacy | Old | Accurate, real-time | Older | Good | Medium |
173
+ | rmvpe | Deep Learning | Effective for singing voices | Resource-intensive | Very high | Excellent |
174
+ | rmvpe-legacy | Old | Supports older systems | Older | High | Good |
175
+ | yin | Librosa | Simple, efficient | Prone to octave errors | Medium | Low |
176
+ | pyin | Librosa | More stable than YIN | More complex computation | Good | Good |
177
+ | swipe | WORLD | High accuracy | Sensitive to noise | High | Good |
178
+
179
+ # Bug Reporting
180
+
181
+ - **If you encounter an error while using this source code, I sincerely apologize for the poor experience. You can report the bug using the methods below.**
182
+
183
+ - **you can report bugs to us via [ISSUE](https://github.com/unchCrew/RVC-MAKER/issues).**
184
+
assets/f0/.gitattributes ADDED
File without changes
assets/ico.png ADDED

Git LFS Details

  • SHA256: 71743cd808e3e787f618414cb393c68a887d298fa2a8966f735470689a53a1a1
  • Pointer size: 132 Bytes
  • Size of remote file: 1.2 MB
assets/languages/en-US.json ADDED
@@ -0,0 +1,809 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "set_lang": "Display language set to {lang}.",
3
+ "no_support_gpu": "Unfortunately, no compatible GPU is available to support your training.",
4
+ "text": "text",
5
+ "upload_success": "File {name} uploaded successfully.",
6
+ "download_url": "Download from the link",
7
+ "download_from_csv": "Download from the CSV model repository",
8
+ "search_models": "Search models",
9
+ "upload": "Upload",
10
+ "option_not_valid": "Invalid option!",
11
+ "list_model": "Model list",
12
+ "success": "Completed!",
13
+ "index": "index",
14
+ "model": "model",
15
+ "zip": "compress",
16
+ "search": "search",
17
+ "provide_file": "Please provide a valid {filename} file!",
18
+ "start": "Starting {start}...",
19
+ "not_found": "Not found {name}.",
20
+ "found": "Found {results} results!",
21
+ "download_music": "download music",
22
+ "download": "download",
23
+ "provide_url": "Please provide a url.",
24
+ "provide_name_is_save": "Please provide a model name to save.",
25
+ "not_support_url": "Your model url is not supported.",
26
+ "error_occurred": "An error occurred: {e}.",
27
+ "not_model": "The file you uploaded is not a model file!",
28
+ "unable_analyze_model": "Unable to analyze the model!",
29
+ "download_pretrain": "Downloading pre-trained model...",
30
+ "provide_pretrain": "Please provide a pre-trained model url {dg}.",
31
+ "sr_not_same": "The sample rates of the two models are not the same.",
32
+ "architectures_not_same": "Cannot merge models. The architectures are not the same.",
33
+ "fushion_model": "model fusion",
34
+ "model_fushion_info": "The model {name} is fused from {pth_1} and {pth_2} with a ratio of {ratio}.",
35
+ "not_found_create_time": "Creation time not found.",
36
+ "format_not_valid": "Invalid format.",
37
+ "read_info": "Models trained on different applications may produce different information or may not be readable!",
38
+ "epoch": "epoch.",
39
+ "step": "step",
40
+ "sr": "Sample rate",
41
+ "f0": "pitch training",
42
+ "version": "version.",
43
+ "not_f0": "Pitch training not performed",
44
+ "trained_f0": "Pitch training performed",
45
+ "model_info": "Model Name: {model_name}\n\n Model Creator: {model_author}\n\nEpoch: {epochs}\n\nSteps: {steps}\n\nVersion: {version}\n\nSample Rate: {sr}\n\nPitch Training: {pitch_guidance}\n\nHash (ID): {model_hash}\n\nCreation Time: {creation_date_str}\n\nVocoder: {vocoder}\n",
46
+ "input_not_valid": "Please provide valid input!",
47
+ "output_not_valid": "Please provide valid output!",
48
+ "apply_effect": "apply effect",
49
+ "enter_the_text": "Please enter the text to speech!",
50
+ "choose_voice": "Please choose a voice!",
51
+ "convert": "Converting {name}...",
52
+ "separator_music": "music separation",
53
+ "notfound": "Not found",
54
+ "turn_on_use_audio": "Please enable using separated audio to proceed",
55
+ "turn_off_convert_backup": "Disable backup voice conversion to use the original voice",
56
+ "turn_off_merge_backup": "Disable merging backup voice to use the original voice",
57
+ "not_found_original_vocal": "Original vocal not found!",
58
+ "convert_vocal": "Converting voice...",
59
+ "convert_success": "Voice conversion completed!",
60
+ "convert_backup": "Converting backup voice...",
61
+ "convert_backup_success": "Backup voice conversion completed!",
62
+ "merge_backup": "Merging main voice with backup voice...",
63
+ "merge_success": "Merge completed.",
64
+ "is_folder": "Input is a folder: Converting all audio files in the folder...",
65
+ "not_found_in_folder": "No audio files found in the folder!",
66
+ "batch_convert": "Batch conversion in progress...",
67
+ "batch_convert_success": "Batch conversion successful!",
68
+ "create": "create",
69
+ "provide_name": "Please provide a model name.",
70
+ "not_found_data": "Data not found",
71
+ "not_found_data_preprocess": "Processed audio data not found, please reprocess.",
72
+ "not_found_data_extract": "Extracted audio data not found, please re-extract.",
73
+ "provide_pretrained": "Please provide pre-trained {dg}.",
74
+ "download_pretrained": "Download pre-trained {dg}{rvc_version} original",
75
+ "not_found_pretrain": "Pre-trained {dg} not found",
76
+ "not_use_pretrain": "No pre-trained model will be used",
77
+ "training": "training",
78
+ "rick_roll": "Click here if you want to be Rick Roll :) ---> [RickRoll]({rickroll})",
79
+ "terms_of_use": "**Please do not use the project for any unethical, illegal, or harmful purposes to individuals or organizations...**",
80
+ "exemption": "**In cases where users do not comply with the terms or violate them, I will not be responsible for any claims, damages, or liabilities, whether in contract, negligence, or other causes arising from, outside of, or related to the software, its use, or other transactions associated with it.**",
81
+ "separator_tab": "Music Separation",
82
+ "4_part": "A simple music separation system can separate into 4 parts: Instruments, Vocals, Main vocals, Backup vocals",
83
+ "clear_audio": "Clean audio",
84
+ "separator_backing": "Separate backup vocals",
85
+ "denoise_mdx": "Denoise MDX separation",
86
+ "use_mdx": "Use MDX",
87
+ "dereveb_audio": "Remove vocal reverb",
88
+ "dereveb_backing": "Remove backup reverb",
89
+ "separator_model": "Music separation model",
90
+ "separator_backing_model": "Backup separation model",
91
+ "shift": "Shift",
92
+ "shift_info": "Higher is better quality but slower and uses more resources",
93
+ "segments_size": "Segments Size",
94
+ "segments_size_info": "Higher is better quality but uses more resources",
95
+ "batch_size": "Batch size",
96
+ "batch_size_info": "Number of samples processed simultaneously in one training cycle. Higher can cause memory overflow",
97
+ "mdx_batch_size_info": "Number of samples processed at a time. Batch processing optimizes calculations. Large batches can cause memory overflow; small batches reduce resource efficiency",
98
+ "overlap": "Overlap",
99
+ "overlap_info": "Overlap amount between prediction windows",
100
+ "export_format": "Export format",
101
+ "export_info": "The export format to export the audio file in",
102
+ "output_separator": "Separated output",
103
+ "hop_length_info": "Analyzing the time transfer window when performing transformations is allowed. The detailed value is compact but requires more calculation",
104
+ "drop_audio": "Drop audio here",
105
+ "drop_text": "Drop text file here",
106
+ "use_url": "YouTube link",
107
+ "url_audio": "Link audio",
108
+ "downloads": "Downloads",
109
+ "clean_strength": "Audio cleaning strength",
110
+ "clean_strength_info": "Strength of the audio cleaner for filtering vocals during export",
111
+ "input_output": "Audio input, output",
112
+ "audio_path": "Input audio path",
113
+ "refesh": "Refresh",
114
+ "output_folder": "Output audio folder path",
115
+ "output_folder_info": "Enter the folder path where the audio will be exported",
116
+ "input_audio": "Audio input",
117
+ "instruments": "Instruments",
118
+ "original_vocal": "Original vocal",
119
+ "main_vocal": "Main vocal",
120
+ "backing_vocal": "Backup vocal",
121
+ "convert_audio": "Convert Audio",
122
+ "convert_info": "Convert audio using a trained voice model",
123
+ "autotune": "Auto-tune",
124
+ "use_audio": "Use separated audio",
125
+ "convert_original": "Convert original voice",
126
+ "convert_backing": "Convert backup voice",
127
+ "not_merge_backing": "Do not merge backup voice",
128
+ "merge_instruments": "Merge instruments",
129
+ "pitch": "Pitch",
130
+ "pitch_info": "Recommendation: set to 12 to change male voice to female and vice versa",
131
+ "model_accordion": "Model and index",
132
+ "model_name": "Model file",
133
+ "index_path": "Index file",
134
+ "index_strength": "Index strength",
135
+ "index_strength_info": "Higher values increase strength. However, lower values may reduce artificial effects in the audio",
136
+ "output_path": "Audio output path",
137
+ "output_path_info": "Enter the output path (leave it as .wav format; it will auto-correct during conversion)",
138
+ "setting": "General settings",
139
+ "f0_method": "Extraction method",
140
+ "f0_method_info": "Method used for data extraction",
141
+ "f0_method_hybrid": "HYBRID extraction method",
142
+ "f0_method_hybrid_info": "Combination of two or more different types of extracts",
143
+ "hubert_model": "Embedding model",
144
+ "hubert_info": "Pre-trained model to assist embedding",
145
+ "modelname": "Model name",
146
+ "modelname_info": "If you have your own model, just upload it and input the name here",
147
+ "split_audio": "Split audio",
148
+ "autotune_rate": "Auto-tune rate",
149
+ "autotune_rate_info": "Level of auto-tuning adjustment",
150
+ "resample": "Resample",
151
+ "resample_info": "Resample post-processing to the final sample rate; 0 means no resampling, NOTE: SOME FORMATS DO NOT SUPPORT SPEEDS OVER 48000",
152
+ "filter_radius": "Filter radius",
153
+ "filter_radius_info": "If greater than three, median filtering is applied. The value represents the filter radius and can reduce breathiness or noise.",
154
+ "volume_envelope": "Volume envelope",
155
+ "volume_envelope_info": "Use the input volume envelope to replace or mix with the output volume envelope. The closer to 1, the more the output envelope is used",
156
+ "protect": "Consonant protection",
157
+ "protect_info": "Protect distinct consonants and breathing sounds to prevent audio tearing and other artifacts. Increasing this value provides comprehensive protection. Reducing it may reduce protection but also minimize indexing effects",
158
+ "output_convert": "Converted audio",
159
+ "main_convert": "Convert main voice",
160
+ "main_or_backing": "Main voice + Backup voice",
161
+ "voice_or_instruments": "Voice + Instruments",
162
+ "convert_text": "Convert Text",
163
+ "convert_text_markdown": "## Convert Text to Speech",
164
+ "convert_text_markdown_2": "Convert text to speech and read aloud using the trained voice model",
165
+ "input_txt": "Input data from a text file (.txt)",
166
+ "text_to_speech": "Text to read",
167
+ "voice_speed": "Reading speed",
168
+ "voice_speed_info": "Speed of the voice",
169
+ "tts_1": "1. Convert Text to Speech",
170
+ "tts_2": "2. Convert Speech",
171
+ "voice": "Voices by country",
172
+ "output_tts": "Output speech path",
173
+ "output_tts_convert": "Converted speech output path",
174
+ "tts_output": "Enter the output path",
175
+ "output_tts_markdown": "Unconverted and converted audio",
176
+ "output_text_to_speech": "Generated speech from text-to-speech conversion",
177
+ "output_file_tts_convert": "Speech converted using the model",
178
+ "output_audio": "Audio output",
179
+ "provide_output": "Enter the output path",
180
+ "audio_effects": "Audio Effects",
181
+ "apply_audio_effects": "## Add Additional Audio Effects",
182
+ "audio_effects_edit": "Add effects to audio",
183
+ "reverb": "Reverb effect",
184
+ "chorus": "Chorus effect",
185
+ "delay": "Delay effect",
186
+ "more_option": "Additional options",
187
+ "phaser": "Phaser effect",
188
+ "compressor": "Compressor effect",
189
+ "apply": "Apply",
190
+ "reverb_freeze": "Freeze mode",
191
+ "reverb_freeze_info": "Create a continuous echo effect when this mode is enabled",
192
+ "room_size": "Room size",
193
+ "room_size_info": "Adjust the room space to create reverberation",
194
+ "damping": "Damping",
195
+ "damping_info": "Adjust the level of absorption to control the amount of reverberation",
196
+ "wet_level": "Reverb signal level",
197
+ "wet_level_info": "Adjust the level of the reverb signal effect",
198
+ "dry_level": "Original signal level",
199
+ "dry_level_info": "Adjust the level of the signal without effects",
200
+ "width": "Audio width",
201
+ "width_info": "Adjust the width of the audio space",
202
+ "chorus_depth": "Chorus depth",
203
+ "chorus_depth_info": "Adjust the intensity of the chorus to create a wider sound",
204
+ "chorus_rate_hz": "Frequency",
205
+ "chorus_rate_hz_info": "Adjust the oscillation speed of the chorus effect",
206
+ "chorus_mix": "Mix signals",
207
+ "chorus_mix_info": "Adjust the mix level between the original and the processed signal",
208
+ "chorus_centre_delay_ms": "Center delay (ms)",
209
+ "chorus_centre_delay_ms_info": "The delay time between stereo channels to create the chorus effect",
210
+ "chorus_feedback": "Feedback",
211
+ "chorus_feedback_info": "Adjust the amount of the effect signal fed back into the original signal",
212
+ "delay_seconds": "Delay time",
213
+ "delay_seconds_info": "Adjust the delay time between the original and the processed signal",
214
+ "delay_feedback": "Delay feedback",
215
+ "delay_feedback_info": "Adjust the amount of feedback signal, creating a repeating effect",
216
+ "delay_mix": "Delay signal mix",
217
+ "delay_mix_info": "Adjust the mix level between the original and delayed signal",
218
+ "fade": "Fade effect",
219
+ "bass_or_treble": "Bass and treble",
220
+ "limiter": "Threshold limiter",
221
+ "distortion": "Distortion effect",
222
+ "gain": "Audio gain",
223
+ "bitcrush": "Bit reduction effect",
224
+ "clipping": "Clipping effect",
225
+ "fade_in": "Fade-in effect (ms)",
226
+ "fade_in_info": "Time for the audio to gradually increase from 0 to normal level",
227
+ "fade_out": "Fade-out effect (ms)",
228
+ "fade_out_info": "the time it takes for the sound to fade from normal to zero",
229
+ "bass_boost": "Bass boost level (dB)",
230
+ "bass_boost_info": "amount of bass boost in audio track",
231
+ "bass_frequency": "Low-pass filter cutoff frequency (Hz)",
232
+ "bass_frequency_info": "frequencies are reduced. Low frequencies make the bass clearer",
233
+ "treble_boost": "Treble boost level (dB)",
234
+ "treble_boost_info": "high level of sound reinforcement in the audio track",
235
+ "treble_frequency": "High-pass filter cutoff frequency (Hz)",
236
+ "treble_frequency_info": "The frequency will be filtered out. The higher the frequency, the higher the sound will be retained.",
237
+ "limiter_threashold_db": "Limiter threshold",
238
+ "limiter_threashold_db_info": "Limit the maximum audio level to prevent it from exceeding the threshold",
239
+ "limiter_release_ms": "Release time",
240
+ "limiter_release_ms_info": "Time for the audio to return after being limited (Mili Seconds)",
241
+ "distortion_info": "Adjust the level of distortion to create a noisy effect",
242
+ "gain_info": "Adjust the volume level of the signal",
243
+ "clipping_threashold_db": "Clipping threshold",
244
+ "clipping_threashold_db_info": "Trim signals exceeding the threshold, creating a distorted sound",
245
+ "bitcrush_bit_depth": "Bit depth",
246
+ "bitcrush_bit_depth_info": "Reduce audio quality by decreasing bit depth, creating a distorted effect",
247
+ "phaser_depth": "Phaser depth",
248
+ "phaser_depth_info": "Adjust the depth of the effect, impacting its intensity",
249
+ "phaser_rate_hz": "Frequency",
250
+ "phaser_rate_hz_info": "Adjust the frequency of the phaser effect",
251
+ "phaser_mix": "Mix signal",
252
+ "phaser_mix_info": "Adjust the mix level between the original and processed signals",
253
+ "phaser_centre_frequency_hz": "Center frequency",
254
+ "phaser_centre_frequency_hz_info": "The center frequency of the phaser effect, affecting the adjusted frequencies",
255
+ "phaser_feedback": "Feedback",
256
+ "phaser_feedback_info": "Adjust the feedback level of the effect, creating a stronger or lighter phaser feel",
257
+ "compressor_threashold_db": "Compressor threshold",
258
+ "compressor_threashold_db_info": "The threshold level above which the audio will be compressed",
259
+ "compressor_ratio": "Compression ratio",
260
+ "compressor_ratio_info": "Adjust the level of audio compression when exceeding the threshold",
261
+ "compressor_attack_ms": "Attack time (ms)",
262
+ "compressor_attack_ms_info": "Time for compression to start taking effect after the audio exceeds the threshold",
263
+ "compressor_release_ms": "Release time",
264
+ "compressor_release_ms_info": "Time for the audio to return to normal after being compressed",
265
+ "create_dataset_url": "Link to audio (use commas for multiple links)",
266
+ "createdataset": "Create dataset",
267
+ "create_dataset_markdown": "## Create Dataset training from YouTube",
268
+ "create_dataset_markdown_2": "Process and create training datasets using YouTube links",
269
+ "denoise": "Denoise",
270
+ "skip": "Skip",
271
+ "model_ver": "Voice separation version",
272
+ "model_ver_info": "The model version for separating vocals",
273
+ "create_dataset_info": "Dataset creation information",
274
+ "output_data": "Dataset output",
275
+ "output_data_info": "Output data after creation",
276
+ "skip_start": "Skip beginning",
277
+ "skip_start_info": "Skip the initial seconds of the audio; use commas for multiple audios",
278
+ "skip_end": "Skip end",
279
+ "skip_end_info": "Skip the final seconds of the audio; use commas for multiple audios",
280
+ "training_model": "Train Model",
281
+ "training_markdown": "Train and build a voice model with a set of voice data",
282
+ "training_model_name": "Name of the model during training (avoid special characters or spaces)",
283
+ "sample_rate": "Sample rate",
284
+ "sample_rate_info": "Sample rate of the model",
285
+ "training_version": "Model version",
286
+ "training_version_info": "Version of the model during training",
287
+ "training_pitch": "Pitch Guidance",
288
+ "upload_dataset": "Upload dataset",
289
+ "preprocess_effect": "Post processing",
290
+ "clear_dataset": "Clean dataset",
291
+ "preprocess_info": "Preprocessing information",
292
+ "preprocess_button": "1. Processing",
293
+ "extract_button": "2. Extract",
294
+ "extract_info": "Data extraction information",
295
+ "total_epoch": "Total epochs",
296
+ "total_epoch_info": "Total training epochs",
297
+ "save_epoch": "Save frequency",
298
+ "save_epoch_info": "Frequency of saving the model during training to allow retraining",
299
+ "create_index": "Create index",
300
+ "index_algorithm": "Index algorithm",
301
+ "index_algorithm_info": "Algorithm for creating the index",
302
+ "custom_dataset": "Custom dataset folder",
303
+ "custom_dataset_info": "Custom dataset folder for training data",
304
+ "overtraining_detector": "Overtraining detector",
305
+ "overtraining_detector_info": "Check for overtraining during model training",
306
+ "cleanup_training": "Clean Up",
307
+ "cleanup_training_info": "Only enable if you need to retrain the model from scratch.",
308
+ "cache_in_gpu": "Cache in GPU",
309
+ "cache_in_gpu_info": "Store the model in GPU cache memory",
310
+ "dataset_folder": "Folder containing dataset",
311
+ "threshold": "Overtraining threshold",
312
+ "setting_cpu_gpu": "CPU/GPU settings",
313
+ "gpu_number": "Number of GPUs used",
314
+ "gpu_number_info": "Number of GPUs used during training",
315
+ "save_only_latest": "Save only the latest",
316
+ "save_only_latest_info": "Save only the latest D and G models",
317
+ "save_every_weights": "Save all models",
318
+ "save_every_weights_info": "Save all models after each epoch",
319
+ "gpu_info": "GPU information",
320
+ "gpu_info_2": "Information about the GPU used during training",
321
+ "cpu_core": "Number of CPU cores available",
322
+ "cpu_core_info": "Number of CPU cores used during training",
323
+ "not_use_pretrain_2": "Do not use pretraining",
324
+ "not_use_pretrain_info": "Do not use pre-trained models",
325
+ "custom_pretrain": "Custom pretraining",
326
+ "custom_pretrain_info": "Customize pre-training settings",
327
+ "pretrain_file": "Pre-trained model file {dg}",
328
+ "train_info": "Training information",
329
+ "export_model": "5. Export Model",
330
+ "zip_model": "2. Compress model",
331
+ "output_zip": "Output file after compression",
332
+ "model_path": "Model path",
333
+ "model_ratio": "Model ratio",
334
+ "model_ratio_info": "Adjusting towards one side will make the model more like that side",
335
+ "output_model_path": "Model output path",
336
+ "fushion": "Model Fusion",
337
+ "fushion_markdown": "## Fushion Two Models",
338
+ "fushion_markdown_2": "Combine two voice models into a single model",
339
+ "read_model": "Read Information",
340
+ "read_model_markdown": "## Read Model Information",
341
+ "read_model_markdown_2": "Retrieve recorded information within the model",
342
+ "drop_model": "Drop model here",
343
+ "readmodel": "Read model",
344
+ "model_path_info": "Enter the path to the model file",
345
+ "modelinfo": "Model Information",
346
+ "download_markdown": "## Download Model",
347
+ "download_markdown_2": "Download voice models, pre-trained models, and embedding models",
348
+ "model_download": "Download voice model",
349
+ "model_url": "Link to the model",
350
+ "15s": "Please wait about 15 seconds. The system will restart automatically!",
351
+ "model_download_select": "Choose a model download method",
352
+ "model_warehouse": "Model repository",
353
+ "get_model": "Retrieve model",
354
+ "name_to_search": "Name to search",
355
+ "search_2": "Search",
356
+ "select_download_model": "Choose a searched model (Click to select)",
357
+ "download_pretrained_2": "Download pre-trained model",
358
+ "only_huggingface": "Supports only huggingface.co",
359
+ "pretrained_url": "Pre-trained model link {dg}",
360
+ "select_pretrain": "Choose pre-trained model",
361
+ "select_pretrain_info": "Choose a pre-trained model to download",
362
+ "pretrain_sr": "Model sample rate",
363
+ "drop_pretrain": "Drop pre-trained model {dg} here",
364
+ "settings": "Settings",
365
+ "settings_markdown": "## Additional Settings",
366
+ "settings_markdown_2": "Customize additional features of the project",
367
+ "lang": "Language",
368
+ "lang_restart": "The display language in the project (When changing the language, the system will automatically restart after 15 seconds to update)",
369
+ "change_lang": "Change Language",
370
+ "theme": "Theme",
371
+ "theme_restart": "Theme type displayed in the interface (When changing the theme, the system will automatically restart after 15 seconds to update)",
372
+ "theme_button": "Change Theme",
373
+ "change_light_dark": "Switch Light/Dark Mode",
374
+ "tensorboard_url": "Tensorboard URL",
375
+ "errors_loading_audio": "Error loading audio: {e}",
376
+ "apply_error": "An error occurred while applying effects: {e}",
377
+ "indexpath": "Index path",
378
+ "split_total": "Total parts split",
379
+ "process_audio_error": "An error occurred while processing the audio",
380
+ "merge_error": "An error occurred while merging audio",
381
+ "not_found_convert_file": "Processed file not found",
382
+ "convert_batch": "Batch conversion...",
383
+ "found_audio": "Found {audio_files} audio files for conversion.",
384
+ "not_found_audio": "No audio files found!",
385
+ "error_convert": "An error occurred during audio conversion: {e}",
386
+ "convert_batch_success": "Batch conversion completed successfully in {elapsed_time} seconds. {output_path}",
387
+ "convert_audio_success": "File {input_path} converted successfully in {elapsed_time} seconds. {output_path}",
388
+ "hybrid_methods": "Estimating f0 pitch using methods {methods}",
389
+ "method_not_valid": "Invalid method",
390
+ "read_faiss_index_error": "An error occurred while reading the FAISS index: {e}",
391
+ "read_model_error": "Failed to load model: {e}",
392
+ "starting_download": "Starting download",
393
+ "version_not_valid": "Invalid vocal separation version",
394
+ "skip<audio": "Cannot skip as skip time is less than audio file length",
395
+ "skip>audio": "Cannot skip as skip time is greater than audio file length",
396
+ "=<0": "Skip time is less than or equal to 0 and has been skipped",
397
+ "skip_warning": "Skip duration ({seconds} seconds) exceeds audio length ({total_duration} seconds). Skipping.",
398
+ "download_success": "Download completed successfully",
399
+ "create_dataset_error": "An error occurred while creating the training dataset",
400
+ "create_dataset_success": "Training dataset creation completed in {elapsed_time} seconds",
401
+ "skip_start_audio": "Successfully skipped start of audio: {input_file}",
402
+ "skip_end_audio": "Successfully skipped end of audio: {input_file}",
403
+ "merge_audio": "Merged all parts containing audio",
404
+ "separator_process": "Separating vocals: {input}...",
405
+ "not_found_main_vocal": "Main vocal not found!",
406
+ "not_found_backing_vocal": "Backup vocal not found!",
407
+ "not_found_instruments": "Instruments not found",
408
+ "merge_instruments_process": "Merging vocals with instruments...",
409
+ "dereverb": "Removing vocal reverb",
410
+ "dereverb_success": "Successfully removed vocal reverb",
411
+ "save_index": "Index file saved",
412
+ "create_index_error": "An error occurred while creating the index",
413
+ "sr_not_16000": "Sample rate must be 16000",
414
+ "gpu_not_valid": "Invalid GPU index. Switching to CPU.",
415
+ "extract_file_error": "An error occurred while extracting the file",
416
+ "extract_f0_method": "Starting pitch extraction using {num_processes} cores with method {f0_method}...",
417
+ "extract_f0": "Pitch Extraction",
418
+ "extract_f0_success": "Pitch extraction completed in {elapsed_time} seconds.",
419
+ "NaN": "contains NaN values and will be ignored.",
420
+ "start_extract_hubert": "Starting Embedding extraction...",
421
+ "not_found_audio_file": "Audio file not found. Please ensure you provided the correct audio.",
422
+ "process_error": "An error occurred during processing",
423
+ "extract_hubert_success": "Embedding extraction completed in {elapsed_time} seconds.",
424
+ "export_process": "Model path",
425
+ "extract_error": "An error occurred during data extraction",
426
+ "extract_success": "Data extraction successful",
427
+ "min_length>=min_interval>=hop_size": "min_length must be greater than or equal to min_interval and hop_size",
428
+ "max_sil_kept>=hop_size": "max_sil_kept must be greater than or equal to hop_size",
429
+ "start_preprocess": "Starting data preprocessing with {num_processes} cores...",
430
+ "not_integer": "Voice ID folder must be an integer; instead got",
431
+ "preprocess_success": "Preprocessing completed in {elapsed_time} seconds.",
432
+ "preprocess_model_success": "Preprocessing data for the model completed successfully",
433
+ "turn_on_dereverb": "Reverb removal for backup vocals requires enabling reverb removal",
434
+ "turn_on_separator_backing": "Backup vocal separation requires enabling vocal separation",
435
+ "backing_model_ver": "Backup vocal separation model version",
436
+ "clean_audio_success": "Audio cleaned successfully!",
437
+ "separator_error": "An error occurred during music separation",
438
+ "separator_success": "Music separation completed in {elapsed_time} seconds",
439
+ "separator_process_2": "Processing music separation",
440
+ "separator_success_2": "Music separation successful!",
441
+ "separator_process_backing": "Processing backup vocal separation",
442
+ "separator_process_backing_success": "Backup vocal separation successful!",
443
+ "process_original": "Processing original vocal reverb removal...",
444
+ "process_original_success": "Original vocal reverb removal successful!",
445
+ "process_main": "Processing main vocal reverb removal...",
446
+ "process_main_success": "Main vocal reverb removal successful!",
447
+ "process_backing": "Processing backup vocal reverb removal...",
448
+ "process_backing_success": "Backup vocal reverb removal successful!",
449
+ "save_every_epoch": "Save model after: ",
450
+ "total_e": "Total epochs: ",
451
+ "dorg": "Pre-trained G: {pretrainG} | Pre-trained D: {pretrainD}",
452
+ "training_f0": "Pitch Guidance",
453
+ "not_gpu": "No GPU detected, reverting to CPU (not recommended)",
454
+ "not_found_checkpoint": "Checkpoint file not found: {checkpoint_path}",
455
+ "save_checkpoint": "Reloaded checkpoint '{checkpoint_path}' (epoch {checkpoint_dict})",
456
+ "save_model": "Saved model '{checkpoint_path}' (epoch {iteration})",
457
+ "sr_does_not_match": "{sample_rate} Sample rate does not match target {sample_rate2} Sample rate",
458
+ "spec_error": "An error occurred while retrieving specifications from {spec_filename}: {e}",
459
+ "time_or_speed_training": "time={current_time} | training speed={elapsed_time_str}",
460
+ "savemodel": "Saved model '{model_dir}' (epoch {epoch} and step {step})",
461
+ "model_author": "Credit model to {model_author}",
462
+ "unregistered": "Model unregistered",
463
+ "not_author": "Model not credited",
464
+ "training_author": "Model creator name",
465
+ "training_author_info": "To credit the model, enter your name here",
466
+ "extract_model_error": "An error occurred while extracting the model",
467
+ "start_training": "Starting training",
468
+ "import_pretrain": "Loaded pre-trained model ({dg}) '{pretrain}'",
469
+ "not_using_pretrain": "No pre-trained model ({dg}) will be used",
470
+ "training_warning": "WARNING: Generated loss is lower than the lower threshold loss for the next epoch.",
471
+ "overtraining_find": "Overtraining detected at epoch {epoch} with smoothed generator loss {smoothed_value_gen} and smoothed discriminator loss {smoothed_value_disc}",
472
+ "best_epoch": "New best epoch {epoch} with smoothed generator loss {smoothed_value_gen} and smoothed discriminator loss {smoothed_value_disc}",
473
+ "success_training": "Training completed with {epoch} epochs, {global_step} steps, and {loss_gen_all} total generator loss.",
474
+ "training_info": "Lowest generator loss: {lowest_value_rounded} at epoch {lowest_value_epoch}, step {lowest_value_step}",
475
+ "model_training_info": "{model_name} | epoch={epoch} | step={global_step} | {epoch_recorder} | lowest value={lowest_value_rounded} (epoch {lowest_value_epoch} and step {lowest_value_step}) | remaining epochs for overtraining: g/total: {remaining_epochs_gen} d/total: {remaining_epochs_disc} | smoothed generator loss={smoothed_value_gen} | smoothed discriminator loss={smoothed_value_disc}",
476
+ "model_training_info_2": "{model_name} | epoch={epoch} | step={global_step} | {epoch_recorder} | lowest value={lowest_value_rounded} (epoch {lowest_value_epoch} and step {lowest_value_step})",
477
+ "model_training_info_3": "{model_name} | epoch={epoch} | step={global_step} | {epoch_recorder}",
478
+ "training_error": "An error occurred while training the model:",
479
+ "separator_info": "Initializing with output path: {output_dir}, output format: {output_format}",
480
+ "output_dir_is_none": "Output folder not specified. Using current working directory.",
481
+ ">0or=1": "Normalization threshold must be greater than 0 and less than or equal to 1.",
482
+ "output_single": "Single root output requested; only one file ({output_single_stem}) will be written",
483
+ "step2": "The second step will be reversed using spectrogram instead of waveform. This may improve quality but is slightly slower.",
484
+ "name_ver": "Version {name}",
485
+ "os": "Operating System",
486
+ "platform_info": "System: {system_info} Name: {node} Release: {release} Machine: {machine} Processor: {processor}",
487
+ "none_ffmpeg": "FFmpeg is not installed. Please install FFmpeg to use this package.",
488
+ "install_onnx": "ONNX Runtime package {pu} installed with version",
489
+ "running_in_cpu": "Unable to configure hardware acceleration, running in CPU mode",
490
+ "running_in_cuda": "CUDA available in Torch, setting Torch device to CUDA",
491
+ "onnx_have": "ONNXruntime available {have}, enabling acceleration",
492
+ "onnx_not_have": "{have} not available in ONNXruntime; acceleration will NOT be enabled",
493
+ "python_not_install": "Python package: {package_name} is not installed",
494
+ "hash": "Calculating hash for model file {model_path}",
495
+ "ioerror": "IOError while seeking -10 MB or reading model file to compute hash: {e}",
496
+ "cancel_download": "File already exists at {output_path}, skipping download",
497
+ "download_model": "Downloading file from {url} to {output_path} with a timeout of 300 seconds",
498
+ "download_error": "Failed to download file from {url}, response code: {status_code}",
499
+ "vip_model": "Model: '{model_friendly_name}' is a premium model intended by Anjok07 only for paid subscriber access.",
500
+ "vip_print": "Hey there, if you haven't subscribed, please consider supporting UVR's developer, Anjok07, by subscribing here: https://patreon.com/uvr",
501
+ "search_model": "Searching for model {model_filename} in the list of supported models in the group",
502
+ "load_download_json": "Downloaded model list loaded",
503
+ "single_model": "Identified single model file: {model_friendly_name}",
504
+ "not_found_model": "Model not found in the UVR repository, attempting to download from the audio model separation repository...",
505
+ "single_model_path": "Returning path for single model file: {model_path}",
506
+ "find_model": "Input file name {model_filename} found in multi-file model: {model_friendly_name}",
507
+ "find_models": "Identified multi-file model: {model_friendly_name}, iterating through files to download",
508
+ "find_path": "Attempting to determine download PATH for config pair",
509
+ "not_found_model_warehouse": "Model not found in the UVR repository, attempting to download from the audio model separation repository...",
510
+ "yaml_warning": "The model name you specified, {model_filename}, is actually a model config file rather than a model file.",
511
+ "yaml_warning_2": "We found a model matching this config file: {config_key}, so we'll use that model file for this run.",
512
+ "yaml_warning_3": "To avoid confusing/inconsistent behavior in the future, specify the actual model file name instead.",
513
+ "yaml_debug": "Config YAML model file not found in UVR repository, attempting to download from the audio model separation repository...",
514
+ "download_model_friendly": "All files downloaded for model {model_friendly_name}, returning original path {model_path}",
515
+ "not_found_model_2": "Model file {model_filename} not found in the supported files",
516
+ "load_yaml": "Loading model data from YAML at path {model_data_yaml_filepath}",
517
+ "load_yaml_2": "Model data loaded from YAML file: {model_data}",
518
+ "hash_md5": "Computing MD5 hash for model file to identify model parameters from UVR data...",
519
+ "model_hash": "Model {model_path} has hash {model_hash}",
520
+ "mdx_data": "MDX model data path set to {mdx_model_data_path}",
521
+ "load_mdx": "Loading MDX model parameters from UVR model data file...",
522
+ "model_not_support": "Unsupported model file: no parameters found for MD5 hash {model_hash} in UVR model data for MDX vault.",
523
+ "uvr_json": "Model data loaded from UVR JSON with hash {model_hash}: {model_data}",
524
+ "loading_model": "Loading model {model_filename}...",
525
+ "download_model_friendly_2": "Downloaded model, friendly name: {model_friendly_name}, Model path: {model_path}",
526
+ "model_type_not_support": "Unsupported model type: {model_type}",
527
+ "demucs_not_support_python<3.10": "Demucs models require Python version 3.10 or higher.",
528
+ "import_module": "Importing module for model type",
529
+ "initialization": "Initializing separator class for model type",
530
+ "loading_model_success": "Model loading completed.",
531
+ "loading_model_duration": "Model loading duration",
532
+ "starting_separator": "Starting separation process for audio file path",
533
+ "normalization": "Normalization threshold set to {normalization_threshold}, waveform will be scaled down to this maximum amplitude to prevent clipping.",
534
+ "loading_separator_model": "Downloading model {model_filename}...",
535
+ "separator_success_3": "Separation process completed.",
536
+ "separator_duration": "Separation duration",
537
+ "downloading_model": "Downloaded model, type: {model_type}, friendly name: {model_friendly_name}, Model path: {model_path}, Model data: {model_data_dict_size} items",
538
+ "demucs_info": "Demucs parameters: Segment size = {segment_size}, Segment size active = {segments_enabled}",
539
+ "demucs_info_2": "Demucs parameters: Number of predictions = {shifts}, Overlap = {overlap}",
540
+ "start_demucs": "Demucs Separator initialization completed",
541
+ "start_separator": "Starting separation process...",
542
+ "prepare_mix": "Preparing mixture...",
543
+ "demix": "Mixture prepared for demixing. Shape: {shape}",
544
+ "cancel_mix": "Loading model for demixing...",
545
+ "model_review": "Model loaded and set to evaluation mode.",
546
+ "del_gpu_cache_after_demix": "Cleared model and GPU cache after demixing.",
547
+ "process_output_file": "Processing output file...",
548
+ "source_length": "Processing source array, source length is {source_length}",
549
+ "process_ver": "Processing source version...",
550
+ "set_map": "Set source map to {part} parts...",
551
+ "process_all_part": "Processing for all root parts...",
552
+ "skip_part": "Skipping root part {stem_name} as out_single_stem is set to {output_single_stem}...",
553
+ "starting_demix_demucs": "Starting the demix process in demix_demucs...",
554
+ "model_infer": "Running model inference...",
555
+ "name_not_pretrained": "{name} is not a pre-trained model or a model bundle.",
556
+ "invalid_checksum": "Invalid checksum for file {path}, expected {checksum} but got {actual_checksum}",
557
+ "mdx_info": "MDX parameters: Batch size = {batch_size}, Segment size = {segment_size}",
558
+ "mdx_info_2": "MDX parameters: Overlap = {overlap}, Hop_length = {hop_length}, Denoising enabled = {enable_denoise}",
559
+ "mdx_info_3": "MDX parameters",
560
+ "load_model_onnx": "Loading ONNX model for inference...",
561
+ "load_model_onnx_success": "Successfully loaded model using ONNXruntime inference session.",
562
+ "onnx_to_pytorch": "Model converted from ONNX to PyTorch due to mismatched segment size with dim_t, processing may be slower.",
563
+ "stft": "Inverse STFT applied. Returning result with shape",
564
+ "no_denoise": "Model running on spectrum without denoising.",
565
+ "mix": "Preparing mix for input audio file {audio_file_path}...",
566
+ "normalization_demix": "Normalizing mix prior to demixing...",
567
+ "mix_success": "Mix preparation completed.",
568
+ "primary_source": "Normalizing primary source...",
569
+ "secondary_source": "Producing secondary source: Mixing in compatible mode",
570
+ "invert_using_spec": "Inverting secondary stem using spectrum when invert_USE_spec is set to True",
571
+ "invert_using_spec_2": "Inverting secondary stem by subtracting transformed stem from the initial transformed mix",
572
+ "enable_denoise": "Model running on both positive and negative spectrums for denoising.",
573
+ "is_match_mix": "is_match_mix: Predicted spectrum obtained directly from STFT output.",
574
+ "save_secondary_stem_output_path": "Saving secondary stem {stem_name} to {stem_output_path}...",
575
+ "starting_model": "Initializing model settings...",
576
+ "input_info": "Model input parameters",
577
+ "model_settings": "Model settings",
578
+ "initialize_mix": "Initializing mix with is_ckpt = {is_ckpt}. Initial mix shape: {shape}",
579
+ "!=2": "Expected 2-channel audio signal but got {shape} channels",
580
+ "process_check": "Processing in checkpoint mode...",
581
+ "stft_2": "STFT applied to mix. Spectrum shape: {shape}",
582
+ "cache": "Computed padding",
583
+ "shape": "Mix shape after padding: {shape}, Number of parts: {num_chunks}",
584
+ "process_no_check": "Processing in no-checkpoint mode...",
585
+ "n_sample_or_pad": "Number of samples: {n_sample}, Computed padding: {pad}",
586
+ "shape_2": "Mix shape after padding",
587
+ "process_part": "Processed part {mix_waves}: Start {i}, End {ii}",
588
+ "mix_waves_to_tensor": "Converted mix_waves to tensor. Tensor shape: {shape}",
589
+ "mix_match": "Mix mode Match; applying compensation factor.",
590
+ "tar_waves": "tar_waves. Shape",
591
+ "normalization_2": "Normalizing result by dividing it by divisor.",
592
+ "mix_wave": "Processing mix_wave batch",
593
+ "mix_or_batch": "Mix parts into batches. Number of batches",
594
+ "demix_is_match_mix": "Starting demix process with is_match_mix,",
595
+ "mix_shape": "Root mix parts stored. Shape",
596
+ "chunk_size_or_overlap": "Chunk size for compatible mixing: {chunk_size}, Overlap: {overlap}",
597
+ "chunk_size_or_overlap_standard": "Standard chunk size: {chunk_size}, Overlap: {overlap}",
598
+ "calc_size": "Generated size calculated",
599
+ "window": "Window applied to this segment.",
600
+ "process_part_2": "Processing segment {total}/{total_chunks}: Start {start}, End {end}",
601
+ "all_process_part": "Total segments to process",
602
+ "step_or_overlap": "Step size to process parts: {step} with overlap set to {overlap}.",
603
+ "mix_cache": "Mix prepared with padding. Mix shape",
604
+ "dims": "Cannot use sin/cos position encoding with odd dimensions (dim={dims})",
605
+ "activation": "activation must be relu/gelu, not {activation}",
606
+ "length_or_training_length": "Provided length {length} exceeds training duration {training_length}",
607
+ "type_not_valid": "Invalid type for",
608
+ "del_parameter": "Removing non-existent parameter ",
609
+ "info": "Common parameters: Model name = {model_name}, Model path = {model_path}",
610
+ "info_2": "Common parameters: Output path = {output_dir}, Output format = {output_format}",
611
+ "info_3": "Common parameters: Normalization threshold = {normalization_threshold}",
612
+ "info_4": "Common parameters: Denoising enabled = {enable_denoise}, Single stem output = {output_single_stem}",
613
+ "info_5": "Common parameters: Inversion using specs = {invert_using_spec}, Sample rate = {sample_rate}",
614
+ "info_6": "Common parameters: Primary root name = {primary_stem_name}, Secondary root name = {secondary_stem_name}",
615
+ "info_7": "Common parameters: Karaoke mode = {is_karaoke}, BV model = {is_bv_model}, BV model rebalancing = {bv_model_rebalance}",
616
+ "success_process": "Completed processing root {stem_name} and writing audio...",
617
+ "load_audio": "Loading audio from file",
618
+ "load_audio_success": "Audio loaded. Sample rate: {sr}, Audio shape: {shape}",
619
+ "convert_mix": "Converting provided mix array.",
620
+ "convert_shape": "Converted mix shape: {shape}",
621
+ "audio_not_valid": "Audio file {audio_path} is empty or invalid",
622
+ "audio_valid": "Audio file is valid and contains data.",
623
+ "mix_single": "Mix is mono. Converting to stereo.",
624
+ "convert_mix_audio": "Converted to stereo mix.",
625
+ "mix_success_2": "Mix preparation completed.",
626
+ "duration": "Audio duration is {duration_hours} hours ({duration_seconds} seconds).",
627
+ "write": "Using {name} to write.",
628
+ "write_audio": "Writing {name} with root path:",
629
+ "original_not_valid": "Warning: Original source array is nearly silent or empty.",
630
+ "shape_audio": "Audio data shape before processing",
631
+ "convert_data": "Data type before conversion",
632
+ "original_source_to_int16": "Converted original_source to int16.",
633
+ "shape_audio_2": "Interleaved audio data shape",
634
+ "create_audiosegment": "Successfully created AudioSegment.",
635
+ "create_audiosegment_error": "Specific error while creating AudioSegment",
636
+ "export_error": "Error exporting audio file",
637
+ "export_success": "Successfully exported audio file to",
638
+ "clean": "Running garbage collection...",
639
+ "clean_cache": "Clearing {name} cache...",
640
+ "del_path": "Deleting path, source, and root of input audio file...",
641
+ "not_success": "Process was not successful: ",
642
+ "resample_error": "Error during resampling",
643
+ "shapes": "Shapes",
644
+ "wav_resolution": "Resolution type",
645
+ "warnings": "Warning: Extremely aggressive values detected",
646
+ "warnings_2": "Warning: NaN or infinite values detected in wave input. Shape",
647
+ "process_file": "Processing file... \n",
648
+ "save_instruments": "Saving reverse track...",
649
+ "assert": "Audio files must have the same shape - Mix: {mixshape}, Inst: {instrumentalshape}",
650
+ "rubberband": "Rubberband CLI cannot be executed. Please ensure Rubberband-CLI is installed.",
651
+ "rate": "Rate must be strictly positive",
652
+ "gdown_error": "Could not retrieve the public link for the file. You may need to change its permissions to 'Anyone with the link' or there may already be excessive access permissions.",
653
+ "to": "To:",
654
+ "gdown_value_error": "A path or ID must be specified",
655
+ "missing_url": "URL is missing",
656
+ "mac_not_match": "MAC does not match",
657
+ "file_not_access": "File is not accessible",
658
+ "int_resp==-3": "Request failed, retrying",
659
+ "search_separate": "Search for separate files...",
660
+ "found_choice": "Found {choice}",
661
+ "separator==0": "No separate files found!",
662
+ "select_separate": "Select separate files",
663
+ "start_app": "Starting interface...",
664
+ "provide_audio": "Enter the path to the audio file",
665
+ "set_torch_mps": "Set Torch device to MPS",
666
+ "googletts": "Convert text using Google",
667
+ "pitch_info_2": "Pitch adjustment for text-to-speech converter",
668
+ "waveform": "Waveform must have the shape (# frames, # channels)",
669
+ "freq_mask_smooth_hz": "freq_mask_smooth_hz must be at least {hz}Hz",
670
+ "time_mask_smooth_ms": "time_mask_smooth_ms must be at least {ms}ms",
671
+ "x": "x must be greater",
672
+ "xn": "xn must be greater",
673
+ "not_found_pid": "No processes found!",
674
+ "end_pid": "Process terminated!",
675
+ "not_found_separate_model": "No separation model files found!",
676
+ "not_found_pretrained": "No pretrained model files found!",
677
+ "not_found_log": "No log files found!",
678
+ "not_found_predictors": "No predictor model files found!",
679
+ "not_found_embedders": "No embedder model files found!",
680
+ "provide_folder": "Please provide a valid folder!",
681
+ "empty_folder": "The data folder is empty!",
682
+ "vocoder": "Vocoder",
683
+ "vocoder_info": "A vocoder analyzes and synthesizes human speech signals for voice transformation.\n\nDefault: This option is HiFi-GAN-NSF, compatible with all RVCs\n\nMRF-HiFi-GAN: Higher fidelity.\n\nRefineGAN: Superior sound quality.",
684
+ "code_error": "Error: Received status code",
685
+ "json_error": "Error: Unable to parse response.",
686
+ "requests_error": "Request failed: {e}",
687
+ "memory_efficient_training": "Using memory-efficient training",
688
+ "not_use_pretrain_error_download": "Will not use pretrained models due to missing files",
689
+ "provide_file_settings": "Please provide a preset settings file!",
690
+ "load_presets": "Loaded preset file {presets}",
691
+ "provide_filename_settings": "Please provide a preset file name!",
692
+ "choose1": "Please select one to export!",
693
+ "export_settings": "Exported preset file {name}",
694
+ "use_presets": "Using preset file",
695
+ "file_preset": "Preset file",
696
+ "load_file": "Load file",
697
+ "export_file": "Export preset file",
698
+ "save_clean": "Save cleanup",
699
+ "save_autotune": "Save autotune",
700
+ "save_pitch": "Save pitch",
701
+ "save_index_2": "Save index impact",
702
+ "save_resample": "Save resampling",
703
+ "save_filter": "Save median filter",
704
+ "save_envelope": "Save sound envelope",
705
+ "save_protect": "Save sound protection",
706
+ "save_split": "Save sound split",
707
+ "filename_to_save": "File name to save",
708
+ "upload_presets": "Upload preset file",
709
+ "stop": "Stop process",
710
+ "stop_separate": "Stop Music Separation",
711
+ "stop_convert": "Stop Conversion",
712
+ "stop_create_dataset": "Stop Dataset Creation",
713
+ "stop_training": "Stop Training",
714
+ "stop_extract": "Stop Data Processing",
715
+ "stop_preprocess": "Stop Data Extraction",
716
+ "not_found_presets": "No preset files found in the folder!",
717
+ "port": "Port {port} is unavailable! Lowering port by one...",
718
+ "empty_json": "{file}: Corrupted or empty",
719
+ "thank": "Thank you for reporting the issue, and apologies for any inconvenience caused!",
720
+ "error_read_log": "An error occurred while reading log files!",
721
+ "error_send": "An error occurred while sending the report! Please contact me on Discord: pham_huynh_anh!",
722
+ "report_bugs": "Report Bugs",
723
+ "agree_log": "Agree to provide all log files",
724
+ "error_info": "Error description",
725
+ "error_info_2": "Provide more information about the error",
726
+ "report_bug_info": "Report bugs encountered during program usage",
727
+ "sr_info": "NOTE: SOME FORMATS DO NOT SUPPORT RATES ABOVE 48000",
728
+ "report_info": "If possible, agree to provide log files to help with debugging.\n\nIf log files are not provided, please describe the error in detail, including when and where it occurred.\n\nIf this reporting system also fails, you can reach out via [ISSUE]({github}) or Discord: `pham_huynh_anh`",
729
+ "default_setting": "An error occurred during separation, resetting all settings to default...",
730
+ "dataset_folder1": "Please enter the data folder name",
731
+ "checkpointing_err": "Pretrained model parameters such as sample rate or architecture do not match the selected model.",
732
+ "start_onnx_export": "Start converting model to onnx...",
733
+ "convert_model": "Convert Model",
734
+ "pytorch2onnx": "Converting PYTORCH Model to ONNX Model",
735
+ "pytorch2onnx_markdown": "Convert RVC model from pytorch to onnx to optimize audio conversion",
736
+ "error_readfile": "An error occurred while reading the file!",
737
+ "read_sf": "Read audio file using soundfile...",
738
+ "read_librosa": "Read audio files using librosa as soundfile is not supported...",
739
+ "f0_onnx_mode": "F0 ONNX Mode",
740
+ "f0_onnx_mode_info": "Extracting pitch using the ONNX model can help improve speed",
741
+ "formantshift": "Pitch and Formant Shift",
742
+ "formant_qfrency": "Frequency for Formant Shift",
743
+ "formant_timbre": "Timbre for Formant Transformation",
744
+ "time_frames": "Time (Frames)",
745
+ "Frequency": "Frequency (Hz)",
746
+ "f0_extractor_tab": "F0 Extraction",
747
+ "f0_extractor_markdown": "## Pitch Extraction",
748
+ "f0_extractor_markdown_2": "F0 pitch extraction is intended for use in audio conversion inference",
749
+ "start_extract": "Starting extraction process...",
750
+ "extract_done": "Extraction process completed!",
751
+ "f0_file": "Use pre-extracted F0 file",
752
+ "upload_f0": "Upload F0 file",
753
+ "f0_file_2": "F0 File",
754
+ "clean_f0_file": "Clean up F0 file",
755
+ "embed_mode": "Embedders Mode",
756
+ "embed_mode_info": "Extracting embeddings using different models",
757
+ "close": "The application is shutting down...",
758
+ "start_whisper": "Starting voice recognition with Whisper...",
759
+ "whisper_done": "Voice recognition complete!",
760
+ "process_audio": "Preprocessing audio...",
761
+ "process_done_start_convert": "Audio processing complete! proceeding with audio conversion...",
762
+ "convert_with_whisper": "Convert Audio With Whisper",
763
+ "convert_with_whisper_info": "Convert audio using a trained speech model with a Whisper model for speech recognition\n\nWhisper will recognize different voices then cut the individual voices and use the RVC model to convert those segments\n\nThe Whisper model may not work properly which may cause strange output",
764
+ "num_spk": "Number of voices",
765
+ "num_spk_info": "Number of voices in the audio",
766
+ "model_size": "Whisper model size",
767
+ "model_size_info": "Whisper model size\n\nLarge models can produce strange outputs",
768
+ "editing": "Editing",
769
+ "inverting": "Inverting",
770
+ "steps": "Steps",
771
+ "source_prompt": "Source Prompt",
772
+ "target_prompt": "Prompt",
773
+ "cfg_scale_src": "Source Prompt",
774
+ "cfg_scale_tar": "Target Prompt",
775
+ "t_start": "Edit Level",
776
+ "save_compute": "Effective Edit",
777
+ "error_edit": "An error occurred while editing background music {e}",
778
+ "start_edit": "Starting editing background music {input_path}...",
779
+ "edit_success": "Finished editing the soundtrack after {time} with output {output_path}",
780
+ "audio_editing": "Editing the Soundtrack",
781
+ "audio_editing_info": "## Editing Soundtrack Using Audioldm2 Model",
782
+ "audio_editing_markdown": "Editing the soundtrack using Audioldm2 model can help change the type of instrument inside the soundtrack",
783
+ "target_prompt_info": "Describe your desired edited output",
784
+ "cfg_scale_src_info": "The extent to which the source influences the output. Higher values retain more characteristics from the source. Lower values give the system more freedom to transform.",
785
+ "cfg_scale_tar_info": "The extent to which the target influences the final result. Higher values force the result to follow the characteristics of the target. Lower values balance the source and target.",
786
+ "audioldm2_model": "Audioldm2 model",
787
+ "audioldm2_model_info": "Choose the Audioldm2 model of your choice\n\nLoading the weights and inference will also take a long time depending on your GPU",
788
+ "source_prompt_info": "Optional: Describe the original audio input",
789
+ "t_start_info": "Lower correction levels will be closer to the original sound, higher will be stronger correction.",
790
+ "steps_label": "Number diffusion steps",
791
+ "steps_info": "Higher values (e.g. 200) produce higher quality output.",
792
+ "title": "Simple high-quality and high-performance voice and instrument conversion and training tool for Vietnamese people",
793
+ "fp16_not_support": "CPU does not support fp16 well, convert fp16 -> fp32",
794
+ "precision": "Precision",
795
+ "precision_info": "Precision of inference and model training\n\nNote: CPU Does not support fp16\n\nFor RefineGAN and MRF HIFIGAN when converting use fp32 as fp16 can cause them to give weird output",
796
+ "update_precision": "Update Precision",
797
+ "start_update_precision": "Start updating precision",
798
+ "deterministic": "Deterministic algorithm",
799
+ "deterministic_info": "When enabled, highly deterministic algorithms are used, ensuring that each run of the same input data will yield the same results.\n\nWhen disabled, more optimal algorithms may be selected but may not be fully deterministic, resulting in different training results between runs.",
800
+ "benchmark": "Benchmark algorithm",
801
+ "benchmark_info": "When enabled, it will test and select the most optimized algorithm for the specific hardware and size. This can help speed up training.\n\nWhen disabled, it will not perform this algorithm optimization, which can reduce speed but ensures that each run uses the same algorithm, which is useful if you want to reproduce exactly.",
802
+ "font": "Font",
803
+ "font_info": "Interface font\n\nVisit [Google Font](https://fonts.google.com) to choose your favorite font.",
804
+ "change_font": "Change Font",
805
+ "f0_unlock": "Unlock all",
806
+ "f0_unlock_info": "Unlock all pitch extraction methods",
807
+ "stop_audioldm2": "Stop Audioldm2",
808
+ "srt": "SRT file is empty or corrupt!"
809
+ }
assets/languages/id_ID.json ADDED
@@ -0,0 +1,809 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "set_lang": "Bahasa tampilan diatur ke {lang}.",
3
+ "no_support_gpu": "Sayangnya, tidak ada GPU yang kompatibel untuk mendukung pelatihan Anda.",
4
+ "text": "teks",
5
+ "upload_success": "File {name} berhasil diunggah.",
6
+ "download_url": "Unduh dari tautan",
7
+ "download_from_csv": "Unduh dari repositori model CSV",
8
+ "search_models": "Cari model",
9
+ "upload": "Unggah",
10
+ "option_not_valid": "Opsi tidak valid!",
11
+ "list_model": "Daftar model",
12
+ "success": "Selesai!",
13
+ "index": "indeks",
14
+ "model": "model",
15
+ "zip": "kompres",
16
+ "search": "cari",
17
+ "provide_file": "Harap berikan file {filename} yang valid!",
18
+ "start": "Memulai {start}...",
19
+ "not_found": "Tidak ditemukan {name}.",
20
+ "found": "Ditemukan {results} hasil!",
21
+ "download_music": "unduh musik",
22
+ "download": "unduh",
23
+ "provide_url": "Harap berikan URL.",
24
+ "provide_name_is_save": "Harap berikan nama model untuk disimpan.",
25
+ "not_support_url": "URL model Anda tidak didukung.",
26
+ "error_occurred": "Terjadi kesalahan: {e}.",
27
+ "not_model": "File yang Anda unggah bukan file model!",
28
+ "unable_analyze_model": "Tidak dapat menganalisis model!",
29
+ "download_pretrain": "Mengunduh model pra-latih...",
30
+ "provide_pretrain": "Harap berikan URL model pra-latih {dg}.",
31
+ "sr_not_same": "Laju sampel kedua model tidak sama.",
32
+ "architectures_not_same": "Tidak dapat menggabungkan model. Arsitekturnya tidak sama.",
33
+ "fushion_model": "fusi model",
34
+ "model_fushion_info": "Model {name} difusikan dari {pth_1} dan {pth_2} dengan rasio {ratio}.",
35
+ "not_found_create_time": "Waktu pembuatan tidak ditemukan.",
36
+ "format_not_valid": "Format tidak valid.",
37
+ "read_info": "Model yang dilatih pada aplikasi berbeda mungkin menghasilkan informasi berbeda atau tidak dapat dibaca!",
38
+ "epoch": "epok.",
39
+ "step": "langkah",
40
+ "sr": "Laju sampel",
41
+ "f0": "pelatihan nada",
42
+ "version": "versi.",
43
+ "not_f0": "Pelatihan nada tidak dilakukan",
44
+ "trained_f0": "Pelatihan nada dilakukan",
45
+ "model_info": "Nama Model: {model_name}\n\nPembuat Model: {model_author}\n\nEpok: {epochs}\n\nLangkah: {steps}\n\nVersi: {version}\n\nLaju Sampel: {sr}\n\nPelatihan Nada: {pitch_guidance}\n\nHash (ID): {model_hash}\n\nWaktu Pembuatan: {creation_date_str}\n\nVocoder: {vocoder}\n",
46
+ "input_not_valid": "Harap berikan input yang valid!",
47
+ "output_not_valid": "Harap berikan output yang valid!",
48
+ "apply_effect": "terapkan efek",
49
+ "enter_the_text": "Harap masukkan teks untuk diucapkan!",
50
+ "choose_voice": "Harap pilih suara!",
51
+ "convert": "Mengonversi {name}...",
52
+ "separator_music": "pemisahan musik",
53
+ "notfound": "Tidak ditemukan",
54
+ "turn_on_use_audio": "Harap aktifkan penggunaan audio yang dipisahkan untuk melanjutkan",
55
+ "turn_off_convert_backup": "Nonaktifkan konversi suara cadangan untuk menggunakan suara asli",
56
+ "turn_off_merge_backup": "Nonaktifkan penggabungan suara cadangan untuk menggunakan suara asli",
57
+ "not_found_original_vocal": "Vokal asli tidak ditemukan!",
58
+ "convert_vocal": "Mengonversi suara...",
59
+ "convert_success": "Konversi suara selesai!",
60
+ "convert_backup": "Mengonversi suara cadangan...",
61
+ "convert_backup_success": "Konversi suara cadangan selesai!",
62
+ "merge_backup": "Menggabungkan suara utama dengan suara cadangan...",
63
+ "merge_success": "Penggabungan selesai.",
64
+ "is_folder": "Input adalah folder: Mengonversi semua file audio dalam folder...",
65
+ "not_found_in_folder": "Tidak ada file audio yang ditemukan dalam folder!",
66
+ "batch_convert": "Konversi batch sedang berlangsung...",
67
+ "batch_convert_success": "Konversi batch berhasil!",
68
+ "create": "buat",
69
+ "provide_name": "Harap berikan nama model.",
70
+ "not_found_data": "Data tidak ditemukan",
71
+ "not_found_data_preprocess": "Data audio yang diproses tidak ditemukan, harap proses ulang.",
72
+ "not_found_data_extract": "Data audio yang diekstrak tidak ditemukan, harap ekstrak ulang.",
73
+ "provide_pretrained": "Harap berikan model pra-latih {dg}.",
74
+ "download_pretrained": "Mengunduh model pra-latih {dg}{rvc_version} asli",
75
+ "not_found_pretrain": "Model pra-latih {dg} tidak ditemukan",
76
+ "not_use_pretrain": "Tidak ada model pra-latih yang akan digunakan",
77
+ "training": "pelatihan",
78
+ "rick_roll": "Klik di sini jika Anda ingin di-Rick Roll :) ---> [RickRoll]({rickroll})",
79
+ "terms_of_use": "**Harap tidak menggunakan proyek ini untuk tujuan yang tidak etis, ilegal, atau merugikan individu atau organisasi...**",
80
+ "exemption": "**Jika pengguna tidak mematuhi syarat atau melanggarnya, saya tidak bertanggung jawab atas klaim, kerusakan, atau tanggung jawab apa pun, baik dalam kontrak, kelalaian, atau penyebab lain yang timbul dari, di luar, atau terkait dengan perangkat lunak, penggunaannya, atau transaksi lain yang terkait dengannya.**",
81
+ "separator_tab": "Pemisahan Musik",
82
+ "4_part": "Sistem pemisahan musik sederhana dapat memisahkan menjadi 4 bagian: Instrumen, Vokal, Vokal Utama, Vokal Cadangan",
83
+ "clear_audio": "Bersihkan audio",
84
+ "separator_backing": "Pisahkan vokal cadangan",
85
+ "denoise_mdx": "Pemisahan MDX denoise",
86
+ "use_mdx": "Gunakan MDX",
87
+ "dereveb_audio": "Hapus reverb vokal",
88
+ "dereveb_backing": "Hapus reverb cadangan",
89
+ "separator_model": "Model pemisahan musik",
90
+ "separator_backing_model": "Model pemisahan cadangan",
91
+ "shift": "Pergeseran",
92
+ "shift_info": "Semakin tinggi, kualitas lebih baik tetapi lebih lambat dan menggunakan lebih banyak sumber daya",
93
+ "segments_size": "Ukuran Segmen",
94
+ "segments_size_info": "Semakin tinggi, kualitas lebih baik tetapi menggunakan lebih banyak sumber daya",
95
+ "batch_size": "Ukuran batch",
96
+ "batch_size_info": "Jumlah sampel yang diproses secara bersamaan dalam satu siklus pelatihan. Semakin tinggi dapat menyebabkan kelebihan memori",
97
+ "mdx_batch_size_info": "Jumlah sampel yang diproses sekaligus. Pemrosesan batch mengoptimalkan perhitungan. Batch besar dapat menyebabkan kelebihan memori; batch kecil mengurangi efisiensi sumber daya",
98
+ "overlap": "Tumpang tindih",
99
+ "overlap_info": "Jumlah tumpang tindih antara jendela prediksi",
100
+ "export_format": "Format ekspor",
101
+ "export_info": "Format ekspor untuk mengekspor file audio",
102
+ "output_separator": "Output yang dipisahkan",
103
+ "hop_length_info": "Menganalisis jendela transfer waktu saat melakukan transformasi diperbolehkan. Nilai detail lebih kompak tetapi membutuhkan lebih banyak perhitungan",
104
+ "drop_audio": "Letakkan audio di sini",
105
+ "drop_text": "Letakkan file teks di sini",
106
+ "use_url": "Tautan YouTube",
107
+ "url_audio": "Tautan audio",
108
+ "downloads": "Unduhan",
109
+ "clean_strength": "Kekuatan pembersihan audio",
110
+ "clean_strength_info": "Kekuatan pembersih audio untuk menyaring vokal selama ekspor",
111
+ "input_output": "Input audio, output",
112
+ "audio_path": "Jalur input audio",
113
+ "refesh": "Segarkan",
114
+ "output_folder": "Jalur folder output audio",
115
+ "output_folder_info": "Masukkan jalur folder tempat audio akan diekspor",
116
+ "input_audio": "Input audio",
117
+ "instruments": "Instrumen",
118
+ "original_vocal": "Vokal asli",
119
+ "main_vocal": "Vokal utama",
120
+ "backing_vocal": "Vokal cadangan",
121
+ "convert_audio": "Konversi Audio",
122
+ "convert_info": "Konversi audio menggunakan model suara yang dilatih",
123
+ "autotune": "Auto-tune",
124
+ "use_audio": "Gunakan audio yang dipisahkan",
125
+ "convert_original": "Konversi suara asli",
126
+ "convert_backing": "Konversi suara cadangan",
127
+ "not_merge_backing": "Jangan gabungkan suara cadangan",
128
+ "merge_instruments": "Gabungkan instrumen",
129
+ "pitch": "Nada",
130
+ "pitch_info": "Rekomendasi: atur ke 12 untuk mengubah suara pria ke wanita dan sebaliknya",
131
+ "model_accordion": "Model dan indeks",
132
+ "model_name": "File model",
133
+ "index_path": "File indeks",
134
+ "index_strength": "Kekuatan indeks",
135
+ "index_strength_info": "Nilai lebih tinggi meningkatkan kekuatan. Namun, nilai lebih rendah dapat mengurangi efek buatan pada audio",
136
+ "output_path": "Jalur output audio",
137
+ "output_path_info": "Masukkan jalur output (biarkan dalam format .wav; akan dikoreksi otomatis selama konversi)",
138
+ "setting": "Pengaturan umum",
139
+ "f0_method": "Metode ekstraksi",
140
+ "f0_method_info": "Metode yang digunakan untuk ekstraksi data",
141
+ "f0_method_hybrid": "Metode ekstraksi HIBRID",
142
+ "f0_method_hybrid_info": "Kombinasi dari dua atau lebih jenis ekstraksi yang berbeda",
143
+ "hubert_model": "Model penyematan",
144
+ "hubert_info": "Model pra-latih untuk membantu penyematan",
145
+ "modelname": "Nama model",
146
+ "modelname_info": "Jika Anda memiliki model sendiri, unggah dan masukkan nama di sini",
147
+ "split_audio": "Pisahkan audio",
148
+ "autotune_rate": "Tingkat auto-tune",
149
+ "autotune_rate_info": "Tingkat penyesuaian auto-tuning",
150
+ "resample": "Resample",
151
+ "resample_info": "Resample pasca-pemrosesan ke laju sampel akhir; 0 berarti tidak ada resampling, CATATAN: BEBERAPA FORMAT TIDAK MENDUKUNG KECEPATAN DI ATAS 48000",
152
+ "filter_radius": "Radius filter",
153
+ "filter_radius_info": "Jika lebih dari tiga, filter median diterapkan. Nilai ini mewakili radius filter dan dapat mengurangi napas atau kebisingan.",
154
+ "volume_envelope": "Amplop volume",
155
+ "volume_envelope_info": "Gunakan amplop volume input untuk mengganti atau mencampur dengan amplop volume output. Semakin mendekati 1, semakin banyak amplop output yang digunakan",
156
+ "protect": "Perlindungan konsonan",
157
+ "protect_info": "Melindungi konsonan yang jelas dan suara napas untuk mencegah robekan audio dan artefak lainnya. Meningkatkan nilai ini memberikan perlindungan menyeluruh. Menguranginya dapat mengurangi perlindungan tetapi juga meminimalkan efek pengindeksan",
158
+ "output_convert": "Audio yang dikonversi",
159
+ "main_convert": "Konversi suara utama",
160
+ "main_or_backing": "Suara utama + Suara cadangan",
161
+ "voice_or_instruments": "Suara + Instrumen",
162
+ "convert_text": "Konversi Teks",
163
+ "convert_text_markdown": "## Konversi Teks ke Ucapan",
164
+ "convert_text_markdown_2": "Konversi teks ke ucapan dan baca keras menggunakan model suara yang dilatih",
165
+ "input_txt": "Input data dari file teks (.txt)",
166
+ "text_to_speech": "Teks untuk dibaca",
167
+ "voice_speed": "Kecepatan baca",
168
+ "voice_speed_info": "Kecepatan suara",
169
+ "tts_1": "1. Konversi Teks ke Ucapan",
170
+ "tts_2": "2. Konversi Ucapan",
171
+ "voice": "Suara berdasarkan negara",
172
+ "output_tts": "Jalur output ucapan",
173
+ "output_tts_convert": "Jalur output ucapan yang dikonversi",
174
+ "tts_output": "Masukkan jalur output",
175
+ "output_tts_markdown": "Audio yang belum dikonversi dan dikonversi",
176
+ "output_text_to_speech": "Ucapan yang dihasilkan dari konversi teks-ke-ucapan",
177
+ "output_file_tts_convert": "Ucapan yang dikonversi menggunakan model",
178
+ "output_audio": "Output audio",
179
+ "provide_output": "Masukkan jalur output",
180
+ "audio_effects": "Efek Audio",
181
+ "apply_audio_effects": "## Tambahkan Efek Audio Tambahan",
182
+ "audio_effects_edit": "Tambahkan efek ke audio",
183
+ "reverb": "Efek reverb",
184
+ "chorus": "Efek chorus",
185
+ "delay": "Efek delay",
186
+ "more_option": "Opsi tambahan",
187
+ "phaser": "Efek phaser",
188
+ "compressor": "Efek kompresor",
189
+ "apply": "Terapkan",
190
+ "reverb_freeze": "Mode beku",
191
+ "reverb_freeze_info": "Ciptakan efek gema berkelanjutan ketika mode ini diaktifkan",
192
+ "room_size": "Ukuran ruangan",
193
+ "room_size_info": "Sesuaikan ruang ruangan untuk menciptakan reverberasi",
194
+ "damping": "Peredaman",
195
+ "damping_info": "Sesuaikan tingkat penyerapan untuk mengontrol jumlah reverberasi",
196
+ "wet_level": "Tingkat sinyal reverb",
197
+ "wet_level_info": "Sesuaikan tingkat efek sinyal reverb",
198
+ "dry_level": "Tingkat sinyal asli",
199
+ "dry_level_info": "Sesuaikan tingkat sinyal tanpa efek",
200
+ "width": "Lebar audio",
201
+ "width_info": "Sesuaikan lebar ruang audio",
202
+ "chorus_depth": "Kedalaman chorus",
203
+ "chorus_depth_info": "Sesuaikan intensitas chorus untuk menciptakan suara yang lebih lebar",
204
+ "chorus_rate_hz": "Frekuensi",
205
+ "chorus_rate_hz_info": "Sesuaikan kecepatan osilasi efek chorus",
206
+ "chorus_mix": "Campur sinyal",
207
+ "chorus_mix_info": "Sesuaikan tingkat campuran antara sinyal asli dan sinyal yang diproses",
208
+ "chorus_centre_delay_ms": "Penundaan pusat (ms)",
209
+ "chorus_centre_delay_ms_info": "Waktu penundaan antara saluran stereo untuk menciptakan efek chorus",
210
+ "chorus_feedback": "Umpan balik",
211
+ "chorus_feedback_info": "Sesuaikan jumlah sinyal efek yang diumpankan kembali ke sinyal asli",
212
+ "delay_seconds": "Waktu penundaan",
213
+ "delay_seconds_info": "Sesuaikan waktu penundaan antara sinyal asli dan sinyal yang diproses",
214
+ "delay_feedback": "Umpan balik penundaan",
215
+ "delay_feedback_info": "Sesuaikan jumlah sinyal umpan balik, menciptakan efek berulang",
216
+ "delay_mix": "Campuran sinyal penundaan",
217
+ "delay_mix_info": "Sesuaikan tingkat campuran antara sinyal asli dan sinyal yang ditunda",
218
+ "fade": "Efek fade",
219
+ "bass_or_treble": "Bass dan treble",
220
+ "limiter": "Pembatas ambang",
221
+ "distortion": "Efek distorsi",
222
+ "gain": "Penguatan audio",
223
+ "bitcrush": "Efek pengurangan bit",
224
+ "clipping": "Efek pemotongan",
225
+ "fade_in": "Efek fade-in (ms)",
226
+ "fade_in_info": "Waktu untuk audio meningkat secara bertahap dari 0 ke level normal",
227
+ "fade_out": "Efek fade-out (ms)",
228
+ "fade_out_info": "Waktu yang dibutuhkan untuk suara memudar dari normal ke nol",
229
+ "bass_boost": "Tingkat penguatan bass (dB)",
230
+ "bass_boost_info": "Jumlah penguatan bass dalam trek audio",
231
+ "bass_frequency": "Frekuensi pemotongan filter low-pass (Hz)",
232
+ "bass_frequency_info": "Frekuensi akan dikurangi. Frekuensi rendah membuat bass lebih jelas",
233
+ "treble_boost": "Tingkat penguatan treble (dB)",
234
+ "treble_boost_info": "Tingkat penguatan suara tinggi dalam trek audio",
235
+ "treble_frequency": "Frekuensi pemotongan filter high-pass (Hz)",
236
+ "treble_frequency_info": "Frekuensi akan disaring. Semakin tinggi frekuensi, semakin tinggi suara yang akan dipertahankan.",
237
+ "limiter_threashold_db": "Ambang pembatas",
238
+ "limiter_threashold_db_info": "Batasi level audio maksimum untuk mencegahnya melebihi ambang",
239
+ "limiter_release_ms": "Waktu pelepasan",
240
+ "limiter_release_ms_info": "Waktu untuk audio kembali setelah dibatasi (Mili Detik)",
241
+ "distortion_info": "Sesuaikan tingkat distorsi untuk menciptakan efek berisik",
242
+ "gain_info": "Sesuaikan tingkat volume sinyal",
243
+ "clipping_threashold_db": "Ambang pemotongan",
244
+ "clipping_threashold_db_info": "Pangkas sinyal yang melebihi ambang, menciptakan suara terdistorsi",
245
+ "bitcrush_bit_depth": "Kedalaman bit",
246
+ "bitcrush_bit_depth_info": "Kurangi kualitas audio dengan mengurangi kedalaman bit, menciptakan efek terdistorsi",
247
+ "phaser_depth": "Kedalaman phaser",
248
+ "phaser_depth_info": "Sesuaikan kedalaman efek, memengaruhi intensitasnya",
249
+ "phaser_rate_hz": "Frekuensi",
250
+ "phaser_rate_hz_info": "Sesuaikan frekuensi efek phaser",
251
+ "phaser_mix": "Campur sinyal",
252
+ "phaser_mix_info": "Sesuaikan tingkat campuran antara sinyal asli dan yang diproses",
253
+ "phaser_centre_frequency_hz": "Frekuensi pusat",
254
+ "phaser_centre_frequency_hz_info": "Frekuensi pusat efek phaser, memengaruhi frekuensi yang disesuaikan",
255
+ "phaser_feedback": "Umpan balik",
256
+ "phaser_feedback_info": "Sesuaikan tingkat umpan balik efek, menciptakan rasa phaser yang lebih kuat atau lebih ringan",
257
+ "compressor_threashold_db": "Ambang kompresor",
258
+ "compressor_threashold_db_info": "Tingkat ambang di mana audio akan dikompresi",
259
+ "compressor_ratio": "Rasio kompresi",
260
+ "compressor_ratio_info": "Sesuaikan tingkat kompresi audio saat melebihi ambang",
261
+ "compressor_attack_ms": "Waktu serangan (ms)",
262
+ "compressor_attack_ms_info": "Waktu untuk kompresi mulai berlaku setelah audio melebihi ambang",
263
+ "compressor_release_ms": "Waktu pelepasan",
264
+ "compressor_release_ms_info": "Waktu untuk audio kembali ke normal setelah dikompresi",
265
+ "create_dataset_url": "Tautan ke audio (gunakan koma untuk beberapa tautan)",
266
+ "createdataset": "Buat dataset",
267
+ "create_dataset_markdown": "## Buat Dataset Pelatihan dari YouTube",
268
+ "create_dataset_markdown_2": "Proses dan buat dataset pelatihan menggunakan tautan YouTube",
269
+ "denoise": "Denoise",
270
+ "skip": "Lewati",
271
+ "model_ver": "Versi pemisahan suara",
272
+ "model_ver_info": "Versi model untuk memisahkan vokal",
273
+ "create_dataset_info": "Informasi pembuatan dataset",
274
+ "output_data": "Output dataset",
275
+ "output_data_info": "Data output setelah pembuatan",
276
+ "skip_start": "Lewati awal",
277
+ "skip_start_info": "Lewati detik awal audio; gunakan koma untuk beberapa audio",
278
+ "skip_end": "Lewati akhir",
279
+ "skip_end_info": "Lewati detik akhir audio; gunakan koma untuk beberapa audio",
280
+ "training_model": "Latih Model",
281
+ "training_markdown": "Latih dan bangun model suara dengan kumpulan data suara",
282
+ "training_model_name": "Nama model selama pelatihan (hindari karakter khusus atau spasi)",
283
+ "sample_rate": "Laju sampel",
284
+ "sample_rate_info": "Laju sampel model",
285
+ "training_version": "Versi model",
286
+ "training_version_info": "Versi model selama pelatihan",
287
+ "training_pitch": "Panduan Nada",
288
+ "upload_dataset": "Unggah dataset",
289
+ "preprocess_effect": "Pemrosesan pasca",
290
+ "clear_dataset": "Bersihkan dataset",
291
+ "preprocess_info": "Informasi pemrosesan awal",
292
+ "preprocess_button": "1. Pemrosesan",
293
+ "extract_button": "2. Ekstrak",
294
+ "extract_info": "Informasi ekstraksi data",
295
+ "total_epoch": "Total epok",
296
+ "total_epoch_info": "Total epok pelatihan",
297
+ "save_epoch": "Frekuensi penyimpanan",
298
+ "save_epoch_info": "Frekuensi menyimpan model selama pelatihan untuk memungkinkan pelatihan ulang",
299
+ "create_index": "Buat indeks",
300
+ "index_algorithm": "Algoritma indeks",
301
+ "index_algorithm_info": "Algoritma untuk membuat indeks",
302
+ "custom_dataset": "Folder dataset kustom",
303
+ "custom_dataset_info": "Folder dataset kustom untuk data pelatihan",
304
+ "overtraining_detector": "Detektor pelatihan berlebih",
305
+ "overtraining_detector_info": "Periksa pelatihan berlebih selama pelatihan model",
306
+ "cleanup_training": "Bersihkan",
307
+ "cleanup_training_info": "Hanya aktifkan jika Anda perlu melatih ulang model dari awal.",
308
+ "cache_in_gpu": "Cache di GPU",
309
+ "cache_in_gpu_info": "Simpan model di memori cache GPU",
310
+ "dataset_folder": "Folder yang berisi dataset",
311
+ "threshold": "Ambang pelatihan berlebih",
312
+ "setting_cpu_gpu": "Pengaturan CPU/GPU",
313
+ "gpu_number": "Jumlah GPU yang digunakan",
314
+ "gpu_number_info": "Jumlah GPU yang digunakan selama pelatihan",
315
+ "save_only_latest": "Simpan hanya yang terbaru",
316
+ "save_only_latest_info": "Simpan hanya model D dan G terbaru",
317
+ "save_every_weights": "Simpan semua model",
318
+ "save_every_weights_info": "Simpan semua model setelah setiap epok",
319
+ "gpu_info": "Informasi GPU",
320
+ "gpu_info_2": "Informasi tentang GPU yang digunakan selama pelatihan",
321
+ "cpu_core": "Jumlah inti CPU yang tersedia",
322
+ "cpu_core_info": "Jumlah inti CPU yang digunakan selama pelatihan",
323
+ "not_use_pretrain_2": "Jangan gunakan pra-pelatihan",
324
+ "not_use_pretrain_info": "Jangan gunakan model pra-latih",
325
+ "custom_pretrain": "Pra-pelatihan kustom",
326
+ "custom_pretrain_info": "Sesuaikan pengaturan pra-pelatihan",
327
+ "pretrain_file": "File model pra-latih {dg}",
328
+ "train_info": "Informasi pelatihan",
329
+ "export_model": "5. Ekspor Model",
330
+ "zip_model": "2. Kompres model",
331
+ "output_zip": "File output setelah kompresi",
332
+ "model_path": "Jalur model",
333
+ "model_ratio": "Rasio model",
334
+ "model_ratio_info": "Menyesuaikan ke satu sisi akan membuat model lebih mirip dengan sisi itu",
335
+ "output_model_path": "Jalur output model",
336
+ "fushion": "Fusi Model",
337
+ "fushion_markdown": "## Fusi Dua Model",
338
+ "fushion_markdown_2": "Gabungkan dua model suara menjadi satu model",
339
+ "read_model": "Baca Informasi",
340
+ "read_model_markdown": "## Baca Informasi Model",
341
+ "read_model_markdown_2": "Ambil informasi yang terekam dalam model",
342
+ "drop_model": "Letakkan model di sini",
343
+ "readmodel": "Baca model",
344
+ "model_path_info": "Masukkan jalur ke file model",
345
+ "modelinfo": "Informasi Model",
346
+ "download_markdown": "## Unduh Model",
347
+ "download_markdown_2": "Unduh model suara, model pra-latih, dan model penyematan",
348
+ "model_download": "Unduh model suara",
349
+ "model_url": "Tautan ke model",
350
+ "15s": "Harap tunggu sekitar 15 detik. Sistem akan restart otomatis!",
351
+ "model_download_select": "Pilih metode unduh model",
352
+ "model_warehouse": "Repositori model",
353
+ "get_model": "Ambil model",
354
+ "name_to_search": "Nama untuk dicari",
355
+ "search_2": "Cari",
356
+ "select_download_model": "Pilih model yang dicari (Klik untuk memilih)",
357
+ "download_pretrained_2": "Unduh model pra-latih",
358
+ "only_huggingface": "Hanya mendukung huggingface.co",
359
+ "pretrained_url": "Tautan model pra-latih {dg}",
360
+ "select_pretrain": "Pilih model pra-latih",
361
+ "select_pretrain_info": "Pilih model pra-latih untuk diunduh",
362
+ "pretrain_sr": "Laju sampel model",
363
+ "drop_pretrain": "Letakkan model pra-latih {dg} di sini",
364
+ "settings": "Pengaturan",
365
+ "settings_markdown": "## Pengaturan Tambahan",
366
+ "settings_markdown_2": "Sesuaikan fitur tambahan proyek",
367
+ "lang": "Bahasa",
368
+ "lang_restart": "Bahasa tampilan dalam proyek (Saat mengubah bahasa, sistem akan restart otomatis setelah 15 detik untuk memperbarui)",
369
+ "change_lang": "Ubah Bahasa",
370
+ "theme": "Tema",
371
+ "theme_restart": "Jenis tema yang ditampilkan di antarmuka (Saat mengubah tema, sistem akan restart otomatis setelah 15 detik untuk memperbarui)",
372
+ "theme_button": "Ubah Tema",
373
+ "change_light_dark": "Beralih Mode Terang/Gelap",
374
+ "tensorboard_url": "URL Tensorboard",
375
+ "errors_loading_audio": "Kesalahan memuat audio: {e}",
376
+ "apply_error": "Terjadi kesalahan saat menerapkan efek: {e}",
377
+ "indexpath": "Jalur indeks",
378
+ "split_total": "Total bagian yang dipisah",
379
+ "process_audio_error": "Terjadi kesalahan saat memproses audio",
380
+ "merge_error": "Terjadi kesalahan saat menggabungkan audio",
381
+ "not_found_convert_file": "File yang diproses tidak ditemukan",
382
+ "convert_batch": "Konversi batch...",
383
+ "found_audio": "Ditemukan {audio_files} file audio untuk konversi.",
384
+ "not_found_audio": "Tidak ada file audio yang ditemukan!",
385
+ "error_convert": "Terjadi kesalahan selama konversi audio: {e}",
386
+ "convert_batch_success": "Konversi batch selesai dengan sukses dalam {elapsed_time} detik. {output_path}",
387
+ "convert_audio_success": "File {input_path} berhasil dikonversi dalam {elapsed_time} detik. {output_path}",
388
+ "hybrid_methods": "Memperkirakan nada f0 menggunakan metode {methods}",
389
+ "method_not_valid": "Metode tidak valid",
390
+ "read_faiss_index_error": "Terjadi kesalahan saat membaca indeks FAISS: {e}",
391
+ "read_model_error": "Gagal memuat model: {e}",
392
+ "starting_download": "Memulai unduhan",
393
+ "version_not_valid": "Versi pemisahan vokal tidak valid",
394
+ "skip<audio": "Tidak dapat melewati karena waktu lewati kurang dari panjang file audio",
395
+ "skip>audio": "Tidak dapat melewati karena waktu lewati lebih besar dari panjang file audio",
396
+ "=<0": "Waktu lewati kurang dari atau sama dengan 0 dan telah dilewati",
397
+ "skip_warning": "Durasi lewati ({seconds} detik) melebihi panjang audio ({total_duration} detik). Melewati.",
398
+ "download_success": "Unduhan selesai dengan sukses",
399
+ "create_dataset_error": "Terjadi kesalahan saat membuat dataset pelatihan",
400
+ "create_dataset_success": "Pembuatan dataset pelatihan selesai dalam {elapsed_time} detik",
401
+ "skip_start_audio": "Berhasil melewati awal audio: {input_file}",
402
+ "skip_end_audio": "Berhasil melewati akhir audio: {input_file}",
403
+ "merge_audio": "Menggabungkan semua bagian yang berisi audio",
404
+ "separator_process": "Memisahkan vokal: {input}...",
405
+ "not_found_main_vocal": "Vokal utama tidak ditemukan!",
406
+ "not_found_backing_vocal": "Vokal cadangan tidak ditemukan!",
407
+ "not_found_instruments": "Instrumen tidak ditemukan",
408
+ "merge_instruments_process": "Menggabungkan vokal dengan instrumen...",
409
+ "dereverb": "Menghapus reverb vokal",
410
+ "dereverb_success": "Berhasil menghapus reverb vokal",
411
+ "save_index": "File indeks disimpan",
412
+ "create_index_error": "Terjadi kesalahan saat membuat indeks",
413
+ "sr_not_16000": "Laju sampel harus 16000",
414
+ "gpu_not_valid": "Indeks GPU tidak valid. Beralih ke CPU.",
415
+ "extract_file_error": "Terjadi kesalahan saat mengekstrak file",
416
+ "extract_f0_method": "Memulai ekstraksi nada menggunakan {num_processes} inti dengan metode {f0_method}...",
417
+ "extract_f0": "Ekstraksi Nada",
418
+ "extract_f0_success": "Ekstraksi nada selesai dalam {elapsed_time} detik.",
419
+ "NaN": "berisi nilai NaN dan akan diabaikan.",
420
+ "start_extract_hubert": "Memulai ekstraksi penyematan...",
421
+ "not_found_audio_file": "File audio tidak ditemukan. Pastikan Anda memberikan audio yang benar.",
422
+ "process_error": "Terjadi kesalahan selama pemrosesan",
423
+ "extract_hubert_success": "Ekstraksi penyematan selesai dalam {elapsed_time} detik.",
424
+ "export_process": "Jalur model",
425
+ "extract_error": "Terjadi kesalahan selama ekstraksi data",
426
+ "extract_success": "Ekstraksi data berhasil",
427
+ "min_length>=min_interval>=hop_size": "min_length harus lebih besar atau sama dengan min_interval dan hop_size",
428
+ "max_sil_kept>=hop_size": "max_sil_kept harus lebih besar atau sama dengan hop_size",
429
+ "start_preprocess": "Memulai pemrosesan awal data dengan {num_processes} inti...",
430
+ "not_integer": "Folder ID suara harus berupa bilangan bulat; sebaliknya mendapat",
431
+ "preprocess_success": "Pemrosesan selesai dalam {elapsed_time} detik.",
432
+ "preprocess_model_success": "Pemrosesan data untuk model selesai dengan sukses",
433
+ "turn_on_dereverb": "Penghapusan reverb untuk vokal cadangan memerlukan pengaktifan penghapusan reverb",
434
+ "turn_on_separator_backing": "Pemisahan vokal cadangan memerlukan pengaktifan pemisahan vokal",
435
+ "backing_model_ver": "Versi model pemisahan vokal cadangan",
436
+ "clean_audio_success": "Audio berhasil dibersihkan!",
437
+ "separator_error": "Terjadi kesalahan selama pemisahan musik",
438
+ "separator_success": "Pemisahan musik selesai dalam {elapsed_time} detik",
439
+ "separator_process_2": "Memproses pemisahan musik",
440
+ "separator_success_2": "Pemisahan musik berhasil!",
441
+ "separator_process_backing": "Memproses pemisahan vokal cadangan",
442
+ "separator_process_backing_success": "Pemisahan vokal cadangan berhasil!",
443
+ "process_original": "Memproses penghapusan reverb vokal asli...",
444
+ "process_original_success": "Penghapusan reverb vokal asli berhasil!",
445
+ "process_main": "Memproses penghapusan reverb vokal utama...",
446
+ "process_main_success": "Penghapusan reverb vokal utama berhasil!",
447
+ "process_backing": "Memproses penghapusan reverb vokal cadangan...",
448
+ "process_backing_success": "Penghapusan reverb vokal cadangan berhasil!",
449
+ "save_every_epoch": "Simpan model setelah: ",
450
+ "total_e": "Total epok: ",
451
+ "dorg": "Pra-latih G: {pretrainG} | Pra-latih D: {pretrainD}",
452
+ "training_f0": "Panduan Nada",
453
+ "not_gpu": "Tidak ada GPU yang terdeteksi, kembali ke CPU (tidak disarankan)",
454
+ "not_found_checkpoint": "File checkpoint tidak ditemukan: {checkpoint_path}",
455
+ "save_checkpoint": "Memuat ulang checkpoint '{checkpoint_path}' (epok {checkpoint_dict})",
456
+ "save_model": "Model disimpan '{checkpoint_path}' (epok {iteration})",
457
+ "sr_does_not_match": "Laju sampel {sample_rate} tidak cocok dengan laju sampel target {sample_rate2}",
458
+ "spec_error": "Terjadi kesalahan saat mengambil spesifikasi dari {spec_filename}: {e}",
459
+ "time_or_speed_training": "waktu={current_time} | kecepatan pelatihan={elapsed_time_str}",
460
+ "savemodel": "Model disimpan '{model_dir}' (epok {epoch} dan langkah {step})",
461
+ "model_author": "Kredit model ke {model_author}",
462
+ "unregistered": "Model tidak terdaftar",
463
+ "not_author": "Model tidak dikreditkan",
464
+ "training_author": "Nama pembuat model",
465
+ "training_author_info": "Untuk mengkredit model, masukkan nama Anda di sini",
466
+ "extract_model_error": "Terjadi kesalahan saat mengekstrak model",
467
+ "start_training": "Memulai pelatihan",
468
+ "import_pretrain": "Memuat model pra-latih ({dg}) '{pretrain}'",
469
+ "not_using_pretrain": "Tidak ada model pra-latih ({dg}) yang akan digunakan",
470
+ "training_warning": "PERINGATAN: Kerugian yang dihasilkan lebih rendah dari kerugian ambang bawah untuk epok berikutnya.",
471
+ "overtraining_find": "Pelatihan berlebih terdeteksi pada epok {epoch} dengan kerugian generator yang dihaluskan {smoothed_value_gen} dan kerugian diskriminator yang dihaluskan {smoothed_value_disc}",
472
+ "best_epoch": "Epok terbaik baru {epoch} dengan kerugian generator yang dihaluskan {smoothed_value_gen} dan kerugian diskriminator yang dihaluskan {smoothed_value_disc}",
473
+ "success_training": "Pelatihan selesai dengan {epoch} epok, {global_step} langkah, dan {loss_gen_all} total kerugian generator.",
474
+ "training_info": "Kerugian generator terendah: {lowest_value_rounded} pada epok {lowest_value_epoch}, langkah {lowest_value_step}",
475
+ "model_training_info": "{model_name} | epok={epoch} | langkah={global_step} | {epoch_recorder} | nilai terendah={lowest_value_rounded} (epok {lowest_value_epoch} dan langkah {lowest_value_step}) | epok tersisa untuk pelatihan berlebih: g/total: {remaining_epochs_gen} d/total: {remaining_epochs_disc} | kerugian generator yang dihaluskan={smoothed_value_gen} | kerugian diskriminator yang dihaluskan={smoothed_value_disc}",
476
+ "model_training_info_2": "{model_name} | epok={epoch} | langkah={global_step} | {epoch_recorder} | nilai terendah={lowest_value_rounded} (epok {lowest_value_epoch} dan langkah {lowest_value_step})",
477
+ "model_training_info_3": "{model_name} | epok={epoch} | langkah={global_step} | {epoch_recorder}",
478
+ "training_error": "Terjadi kesalahan saat melatih model:",
479
+ "separator_info": "Menginisialisasi dengan jalur output: {output_dir}, format output: {output_format}",
480
+ "output_dir_is_none": "Folder output tidak ditentukan. Menggunakan direktori kerja saat ini.",
481
+ ">0or=1": "Ambang normalisasi harus lebih besar dari 0 dan kurang dari atau sama dengan 1.",
482
+ "output_single": "Output akar tunggal diminta; hanya satu file ({output_single_stem}) yang akan ditulis",
483
+ "step2": "Langkah kedua akan dibalik menggunakan spektrogram bukan gelombang. Ini dapat meningkatkan kualitas tetapi sedikit lebih lambat.",
484
+ "name_ver": "Versi {name}",
485
+ "os": "Sistem Operasi",
486
+ "platform_info": "Sistem: {system_info} Nama: {node} Rilis: {release} Mesin: {machine} Prosesor: {processor}",
487
+ "none_ffmpeg": "FFmpeg tidak terinstal. Harap instal FFmpeg untuk menggunakan paket ini.",
488
+ "install_onnx": "Paket ONNX Runtime {pu} terinstal dengan versi",
489
+ "running_in_cpu": "Tidak dapat mengkonfigurasi akselerasi perangkat keras, berjalan dalam mode CPU",
490
+ "running_in_cuda": "CUDA tersedia di Torch, mengatur perangkat Torch ke CUDA",
491
+ "onnx_have": "ONNXruntime tersedia {have}, mengaktifkan akselerasi",
492
+ "onnx_not_have": "{have} tidak tersedia di ONNXruntime; akselerasi TIDAK akan diaktifkan",
493
+ "python_not_install": "Paket Python: {package_name} tidak terinstal",
494
+ "hash": "Menghitung hash untuk file model {model_path}",
495
+ "ioerror": "IOError saat mencari -10 MB atau membaca file model untuk menghitung hash: {e}",
496
+ "cancel_download": "File sudah ada di {output_path}, melewati unduhan",
497
+ "download_model": "Mengunduh file dari {url} ke {output_path} dengan batas waktu 300 detik",
498
+ "download_error": "Gagal mengunduh file dari {url}, kode respons: {status_code}",
499
+ "vip_model": "Model: '{model_friendly_name}' adalah model premium yang dimaksudkan oleh Anjok07 hanya untuk akses pelanggan berbayar.",
500
+ "vip_print": "Hai, jika Anda belum berlangganan, pertimbangkan untuk mendukung pengembang UVR, Anjok07, dengan berlangganan di sini: https://patreon.com/uvr",
501
+ "search_model": "Mencari model {model_filename} dalam daftar model yang didukung dalam grup",
502
+ "load_download_json": "Daftar model yang diunduh dimuat",
503
+ "single_model": "Mengidentifikasi file model tunggal: {model_friendly_name}",
504
+ "not_found_model": "Model tidak ditemukan di repositori UVR, mencoba mengunduh dari repositori pemisahan model audio...",
505
+ "single_model_path": "Mengembalikan jalur untuk file model tunggal: {model_path}",
506
+ "find_model": "Nama file input {model_filename} ditemukan dalam model multi-file: {model_friendly_name}",
507
+ "find_models": "Mengidentifikasi model multi-file: {model_friendly_name}, mengulang file untuk diunduh",
508
+ "find_path": "Mencoba menentukan jalur unduhan untuk pasangan konfigurasi",
509
+ "not_found_model_warehouse": "Model tidak ditemukan di repositori UVR, mencoba mengunduh dari repositori pemisahan model audio...",
510
+ "yaml_warning": "Nama model yang Anda tentukan, {model_filename}, sebenarnya adalah file konfigurasi model daripada file model.",
511
+ "yaml_warning_2": "Kami menemukan model yang cocok dengan file konfigurasi ini: {config_key}, jadi kami akan menggunakan file model itu untuk proses ini.",
512
+ "yaml_warning_3": "Untuk menghindari perilaku yang membingungkan/tidak konsisten di masa depan, tentukan nama file model yang sebenarnya.",
513
+ "yaml_debug": "File model konfigurasi YAML tidak ditemukan di repositori UVR, mencoba mengunduh dari repositori pemisahan model audio...",
514
+ "download_model_friendly": "Semua file diunduh untuk model {model_friendly_name}, mengembalikan jalur asli {model_path}",
515
+ "not_found_model_2": "File model {model_filename} tidak ditemukan di file yang didukung",
516
+ "load_yaml": "Memuat data model dari YAML di jalur {model_data_yaml_filepath}",
517
+ "load_yaml_2": "Data model dimuat dari file YAML: {model_data}",
518
+ "hash_md5": "Menghitung hash MD5 untuk file model untuk mengidentifikasi parameter model dari data UVR...",
519
+ "model_hash": "Model {model_path} memiliki hash {model_hash}",
520
+ "mdx_data": "Jalur data model MDX diatur ke {mdx_model_data_path}",
521
+ "load_mdx": "Memuat parameter model MDX dari file data model UVR...",
522
+ "model_not_support": "File model tidak didukung: tidak ada parameter yang ditemukan untuk hash MD5 {model_hash} di data model UVR untuk vault MDX.",
523
+ "uvr_json": "Data model dimuat dari JSON UVR dengan hash {model_hash}: {model_data}",
524
+ "loading_model": "Memuat model {model_filename}...",
525
+ "download_model_friendly_2": "Model diunduh, nama ramah: {model_friendly_name}, Jalur Model: {model_path}",
526
+ "model_type_not_support": "Jenis model tidak didukung: {model_type}",
527
+ "demucs_not_support_python<3.10": "Model Demucs memerlukan versi Python 3.10 atau lebih tinggi.",
528
+ "import_module": "Mengimpor modul untuk jenis model",
529
+ "initialization": "Menginisialisasi kelas pemisah untuk jenis model",
530
+ "loading_model_success": "Pemuatan model selesai.",
531
+ "loading_model_duration": "Durasi pemuatan model",
532
+ "starting_separator": "Memulai proses pemisahan untuk jalur file audio",
533
+ "normalization": "Ambang normalisasi diatur ke {normalization_threshold}, gelombang akan diskalakan ke amplitudo maksimum ini untuk mencegah pemotongan.",
534
+ "loading_separator_model": "Mengunduh model {model_filename}...",
535
+ "separator_success_3": "Proses pemisahan selesai.",
536
+ "separator_duration": "Durasi pemisahan",
537
+ "downloading_model": "Model diunduh, jenis: {model_type}, nama ramah: {model_friendly_name}, Jalur Model: {model_path}, Data Model: {model_data_dict_size} item",
538
+ "demucs_info": "Parameter Demucs: Ukuran segmen = {segment_size}, Ukuran segmen aktif = {segments_enabled}",
539
+ "demucs_info_2": "Parameter Demucs: Jumlah prediksi = {shifts}, Tumpang tindih = {overlap}",
540
+ "start_demucs": "Inisialisasi Pemisah Demucs selesai",
541
+ "start_separator": "Memulai proses pemisahan...",
542
+ "prepare_mix": "Mempersiapkan campuran...",
543
+ "demix": "Campuran disiapkan untuk demixing. Bentuk: {shape}",
544
+ "cancel_mix": "Memuat model untuk demixing...",
545
+ "model_review": "Model dimuat dan diatur ke mode evaluasi.",
546
+ "del_gpu_cache_after_demix": "Membersihkan model dan cache GPU setelah demixing.",
547
+ "process_output_file": "Memproses file output...",
548
+ "source_length": "Memproses array sumber, panjang sumber adalah {source_length}",
549
+ "process_ver": "Memproses versi sumber...",
550
+ "set_map": "Mengatur peta sumber ke {part} bagian...",
551
+ "process_all_part": "Memproses untuk semua bagian akar...",
552
+ "skip_part": "Melewati bagian akar {stem_name} karena out_single_stem diatur ke {output_single_stem}...",
553
+ "starting_demix_demucs": "Memulai proses demix di demix_demucs...",
554
+ "model_infer": "Menjalankan inferensi model...",
555
+ "name_not_pretrained": "{name} bukan model pra-latih atau bundel model.",
556
+ "invalid_checksum": "Checksum tidak valid untuk file {path}, diharapkan {checksum} tetapi mendapat {actual_checksum}",
557
+ "mdx_info": "Parameter MDX: Ukuran batch = {batch_size}, Ukuran segmen = {segment_size}",
558
+ "mdx_info_2": "Parameter MDX: Tumpang tindih = {overlap}, Hop_length = {hop_length}, Denoising diaktifkan = {enable_denoise}",
559
+ "mdx_info_3": "Parameter MDX",
560
+ "load_model_onnx": "Memuat model ONNX untuk inferensi...",
561
+ "load_model_onnx_success": "Berhasil memuat model menggunakan sesi inferensi ONNXruntime.",
562
+ "onnx_to_pytorch": "Model dikonversi dari ONNX ke PyTorch karena ukuran segmen tidak cocok dengan dim_t, pemrosesan mungkin lebih lambat.",
563
+ "stft": "STFT terbalik diterapkan. Mengembalikan hasil dengan bentuk",
564
+ "no_denoise": "Model berjalan pada spektrum tanpa denoising.",
565
+ "mix": "Mempersiapkan campuran untuk file audio input {audio_file_path}...",
566
+ "normalization_demix": "Menormalkan campuran sebelum demixing...",
567
+ "mix_success": "Persiapan campuran selesai.",
568
+ "primary_source": "Menormalkan sumber utama...",
569
+ "secondary_source": "Menghasilkan sumber sekunder: Mencampur dalam mode kompatibel",
570
+ "invert_using_spec": "Membalikkan batang sekunder menggunakan spektrum saat invert_USE_spec diatur ke True",
571
+ "invert_using_spec_2": "Membalikkan batang sekunder dengan mengurangi batang yang diubah dari campuran awal yang diubah",
572
+ "enable_denoise": "Model berjalan pada spektrum positif dan negatif untuk denoising.",
573
+ "is_match_mix": "is_match_mix: Spektrum yang diprediksi diperoleh langsung dari output STFT.",
574
+ "save_secondary_stem_output_path": "Menyimpan batang sekunder {stem_name} ke {stem_output_path}...",
575
+ "starting_model": "Menginisialisasi pengaturan model...",
576
+ "input_info": "Parameter input model",
577
+ "model_settings": "Pengaturan model",
578
+ "initialize_mix": "Menginisialisasi campuran dengan is_ckpt = {is_ckpt}. Bentuk campuran awal: {shape}",
579
+ "!=2": "Diharapkan sinyal audio 2 saluran tetapi mendapat {shape} saluran",
580
+ "process_check": "Memproses dalam mode checkpoint...",
581
+ "stft_2": "STFT diterapkan ke campuran. Bentuk spektrum: {shape}",
582
+ "cache": "Padding dihitung",
583
+ "shape": "Bentuk campuran setelah padding: {shape}, Jumlah bagian: {num_chunks}",
584
+ "process_no_check": "Memproses dalam mode tanpa checkpoint...",
585
+ "n_sample_or_pad": "Jumlah sampel: {n_sample}, Padding dihitung: {pad}",
586
+ "shape_2": "Bentuk campuran setelah padding",
587
+ "process_part": "Memproses bagian {mix_waves}: Mulai {i}, Akhir {ii}",
588
+ "mix_waves_to_tensor": "Mengonversi mix_waves ke tensor. Bentuk tensor: {shape}",
589
+ "mix_match": "Mode campuran Cocok; menerapkan faktor kompensasi.",
590
+ "tar_waves": "tar_waves. Bentuk",
591
+ "normalization_2": "Menormalkan hasil dengan membaginya dengan pembagi.",
592
+ "mix_wave": "Memproses batch mix_wave",
593
+ "mix_or_batch": "Mencampur bagian menjadi batch. Jumlah batch",
594
+ "demix_is_match_mix": "Memulai proses demix dengan is_match_mix,",
595
+ "mix_shape": "Bagian campuran akar disimpan. Bentuk",
596
+ "chunk_size_or_overlap": "Ukuran potongan untuk pencampuran kompatibel: {chunk_size}, Tumpang tindih: {overlap}",
597
+ "chunk_size_or_overlap_standard": "Ukuran potongan standar: {chunk_size}, Tumpang tindih: {overlap}",
598
+ "calc_size": "Ukuran yang dihasilkan dihitung",
599
+ "window": "Jendela diterapkan ke segmen ini.",
600
+ "process_part_2": "Memproses segmen {total}/{total_chunks}: Mulai {start}, Akhir {end}",
601
+ "all_process_part": "Total segmen untuk diproses",
602
+ "step_or_overlap": "Ukuran langkah untuk memproses bagian: {step} dengan tumpang tindih diatur ke {overlap}.",
603
+ "mix_cache": "Campuran disiapkan dengan padding. Bentuk campuran",
604
+ "dims": "Tidak dapat menggunakan pengkodean posisi sin/cos dengan dimensi ganjil (dim={dims})",
605
+ "activation": "aktivasi harus relu/gelu, bukan {activation}",
606
+ "length_or_training_length": "Panjang yang diberikan {length} melebihi durasi pelatihan {training_length}",
607
+ "type_not_valid": "Jenis tidak valid untuk",
608
+ "del_parameter": "Menghapus parameter yang tidak ada ",
609
+ "info": "Parameter umum: Nama model = {model_name}, Jalur model = {model_path}",
610
+ "info_2": "Parameter umum: Jalur output = {output_dir}, Format output = {output_format}",
611
+ "info_3": "Parameter umum: Ambang normalisasi = {normalization_threshold}",
612
+ "info_4": "Parameter umum: Denoising diaktifkan = {enable_denoise}, Output batang tunggal = {output_single_stem}",
613
+ "info_5": "Parameter umum: Inversi menggunakan spesifikasi = {invert_using_spec}, Laju sampel = {sample_rate}",
614
+ "info_6": "Parameter umum: Nama akar utama = {primary_stem_name}, Nama akar sekunder = {secondary_stem_name}",
615
+ "info_7": "Parameter umum: Mode karaoke = {is_karaoke}, Model BV = {is_bv_model}, Rebalancing model BV = {bv_model_rebalance}",
616
+ "success_process": "Selesai memproses akar {stem_name} dan menulis audio...",
617
+ "load_audio": "Memuat audio dari file",
618
+ "load_audio_success": "Audio dimuat. Laju sampel: {sr}, Bentuk audio: {shape}",
619
+ "convert_mix": "Mengonversi array campuran yang diberikan.",
620
+ "convert_shape": "Bentuk campuran yang dikonversi: {shape}",
621
+ "audio_not_valid": "File audio {audio_path} kosong atau tidak valid",
622
+ "audio_valid": "File audio valid dan berisi data.",
623
+ "mix_single": "Campuran adalah mono. Mengonversi ke stereo.",
624
+ "convert_mix_audio": "Dikonversi ke campuran stereo.",
625
+ "mix_success_2": "Persiapan campuran selesai.",
626
+ "duration": "Durasi audio adalah {duration_hours} jam ({duration_seconds} detik).",
627
+ "write": "Menggunakan {name} untuk menulis.",
628
+ "write_audio": "Menulis {name} dengan jalur akar:",
629
+ "original_not_valid": "Peringatan: Array sumber asli hampir senyap atau kosong.",
630
+ "shape_audio": "Bentuk data audio sebelum pemrosesan",
631
+ "convert_data": "Tipe data sebelum konversi",
632
+ "original_source_to_int16": "Mengonversi original_source ke int16.",
633
+ "shape_audio_2": "Bentuk data audio yang diinterkalasi",
634
+ "create_audiosegment": "Berhasil membuat AudioSegment.",
635
+ "create_audiosegment_error": "Kesalahan spesifik saat membuat AudioSegment",
636
+ "export_error": "Kesalahan mengekspor file audio",
637
+ "export_success": "Berhasil mengekspor file audio ke",
638
+ "clean": "Menjalankan pengumpulan sampah...",
639
+ "clean_cache": "Membersihkan cache {name}...",
640
+ "del_path": "Menghapus jalur, sumber, dan akar dari file audio input...",
641
+ "not_success": "Proses tidak berhasil: ",
642
+ "resample_error": "Kesalahan selama resampling",
643
+ "shapes": "Bentuk",
644
+ "wav_resolution": "Jenis resolusi",
645
+ "warnings": "Peringatan: Nilai yang sangat agresif terdeteksi",
646
+ "warnings_2": "Peringatan: Nilai NaN atau tak terbatas terdeteksi dalam input gelombang. Bentuk",
647
+ "process_file": "Memproses file... \n",
648
+ "save_instruments": "Menyimpan trek terbalik...",
649
+ "assert": "File audio harus memiliki bentuk yang sama - Campuran: {mixshape}, Instrumen: {instrumentalshape}",
650
+ "rubberband": "Rubberband CLI tidak dapat dieksekusi. Pastikan Rubberband-CLI terinstal.",
651
+ "rate": "Laju harus benar-benar positif",
652
+ "gdown_error": "Tidak dapat mengambil tautan publik untuk file. Anda mungkin perlu mengubah izinnya menjadi 'Siapa saja dengan tautan' atau mungkin sudah ada izin akses yang berlebihan.",
653
+ "to": "Ke:",
654
+ "gdown_value_error": "Jalur atau ID harus ditentukan",
655
+ "missing_url": "URL tidak ada",
656
+ "mac_not_match": "MAC tidak cocok",
657
+ "file_not_access": "File tidak dapat diakses",
658
+ "int_resp==-3": "Permintaan gagal, mencoba lagi",
659
+ "search_separate": "Cari file terpisah...",
660
+ "found_choice": "Ditemukan {choice}",
661
+ "separator==0": "Tidak ada file terpisah yang ditemukan!",
662
+ "select_separate": "Pilih file terpisah",
663
+ "start_app": "Memulai antarmuka...",
664
+ "provide_audio": "Masukkan jalur ke file audio",
665
+ "set_torch_mps": "Atur perangkat Torch ke MPS",
666
+ "googletts": "Konversi teks menggunakan Google",
667
+ "pitch_info_2": "Penyesuaian nada untuk konverter teks-ke-ucapan",
668
+ "waveform": "Gelombang harus memiliki bentuk (# frame, # saluran)",
669
+ "freq_mask_smooth_hz": "freq_mask_smooth_hz harus setidaknya {hz}Hz",
670
+ "time_mask_smooth_ms": "time_mask_smooth_ms harus setidaknya {ms}ms",
671
+ "x": "x harus lebih besar",
672
+ "xn": "xn harus lebih besar",
673
+ "not_found_pid": "Tidak ada proses yang ditemukan!",
674
+ "end_pid": "Proses dihentikan!",
675
+ "not_found_separate_model": "Tidak ada file model pemisahan yang ditemukan!",
676
+ "not_found_pretrained": "Tidak ada file model pra-latih yang ditemukan!",
677
+ "not_found_log": "Tidak ada file log yang ditemukan!",
678
+ "not_found_predictors": "Tidak ada file model prediktor yang ditemukan!",
679
+ "not_found_embedders": "Tidak ada file model penyemat yang ditemukan!",
680
+ "provide_folder": "Harap berikan folder yang valid!",
681
+ "empty_folder": "Folder data kosong!",
682
+ "vocoder": "Vocoder",
683
+ "vocoder_info": "Vocoder menganalisis dan mensintesis sinyal ucapan manusia untuk transformasi suara.\n\nDefault: Opsi ini adalah HiFi-GAN-NSF, kompatibel dengan semua RVC\n\nMRF-HiFi-GAN: Fidelitas lebih tinggi.\n\nRefineGAN: Kualitas suara superior.",
684
+ "code_error": "Kesalahan: Menerima kode status",
685
+ "json_error": "Kesalahan: Tidak dapat mem-parsing respons.",
686
+ "requests_error": "Permintaan gagal: {e}",
687
+ "memory_efficient_training": "Menggunakan pelatihan hemat memori",
688
+ "not_use_pretrain_error_download": "Tidak akan menggunakan model pra-latih karena file tidak ada",
689
+ "provide_file_settings": "Harap berikan file pengaturan preset!",
690
+ "load_presets": "Memuat file preset {presets}",
691
+ "provide_filename_settings": "Harap berikan nama file preset!",
692
+ "choose1": "Harap pilih satu untuk diekspor!",
693
+ "export_settings": "File preset diekspor {name}",
694
+ "use_presets": "Menggunakan file preset",
695
+ "file_preset": "File preset",
696
+ "load_file": "Muat file",
697
+ "export_file": "Ekspor file preset",
698
+ "save_clean": "Simpan pembersihan",
699
+ "save_autotune": "Simpan autotune",
700
+ "save_pitch": "Simpan nada",
701
+ "save_index_2": "Simpan dampak indeks",
702
+ "save_resample": "Simpan resampling",
703
+ "save_filter": "Simpan filter median",
704
+ "save_envelope": "Simpan amplop suara",
705
+ "save_protect": "Simpan perlindungan suara",
706
+ "save_split": "Simpan pemisahan suara",
707
+ "filename_to_save": "Nama file untuk disimpan",
708
+ "upload_presets": "Unggah file preset",
709
+ "stop": "Hentikan proses",
710
+ "stop_separate": "Hentikan Pemisahan Musik",
711
+ "stop_convert": "Hentikan Konversi",
712
+ "stop_create_dataset": "Hentikan Pembuatan Dataset",
713
+ "stop_training": "Hentikan Pelatihan",
714
+ "stop_extract": "Hentikan Pemrosesan Data",
715
+ "stop_preprocess": "Hentikan Ekstraksi Data",
716
+ "not_found_presets": "Tidak ada file preset yang ditemukan di folder!",
717
+ "port": "Port {port} tidak tersedia! Menurunkan port satu...",
718
+ "empty_json": "{file}: Rusak atau kosong",
719
+ "thank": "Terima kasih telah melaporkan masalah, dan mohon maaf atas ketidaknyamanan yang ditimbulkan!",
720
+ "error_read_log": "Terjadi kesalahan saat membaca file log!",
721
+ "error_send": "Terjadi kesalahan saat mengirim laporan! Silakan hubungi saya di Discord: pham_huynh_anh!",
722
+ "report_bugs": "Laporkan Bug",
723
+ "agree_log": "Setuju untuk memberikan semua file log",
724
+ "error_info": "Deskripsi kesalahan",
725
+ "error_info_2": "Berikan informasi lebih lanjut tentang kesalahan",
726
+ "report_bug_info": "Laporkan bug yang ditemui selama penggunaan program",
727
+ "sr_info": "CATATAN: BEBERAPA FORMAT TIDAK MENDUKUNG LAJU DI ATAS 48000",
728
+ "report_info": "Jika memungkinkan, setuju untuk memberikan file log untuk membantu debugging.\n\nJika file log tidak diberikan, harap jelaskan kesalahan secara rinci, termasuk kapan dan di mana itu terjadi.\n\nJika sistem pelaporan ini juga gagal, Anda dapat menghubungi melalui [ISSUE]({github}) atau Discord: `pham_huynh_anh`",
729
+ "default_setting": "Terjadi kesalahan selama pemisahan, mengatur ulang semua pengaturan ke default...",
730
+ "dataset_folder1": "Harap masukkan nama folder data",
731
+ "checkpointing_err": "Parameter model pra-latih seperti laju sampel atau arsitektur tidak cocok dengan model yang dipilih.",
732
+ "start_onnx_export": "Memulai konversi model ke onnx...",
733
+ "convert_model": "Konversi Model",
734
+ "pytorch2onnx": "Mengonversi Model PYTORCH ke Model ONNX",
735
+ "pytorch2onnx_markdown": "Konversi model RVC dari pytorch ke onnx untuk mengoptimalkan konversi audio",
736
+ "error_readfile": "Terjadi kesalahan saat membaca file!",
737
+ "read_sf": "Baca file audio menggunakan soundfile...",
738
+ "read_librosa": "Baca file audio menggunakan librosa karena soundfile tidak didukung...",
739
+ "f0_onnx_mode": "Mode F0 ONNX",
740
+ "f0_onnx_mode_info": "Ekstraksi nada menggunakan model ONNX dapat membantu meningkatkan kecepatan",
741
+ "formantshift": "Pergeseran Nada dan Forman",
742
+ "formant_qfrency": "Frekuensi untuk Pergeseran Forman",
743
+ "formant_timbre": "Timbre untuk Transformasi Forman",
744
+ "time_frames": "Waktu (Frame)",
745
+ "Frequency": "Frekuensi (Hz)",
746
+ "f0_extractor_tab": "Ekstraksi F0",
747
+ "f0_extractor_markdown": "## Ekstraksi Nada",
748
+ "f0_extractor_markdown_2": "Ekstraksi nada F0 dimaksudkan untuk digunakan dalam inferensi konversi audio",
749
+ "start_extract": "Memulai proses ekstraksi...",
750
+ "extract_done": "Proses ekstraksi selesai!",
751
+ "f0_file": "Gunakan file F0 yang sudah diekstrak",
752
+ "upload_f0": "Unggah file F0",
753
+ "f0_file_2": "File F0",
754
+ "clean_f0_file": "Bersihkan file F0",
755
+ "embed_mode": "Mode Penyemat",
756
+ "embed_mode_info": "Ekstraksi penyematan menggunakan model yang berbeda",
757
+ "close": "Aplikasi sedang ditutup...",
758
+ "start_whisper": "Memulai pengenalan suara dengan Whisper...",
759
+ "whisper_done": "Pengenalan suara selesai!",
760
+ "process_audio": "Memproses audio awal...",
761
+ "process_done_start_convert": "Pemrosesan audio selesai! Melanjutkan dengan konversi audio...",
762
+ "convert_with_whisper": "Konversi Audio dengan Whisper",
763
+ "convert_with_whisper_info": "Konversi audio menggunakan model ucapan yang dilatih dengan model Whisper untuk pengenalan suara\n\nWhisper akan mengenali suara yang berbeda kemudian memotong suara individu dan menggunakan model RVC untuk mengonversi segmen tersebut\n\nModel Whisper mungkin tidak bekerja dengan baik yang dapat menyebabkan output aneh",
764
+ "num_spk": "Jumlah suara",
765
+ "num_spk_info": "Jumlah suara dalam audio",
766
+ "model_size": "Ukuran model Whisper",
767
+ "model_size_info": "Ukuran model Whisper\n\nModel besar dapat menghasilkan output aneh",
768
+ "editing": "Penyuntingan",
769
+ "inverting": "Pembalikan",
770
+ "steps": "Langkah",
771
+ "source_prompt": "Prompt Sumber",
772
+ "target_prompt": "Prompt",
773
+ "cfg_scale_src": "Prompt Sumber",
774
+ "cfg_scale_tar": "Prompt Target",
775
+ "t_start": "Tingkat Edit",
776
+ "save_compute": "Edit Efektif",
777
+ "error_edit": "Terjadi kesalahan saat mengedit musik latar {e}",
778
+ "start_edit": "Memulai penyuntingan musik latar {input_path}...",
779
+ "edit_success": "Selesai mengedit soundtrack setelah {time} dengan output {output_path}",
780
+ "audio_editing": "Menyunting Soundtrack",
781
+ "audio_editing_info": "## Menyunting Soundtrack Menggunakan Model Audioldm2",
782
+ "audio_editing_markdown": "Menyunting soundtrack menggunakan model Audioldm2 dapat membantu mengubah jenis instrumen di dalam soundtrack",
783
+ "target_prompt_info": "Jelaskan output edit yang diinginkan",
784
+ "cfg_scale_src_info": "Sejauh mana sumber memengaruhi output. Nilai lebih tinggi mempertahankan lebih banyak karakteristik dari sumber. Nilai lebih rendah memberikan sistem lebih banyak kebebasan untuk mengubah.",
785
+ "cfg_scale_tar_info": "Sejauh mana target memengaruhi hasil akhir. Nilai lebih tinggi memaksa hasil untuk mengikuti karakteristik target. Nilai lebih rendah menyeimbangkan sumber dan target.",
786
+ "audioldm2_model": "Model Audioldm2",
787
+ "audioldm2_model_info": "Pilih model Audioldm2 pilihan Anda\n\nMemuat bobot dan inferensi juga akan memakan waktu lama tergantung pada GPU Anda",
788
+ "source_prompt_info": "Opsional: Jelaskan input audio asli",
789
+ "t_start_info": "Tingkat koreksi yang lebih rendah akan lebih dekat dengan suara asli, lebih tinggi akan menjadi koreksi yang lebih kuat.",
790
+ "steps_label": "Jumlah langkah difusi",
791
+ "steps_info": "Nilai lebih tinggi (misalnya 200) menghasilkan output dengan kualitas lebih tinggi.",
792
+ "title": "Alat konversi dan pelatihan suara dan instrumen berkualitas tinggi dan berkinerja tinggi sederhana untuk orang Vietnam",
793
+ "fp16_not_support": "CPU tidak mendukung fp16 dengan baik, konversi fp16 -> fp32",
794
+ "precision": "Presisi",
795
+ "precision_info": "Presisi inferensi dan pelatihan model\n\nCatatan: CPU Tidak mendukung fp16\n\nUntuk RefineGAN dan MRF HIFIGAN saat mengonversi gunakan fp32 karena fp16 dapat menyebabkan output aneh",
796
+ "update_precision": "Perbarui Presisi",
797
+ "start_update_precision": "Mulai memperbarui presisi",
798
+ "deterministic": "Algoritma deterministik",
799
+ "deterministic_info": "Saat diaktifkan, algoritma yang sangat deterministik digunakan, memastikan bahwa setiap run dari data input yang sama akan menghasilkan hasil yang sama.\n\nSaat dinonaktifkan, algoritma yang lebih optimal mungkin dipilih tetapi mungkin tidak sepenuhnya deterministik, menghasilkan hasil pelatihan yang berbeda antara run.",
800
+ "benchmark": "Algoritma benchmark",
801
+ "benchmark_info": "Saat diaktifkan, ini akan menguji dan memilih algoritma yang paling dioptimalkan untuk perangkat keras dan ukuran tertentu. Ini dapat membantu mempercepat pelatihan.\n\nSaat dinonaktifkan, ini tidak akan melakukan optimasi algoritma ini, yang dapat mengurangi kecepatan tetapi memastikan bahwa setiap run menggunakan algoritma yang sama, yang berguna jika Anda ingin mereproduksi secara tepat.",
802
+ "font": "Font",
803
+ "font_info": "Font antarmuka\n\nKunjungi [Google Font](https://fonts.google.com) untuk memilih font favorit Anda.",
804
+ "change_font": "Ubah Font",
805
+ "f0_unlock": "Buka semua",
806
+ "f0_unlock_info": "Buka semua metode ekstraksi nada",
807
+ "stop_audioldm2": "Hentikan Audioldm2",
808
+ "srt": "File SRT kosong atau rusak!"
809
+ }
assets/languages/ja-JP.json ADDED
@@ -0,0 +1,809 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "set_lang": "表示言語が{lang}に設定されました。",
3
+ "no_support_gpu": "残念ながら、トレーニングをサポートする互換性のあるGPUがありません。",
4
+ "text": "テキスト",
5
+ "upload_success": "ファイル{name}が正常にアップロードされました。",
6
+ "download_url": "リンクからダウンロード",
7
+ "download_from_csv": "CSVモデルリポジトリからダウンロード",
8
+ "search_models": "モデルを検索",
9
+ "upload": "アップロード",
10
+ "option_not_valid": "無効なオプション!",
11
+ "list_model": "モデルリスト",
12
+ "success": "完了!",
13
+ "index": "インデックス",
14
+ "model": "モデル",
15
+ "zip": "圧縮",
16
+ "search": "検索",
17
+ "provide_file": "有効な{filename}ファイルを提供してください!",
18
+ "start": "{start}を開始...",
19
+ "not_found": "{name}が見つかりませんでした。",
20
+ "found": "{results}件の結果が見つかりました!",
21
+ "download_music": "音楽をダウンロード",
22
+ "download": "ダウンロード",
23
+ "provide_url": "URLを提供してください。",
24
+ "provide_name_is_save": "保存するモデル名を提供してください。",
25
+ "not_support_url": "モデルURLがサポートされていません。",
26
+ "error_occurred": "エラーが発生しました:{e}。",
27
+ "not_model": "アップロードしたファイルはモデルファイルではありません!",
28
+ "unable_analyze_model": "モデルを分析できません!",
29
+ "download_pretrain": "事前学習済みモデルをダウンロード中...",
30
+ "provide_pretrain": "事前学習済みモデルのURL{dg}を提供してください。",
31
+ "sr_not_same": "2つのモデルのサンプルレートが同じではありません。",
32
+ "architectures_not_same": "モデルを統合できません。アーキテクチャが同じではありません。",
33
+ "fushion_model": "モデル統合",
34
+ "model_fushion_info": "モデル{name}は{ratio}の比率で{pth_1}と{pth_2}から統合されました。",
35
+ "not_found_create_time": "作成時間が見つかりませんでした。",
36
+ "format_not_valid": "無効な形式。",
37
+ "read_info": "異なるアプリケーションでトレーニングされたモデルは、異なる情報生成したり、読み取り不可能な場合があります!",
38
+ "epoch": "エポック",
39
+ "step": "ステップ",
40
+ "sr": "サンプルレート",
41
+ "f0": "ピッチトレーニング",
42
+ "version": "バージョン",
43
+ "not_f0": "ピッチトレーニングは行われていません",
44
+ "trained_f0": "ピッチトレーニングが行われました",
45
+ "model_info": "モデル名: {model_name}\n\nモデル作成者: {model_author}\n\nエポック: {epochs}\n\nステップ: {steps}\n\nバージョン: {version}\n\nサンプルレート: {sr}\n\nピッチトレーニング: {pitch_guidance}\n\nハッシュ(ID): {model_hash}\n\n作成時間: {creation_date_str}\n\nボコーダー: {vocoder}\n",
46
+ "input_not_valid": "有効な入力を提供してください!",
47
+ "output_not_valid": "有効な出力を提供してください!",
48
+ "apply_effect": "エフェクトを適用",
49
+ "enter_the_text": "音声変換するテキストを入力してください!",
50
+ "choose_voice": "音声を選択してください!",
51
+ "convert": "{name}を変換中...",
52
+ "separator_music": "音楽分離",
53
+ "notfound": "見つかりませんでした",
54
+ "turn_on_use_audio": "分離されたオーディオを使用するには有効にしてください",
55
+ "turn_off_convert_backup": "元の音声を使用するにはバックアップ音声変換を無効にしてください",
56
+ "turn_off_merge_backup": "元の音声を使用するにはバックアップ音声の統合を無効にしてください",
57
+ "not_found_original_vocal": "元のボーカルが見つかりませんでした!",
58
+ "convert_vocal": "音声を変換中...",
59
+ "convert_success": "音声変換が完了しました!",
60
+ "convert_backup": "バックアップ音声を変換中...",
61
+ "convert_backup_success": "バックアップ音声変換が完了しました!",
62
+ "merge_backup": "メイン音声とバックアップ音声を統合中...",
63
+ "merge_success": "統合が完了しました。",
64
+ "is_folder": "入力がフォルダです:フォルダ内のすべてのオーディオファイルを変換中...",
65
+ "not_found_in_folder": "フォルダ内にオーディオファイルが見つかりませんでした!",
66
+ "batch_convert": "バッチ変換中...",
67
+ "batch_convert_success": "バッチ変換が成功しました!",
68
+ "create": "作成",
69
+ "provide_name": "モデル名を提供してください。",
70
+ "not_found_data": "データが見つかりませんでした",
71
+ "not_found_data_preprocess": "処理済みのオーディオデータが見つかりませんでした。再度処��してください。",
72
+ "not_found_data_extract": "抽出されたオーディオデータが見つかりませんでした。再度抽出してください。",
73
+ "provide_pretrained": "事前学習済み{dg}を提供してください。",
74
+ "download_pretrained": "事前学習済み{dg}{rvc_version}オリジナルをダウンロード",
75
+ "not_found_pretrain": "事前学習済み{dg}が見つかりませんでした",
76
+ "not_use_pretrain": "事前学習済みモデルは使用されません",
77
+ "training": "トレーニング",
78
+ "rick_roll": "リックロールされたい場合はこちらをクリック :) ---> [RickRoll]({rickroll})",
79
+ "terms_of_use": "**プロジェクトを非倫理的、違法、または個人や組織に有害な目的で使用しないでください...**",
80
+ "exemption": "**ユーザーが規約を守らない、または違反した場合、契約、過失、その他の原因によるソフトウェアの使用や関連する取引に起因する、またはそれに関連する請求、損害、責任について一切責任を負いません。**",
81
+ "separator_tab": "音楽分離",
82
+ "4_part": "シンプルな音楽分離システムは、楽器、ボーカル、メインのボーカル、バックアップボーカルの4つの部分に分離できます",
83
+ "clear_audio": "クリーンオーディオ",
84
+ "separator_backing": "バックアップボーカルを分離",
85
+ "denoise_mdx": "MDXノイズ除去分離",
86
+ "use_mdx": "MDXを使用",
87
+ "dereveb_audio": "ボーカルのリバーブを除去",
88
+ "dereveb_backing": "バックアップのリバーブを除去",
89
+ "separator_model": "音楽分離モデル",
90
+ "separator_backing_model": "バックアップ分離モデル",
91
+ "shift": "シフト",
92
+ "shift_info": "高いほど品質は向上しますが、遅くなり、より多くのリソースを使用します",
93
+ "segments_size": "セグメントサイズ",
94
+ "segments_size_info": "高いほど品質は向上しますが、より多くのリソースを使用します",
95
+ "batch_size": "バッチサイズ",
96
+ "batch_size_info": "1つのトレーニングサイクルで同時に処理されるサンプルの数。高いとメモリオーバーフローが発生する可能性があります",
97
+ "mdx_batch_size_info": "一度に処理されるサンプルの数。バッチ処理は計算を最適化します。大きなバッチはメモリオーバーフローを引き起こす可能性があり、小さなバッチはリソース効率を下げます",
98
+ "overlap": "オーバーラップ",
99
+ "overlap_info": "予測ウィンドウ間のオーバーラップ量",
100
+ "export_format": "エクスポート形式",
101
+ "export_info": "オーディオファイルをエクスポートする形式",
102
+ "output_separator": "分離された出力",
103
+ "hop_length_info": "変換を行う際の時間転送ウィンドウを分析します。詳細な値はコンパクトですが、より多くの計算が必要です",
104
+ "drop_audio": "ここにオーディオをドロップ",
105
+ "drop_text": "ここにテキストファイルをドロップ",
106
+ "use_url": "YouTubeリンク",
107
+ "url_audio": "オーディオリンク",
108
+ "downloads": "ダウンロード",
109
+ "clean_strength": "オーディオクリーニング強度",
110
+ "clean_strength_info": "エクスポート中にボーカルをフィルタリングするためのオーディオクリーナーの強度",
111
+ "input_output": "オーディオ入力、出力",
112
+ "audio_path": "入力オーディオパス",
113
+ "refesh": "リフレッシュ",
114
+ "output_folder": "出力オーディオフォルダパス",
115
+ "output_folder_info": "オーディオが出力されるフォルダパスを入力",
116
+ "input_audio": "オーディオ入力",
117
+ "instruments": "楽器",
118
+ "original_vocal": "元のボーカル",
119
+ "main_vocal": "メインボーカル",
120
+ "backing_vocal": "バックアップボーカル",
121
+ "convert_audio": "オーディオ変換",
122
+ "convert_info": "トレーニング済みの音声モデルを使用してオーディオを変換",
123
+ "autotune": "オートチューン",
124
+ "use_audio": "分離されたオーディオを使用",
125
+ "convert_original": "元の音声を変換",
126
+ "convert_backing": "バックアップ音声を変換",
127
+ "not_merge_backing": "バックアップ音声を統合しない",
128
+ "merge_instruments": "楽器を統合",
129
+ "pitch": "ピッチ",
130
+ "pitch_info": "推奨:男性の声を女性に、またはその逆に変更するには12に設定",
131
+ "model_accordion": "モデルとインデックス",
132
+ "model_name": "モデルファイル",
133
+ "index_path": "インデックスファイル",
134
+ "index_strength": "インデックス強度",
135
+ "index_strength_info": "値が高いほど強度が増します。ただし、低い値はオーディオの人工的な効果を減らす可能性があります",
136
+ "output_path": "オーディオ出��パス",
137
+ "output_path_info": "出力パスを入力(.wav形式のままにしてください。変換中に自動修正されます)",
138
+ "setting": "一般設定",
139
+ "f0_method": "抽出方法",
140
+ "f0_method_info": "データ抽出に使用される方法",
141
+ "f0_method_hybrid": "ハイブリッド抽出方法",
142
+ "f0_method_hybrid_info": "2つ以上の異なる抽出タイプの組み合わせ",
143
+ "hubert_model": "埋め込みモデル",
144
+ "hubert_info": "埋め込みを補助する事前学習済みモデル",
145
+ "modelname": "モデル名",
146
+ "modelname_info": "独自のモデルがある場合、それをアップロードし、ここに名前を入力してください",
147
+ "split_audio": "オーディオを分割",
148
+ "autotune_rate": "オートチューンレート",
149
+ "autotune_rate_info": "オートチューンの調整レベル",
150
+ "resample": "リサンプル",
151
+ "resample_info": "最終サンプルレートへのリサンプル後処理。0はリサンプルなし。注:一部の形式は48000を超える速度をサポートしていません",
152
+ "filter_radius": "フィルタ半径",
153
+ "filter_radius_info": "3より大きい場合、メジアンフィルタリングが適用されます。値はフィルタ半径を表し、呼吸音やノイズを軽減できます。",
154
+ "volume_envelope": "ボリュームエンベロープ",
155
+ "volume_envelope_info": "入力ボリュームエンベロープを使用して出力ボリュームエンベロープを置き換えるか、ミックスします。1に近いほど出力エンベロープが使用されます",
156
+ "protect": "子音保護",
157
+ "protect_info": "明確な子音や呼吸音を保護し、オーディオの破損やその他のアーティファクトを防ぎます。この値を増やすと包括的な保護が得られます。減らすと保護が減少し、インデックス効果も最小限に抑えられます",
158
+ "output_convert": "変換されたオーディオ",
159
+ "main_convert": "メインボイスを変換",
160
+ "main_or_backing": "メインボイス + バックアップボイス",
161
+ "voice_or_instruments": "ボイス + 楽器",
162
+ "convert_text": "テキスト変換",
163
+ "convert_text_markdown": "## テキストを音声に変換",
164
+ "convert_text_markdown_2": "トレーニング済みの音声モデルを使用してテキストを音声に変換し、読み上げます",
165
+ "input_txt": "テキストファイル(.txt)からデータを入力",
166
+ "text_to_speech": "読み上げるテキスト",
167
+ "voice_speed": "読み上げ速度",
168
+ "voice_speed_info": "音声の速度",
169
+ "tts_1": "1. テキストを音声に変換",
170
+ "tts_2": "2. 音声変換",
171
+ "voice": "国ごとの音声",
172
+ "output_tts": "音声出力パス",
173
+ "output_tts_convert": "変換された音声出力パス",
174
+ "tts_output": "出力パスを入力",
175
+ "output_tts_markdown": "未変換および変換されたオーディオ",
176
+ "output_text_to_speech": "テキストから音声への変換で生成された音声",
177
+ "output_file_tts_convert": "モデルを使用して変換された音声",
178
+ "output_audio": "オーディオ出力",
179
+ "provide_output": "出力パスを入力",
180
+ "audio_effects": "オーディオエフェクト",
181
+ "apply_audio_effects": "## 追加のオーディオエフェクトを適用",
182
+ "audio_effects_edit": "オーディオにエフェクトを追加",
183
+ "reverb": "リバーブエフェクト",
184
+ "chorus": "コーラスエフェクト",
185
+ "delay": "ディレイエフェクト",
186
+ "more_option": "追加オプション",
187
+ "phaser": "フェイザーエフェクト",
188
+ "compressor": "コンプレッサーエフェクト",
189
+ "apply": "適用",
190
+ "reverb_freeze": "フリーズモード",
191
+ "reverb_freeze_info": "このモードを有効にすると、連続したエコーエフェクトが作成されます",
192
+ "room_size": "部屋のサイズ",
193
+ "room_size_info": "リバーブを作成するために部屋の空間を調整",
194
+ "damping": "ダンピング",
195
+ "damping_info": "リバーブの量を制御するために吸収レベルを調整",
196
+ "wet_level": "リバーブ信号レベル",
197
+ "wet_level_info": "リバーブ信号エフェクトのレベルを調整",
198
+ "dry_level": "オリジナル信号レベル",
199
+ "dry_level_info": "エフェクトなしの信号のレベルを調整",
200
+ "width": "オーディオ幅",
201
+ "width_info": "オーディオ空間の幅を調整",
202
+ "chorus_depth": "コーラス深度",
203
+ "chorus_depth_info": "より広いサウンドを作成するためにコーラスの強度を調整",
204
+ "chorus_rate_hz": "周波数",
205
+ "chorus_rate_hz_info": "コーラスエフェクトの振動速度を調整",
206
+ "chorus_mix": "信号ミックス",
207
+ "chorus_mix_info": "オリジナルと処理された信号のミックスレベルを調整",
208
+ "chorus_centre_delay_ms": "センター遅延(ms)",
209
+ "chorus_centre_delay_ms_info": "コーラスエフェクトを作成するためのステレオチャンネル間の遅延時間",
210
+ "chorus_feedback": "フィードバック",
211
+ "chorus_feedback_info": "オリジナル信号にフィードバックされるエフェクト信号の量を調整",
212
+ "delay_seconds": "ディレイ時間",
213
+ "delay_seconds_info": "オリジナルと処理された信号のディレイ時間を調整",
214
+ "delay_feedback": "ディレイフィードバック",
215
+ "delay_feedback_info": "繰り返しエフェクトを作成するフィードバック信号の量を調整",
216
+ "delay_mix": "ディレイ信号ミックス",
217
+ "delay_mix_info": "オリジナルと遅延信号のミックスレベルを調整",
218
+ "fade": "フェードエフェクト",
219
+ "bass_or_treble": "バスとトレブル",
220
+ "limiter": "閾値リミッター",
221
+ "distortion": "歪みエフェクト",
222
+ "gain": "オーディオゲイン",
223
+ "bitcrush": "ビットリダクションエフェクト",
224
+ "clipping": "クリッピングエフェクト",
225
+ "fade_in": "フェードインエフェクト(ms)",
226
+ "fade_in_info": "オーディオが0から通常レベルに徐々に増加する時間",
227
+ "fade_out": "フェードアウトエフェクト(ms)",
228
+ "fade_out_info": "音が通常からゼロにフェードする時間",
229
+ "bass_boost": "バスブーストレベル(dB)",
230
+ "bass_boost_info": "オーディオトラックのバスブーストの量",
231
+ "bass_frequency": "ローパスフィルターカットオフ周波数(Hz)",
232
+ "bass_frequency_info": "周波数が削減されます。低周波数はバスをより明確にします",
233
+ "treble_boost": "トレブルブーストレベル(dB)",
234
+ "treble_boost_info": "オーディオトラックの高音強化レベル",
235
+ "treble_frequency": "ハイパスフィルターカットオフ周波数(Hz)",
236
+ "treble_frequency_info": "周波数がフィルタリングされます。高い周波数ほど高い音が保持されます。",
237
+ "limiter_threashold_db": "リミッター閾値",
238
+ "limiter_threashold_db_info": "オーディオの最大レベルを制限して閾値を超えないようにします",
239
+ "limiter_release_ms": "リリース時間",
240
+ "limiter_release_ms_info": "制限された後にオーディオが戻る時間(ミリ秒)",
241
+ "distortion_info": "ノイズ効果を作成するために歪みのレベルを調整",
242
+ "gain_info": "信号の音量レベルを調整",
243
+ "clipping_threashold_db": "クリッピング閾値",
244
+ "clipping_threashold_db_info": "閾値を超える信号をトリミングし、歪んだ音を作成",
245
+ "bitcrush_bit_depth": "ビット深度",
246
+ "bitcrush_bit_depth_info": "ビット深度を下げてオーディオ品質を減らし、歪み効果を作成",
247
+ "phaser_depth": "フェイザー深度",
248
+ "phaser_depth_info": "エフェクトの深度を調整し、その強度に影響",
249
+ "phaser_rate_hz": "周波数",
250
+ "phaser_rate_hz_info": "フェイザーエフェクトの周波数を調整",
251
+ "phaser_mix": "信号ミックス",
252
+ "phaser_mix_info": "オリジナルと処理された信号のミックスレベルを調整",
253
+ "phaser_centre_frequency_hz": "センター周波数",
254
+ "phaser_centre_frequency_hz_info": "フェイザーエフェクトの中心周波数、調整される周波数に影響",
255
+ "phaser_feedback": "フィードバック",
256
+ "phaser_feedback_info": "エフェクトのフィードバックレベルを調整し、より強いまたは軽いフェイザーの感触を作成",
257
+ "compressor_threashold_db": "コンプレッサー閾値",
258
+ "compressor_threashold_db_info": "オーディオが圧縮される閾値レベル",
259
+ "compressor_ratio": "圧縮比率",
260
+ "compressor_ratio_info": "閾値を超えた場合のオーディオ圧縮レベルを調整",
261
+ "compressor_attack_ms": "アタック時間(ms)",
262
+ "compressor_attack_ms_info": "オーディオが閾値を超えた後に圧縮が効果を発揮し始める時間",
263
+ "compressor_release_ms": "リリース時間",
264
+ "compressor_release_ms_info": "圧縮された後にオーディオが通常に戻る時間",
265
+ "create_dataset_url": "オーディオリンク(複数のリンクの場合はカンマで区切る)",
266
+ "createdataset": "データセット作成",
267
+ "create_dataset_markdown": "## YouTubeからトレーニングデータセットを作成",
268
+ "create_dataset_markdown_2": "YouTubeリンクを使用してトレーニングデータセットを処理および作成",
269
+ "denoise": "ノイズ除去",
270
+ "skip": "スキップ",
271
+ "model_ver": "音声分離バージョン",
272
+ "model_ver_info": "ボーカル分離用のモデルバージョン",
273
+ "create_dataset_info": "データセット作成情報",
274
+ "output_data": "データセット出力",
275
+ "output_data_info": "作成後の出力データ",
276
+ "skip_start": "開始をスキップ",
277
+ "skip_start_info": "オーディオの最初の数秒をスキップ。複数のオーディオの場合はカンマで区切る",
278
+ "skip_end": "終了をスキップ",
279
+ "skip_end_info": "オーディオの最後の数秒をスキップ。複数のオーディオの場合はカンマで区切る",
280
+ "training_model": "モデルをトレーニング",
281
+ "training_markdown": "音声データのセットで音声モデルをトレーニングおよび構築",
282
+ "training_model_name": "トレーニング中のモデル名(特殊文字やスペースは避ける)",
283
+ "sample_rate": "サンプルレート",
284
+ "sample_rate_info": "モデルのサンプルレート",
285
+ "training_version": "モデルバージョン",
286
+ "training_version_info": "トレーニング中のモデルバージョン",
287
+ "training_pitch": "ピッチガイダンス",
288
+ "upload_dataset": "データセットをアップロード",
289
+ "preprocess_effect": "後処理",
290
+ "clear_dataset": "データセットをクリア",
291
+ "preprocess_info": "前処理情報",
292
+ "preprocess_button": "1. 処理",
293
+ "extract_button": "2. 抽出",
294
+ "extract_info": "データ抽出情報",
295
+ "total_epoch": "総エポック",
296
+ "total_epoch_info": "総トレーニングエポック",
297
+ "save_epoch": "保存頻度",
298
+ "save_epoch_info": "再トレーニングを可能にするためにトレーニング中にモデルを保存する頻度",
299
+ "create_index": "インデックス作成",
300
+ "index_algorithm": "インデックスアルゴリズム",
301
+ "index_algorithm_info": "インデックス作成のためのアルゴリズム",
302
+ "custom_dataset": "カスタムデータセットフォルダ",
303
+ "custom_dataset_info": "トレーニングデータ用のカスタムデータセットフォルダ",
304
+ "overtraining_detector": "過学習検出器",
305
+ "overtraining_detector_info": "モデルトレーニング中の過学習をチェック",
306
+ "cleanup_training": "クリーンアップ",
307
+ "cleanup_training_info": "モデルを最初から再トレーニングする必要がある場合にのみ有効にしてください。",
308
+ "cache_in_gpu": "GPUにキャッシュ",
309
+ "cache_in_gpu_info": "モデルをGPUキャッシュメモリに保存",
310
+ "dataset_folder": "データセットを含むフォルダ",
311
+ "threshold": "過学習閾値",
312
+ "setting_cpu_gpu": "CPU/GPU設定",
313
+ "gpu_number": "使用するGPUの数",
314
+ "gpu_number_info": "トレーニング中に使用するGPUの数",
315
+ "save_only_latest": "最新のみ保存",
316
+ "save_only_latest_info": "最新のDおよびGモデルを保存",
317
+ "save_every_weights": "すべてのモデルを保存",
318
+ "save_every_weights_info": "各エポック後にすべてのモデルを保存",
319
+ "gpu_info": "GPU情報",
320
+ "gpu_info_2": "トレーニング中に使用されるGPUの情報",
321
+ "cpu_core": "利用可能なCPUコアの数",
322
+ "cpu_core_info": "トレーニング中に使用されるCPUコアの数",
323
+ "not_use_pretrain_2": "事前トレーニングを使用しない",
324
+ "not_use_pretrain_info": "事前学習済みモデルを使用しない",
325
+ "custom_pretrain": "カスタム事前トレーニング",
326
+ "custom_pretrain_info": "事前トレーニング設定をカスタマイズ",
327
+ "pretrain_file": "事前学習済みモデルファイル{dg}",
328
+ "train_info": "トレーニング情報",
329
+ "export_model": "5. モデルをエクスポート",
330
+ "zip_model": "2. モデルを圧縮",
331
+ "output_zip": "圧縮後の出力ファイル",
332
+ "model_path": "モデルパス",
333
+ "model_ratio": "モデル比率",
334
+ "model_ratio_info": "一方に調整すると、モデルはその側に似るようになります",
335
+ "output_model_path": "モデル出力パス",
336
+ "fushion": "モデル統合",
337
+ "fushion_markdown": "## 2つのモデルを統合",
338
+ "fushion_markdown_2": "2つの音声モデルを1つのモデルに結合",
339
+ "read_model": "情報を読み込む",
340
+ "read_model_markdown": "## モデル情報を読み込む",
341
+ "read_model_markdown_2": "モデル内に記録された情報を取得",
342
+ "drop_model": "ここにモデルをドロップ",
343
+ "readmodel": "モデルを読み込む",
344
+ "model_path_info": "モデルファイルのパスを入力",
345
+ "modelinfo": "モデル情報",
346
+ "download_markdown": "## モデルをダウンロード",
347
+ "download_markdown_2": "音声モデル、事前学習済みモデル、埋め込みモデルをダウンロード",
348
+ "model_download": "音声モデルをダウンロード",
349
+ "model_url": "モデルへのリンク",
350
+ "15s": "約15秒お待ちください。システムは自動的に再起動します!",
351
+ "model_download_select": "モデルダウンロード方法を選択",
352
+ "model_warehouse": "モデルリポジトリ",
353
+ "get_model": "モデルを取得",
354
+ "name_to_search": "検索する名前",
355
+ "search_2": "検索",
356
+ "select_download_model": "検索し��モデルを選択(クリックして選択)",
357
+ "download_pretrained_2": "事前学習済みモデルをダウンロード",
358
+ "only_huggingface": "huggingface.coのみサポート",
359
+ "pretrained_url": "事前学習済みモデルリンク{dg}",
360
+ "select_pretrain": "事前学習済みモデルを選択",
361
+ "select_pretrain_info": "ダウンロードする事前学習済みモデルを選択",
362
+ "pretrain_sr": "モデルサンプルレート",
363
+ "drop_pretrain": "ここに事前学習済みモデル{dg}をドロップ",
364
+ "settings": "設定",
365
+ "settings_markdown": "## 追加設定",
366
+ "settings_markdown_2": "プロジェクトの追加機能をカスタマイズ",
367
+ "lang": "言語",
368
+ "lang_restart": "プロジェクトの表示言語(言語を変更すると、システムは15秒後に自動的に再起動して更新します)",
369
+ "change_lang": "言語を変更",
370
+ "theme": "テーマ",
371
+ "theme_restart": "インターフェースに表示されるテーマタイプ(テーマを変更すると、システムは15秒後に自動的に再起動して更新します)",
372
+ "theme_button": "テーマを変更",
373
+ "change_light_dark": "ライト/ダークモードを切り替え",
374
+ "tensorboard_url": "Tensorboard URL",
375
+ "errors_loading_audio": "オーディオの読み込みエラー:{e}",
376
+ "apply_error": "エフェクト適用中にエラーが発生しました:{e}",
377
+ "indexpath": "インデックスパス",
378
+ "split_total": "分割された総パーツ",
379
+ "process_audio_error": "オーディオ処理中にエラーが発生しました",
380
+ "merge_error": "オーディオ統合中にエラーが発生しました",
381
+ "not_found_convert_file": "処理済みファイルが見つかりませんでした",
382
+ "convert_batch": "バッチ変換中...",
383
+ "found_audio": "変換用のオーディオファイル{audio_files}が見つかりました。",
384
+ "not_found_audio": "オーディオファイルが見つかりませんでした!",
385
+ "error_convert": "オーディオ変換中にエラーが発生しました:{e}",
386
+ "convert_batch_success": "バッチ変換が{elapsed_time}秒で正常に完了しました。{output_path}",
387
+ "convert_audio_success": "ファイル{input_path}が{elapsed_time}秒で正常に変換されました。{output_path}",
388
+ "hybrid_methods": "メソッド{methods}を使用してf0ピッチを推定",
389
+ "method_not_valid": "無効なメソッド",
390
+ "read_faiss_index_error": "FAISSインデックスの読み込み中にエラーが発生しました:{e}",
391
+ "read_model_error": "モデルの読み込みに失敗しました:{e}",
392
+ "starting_download": "ダウンロードを開始",
393
+ "version_not_valid": "無効な音声分離バージョン",
394
+ "skip<audio": "スキップ時間がオーディオファイルの長さより短いためスキップできません",
395
+ "skip>audio": "スキップ時間がオーディオファイルの長さより長いためスキップできません",
396
+ "=<0": "スキップ時間が0以下でスキップされました",
397
+ "skip_warning": "スキップ時間({seconds}秒)がオーディオの長さ({total_duration}秒)を超えています。スキップします。",
398
+ "download_success": "ダウンロードが正常に完了しました",
399
+ "create_dataset_error": "トレーニングデータセット作成中にエラーが発生しました",
400
+ "create_dataset_success": "トレーニングデータセットの作成が{elapsed_time}秒で完了しました",
401
+ "skip_start_audio": "オーディオの開始を正常にスキップ:{input_file}",
402
+ "skip_end_audio": "オーディオの終了を正常にスキップ:{input_file}",
403
+ "merge_audio": "オーディオを含むすべてのパーツを統合",
404
+ "separator_process": "ボーカルを分離中:{input}...",
405
+ "not_found_main_vocal": "メインボーカルが見つかりませんでした!",
406
+ "not_found_backing_vocal": "バックアップボーカルが見つかりませんでした!",
407
+ "not_found_instruments": "楽器が見つかりませんでした",
408
+ "merge_instruments_process": "ボーカルと楽器を統合中...",
409
+ "dereverb": "ボーカルのリバーブを除去",
410
+ "dereverb_success": "ボーカルのリバーブ除去に成功しました",
411
+ "save_index": "インデックスファイルが保存されました",
412
+ "create_index_error": "インデックス作成中にエラーが発生しました",
413
+ "sr_not_16000": "サンプルレートは16000でなければなりません",
414
+ "gpu_not_valid": "無効なGPUインデックス。CPUに切り替えています。",
415
+ "extract_file_error": "ファイル抽出中にエラーが発生しました",
416
+ "extract_f0_method": "{num_processes}コアを使用して{f0_method}メソッドでピッチ抽出を開始...",
417
+ "extract_f0": "ピッチ抽出",
418
+ "extract_f0_success": "ピッチ抽出が{elapsed_time}秒で完了しました。",
419
+ "NaN": "NaN値が含まれており、無視されます。",
420
+ "start_extract_hubert": "埋め込み抽出を開始...",
421
+ "not_found_audio_file": "オーディオファイルが見つかりませんでした。正しいオーディオを提供してください。",
422
+ "process_error": "処理中にエラーが発生しました",
423
+ "extract_hubert_success": "埋め込み抽出が{elapsed_time}秒で完了しました。",
424
+ "export_process": "モデルパス",
425
+ "extract_error": "データ抽出中にエラーが発生しました",
426
+ "extract_success": "データ抽出に成功しました",
427
+ "min_length>=min_interval>=hop_size": "min_lengthはmin_intervalおよびhop_size以上でなければなりません",
428
+ "max_sil_kept>=hop_size": "max_sil_keptはhop_size以上でなければなりません",
429
+ "start_preprocess": "{num_processes}コアでデータ前処理を開始...",
430
+ "not_integer": "音声IDフォルダは整数でなければなりません。代わりに取得したのは",
431
+ "preprocess_success": "前処理が{elapsed_time}秒で完了しました。",
432
+ "preprocess_model_success": "モデルのデータ前処理が正常に完了しました",
433
+ "turn_on_dereverb": "バックアップボーカルのリバーブ除去には、リバーブ除去を有効にする必要があります",
434
+ "turn_on_separator_backing": "バックアップボーカル分離には、ボーカル分離を有効にする必要があります",
435
+ "backing_model_ver": "バックアップボーカル分離モデルバージョン",
436
+ "clean_audio_success": "オーディオが正常にクリーニングされました!",
437
+ "separator_error": "音楽分離中にエラーが発生しました",
438
+ "separator_success": "音楽分離が{elapsed_time}秒で完了しました",
439
+ "separator_process_2": "音楽分離を処理中",
440
+ "separator_success_2": "音楽分離に成功しました!",
441
+ "separator_process_backing": "バックアップボーカル分離を処理中",
442
+ "separator_process_backing_success": "バックアップボーカル分離に成功しました!",
443
+ "process_original": "元のボーカルのリバーブ除去を処理中...",
444
+ "process_original_success": "元のボーカルのリバーブ除去に成功しました!",
445
+ "process_main": "メインボーカルのリバーブ除去を処理中...",
446
+ "process_main_success": "メインボーカルのリバーブ除去に成功しました!",
447
+ "process_backing": "バックアップボーカルのリバーブ除去を処理中...",
448
+ "process_backing_success": "バックアップボーカルのリバーブ除去に成功しました!",
449
+ "save_every_epoch": "エポックごとに保存:",
450
+ "total_e": "総エポック:",
451
+ "dorg": "事前学習済みG:{pretrainG} | 事前学習済みD:{pretrainD}",
452
+ "training_f0": "ピッチガイダンス",
453
+ "not_gpu": "GPUが検出されませんでした。CPUに切り替えます(推奨されません)",
454
+ "not_found_checkpoint": "チェックポイントファイルが見つかりませんでした:{checkpoint_path}",
455
+ "save_checkpoint": "チェックポイント'{checkpoint_path}'を再読み込み(エポック{checkpoint_dict})",
456
+ "save_model": "モデル'{checkpoint_path}'を保存(エポック{iteration})",
457
+ "sr_does_not_match": "{sample_rate}サンプルレートがターゲット{sample_rate2}サンプルレートと一致しません",
458
+ "spec_error": "{spec_filename}から仕様を取得中にエラーが発生しました:{e}",
459
+ "time_or_speed_training": "時間={current_time} | トレーニング速度={elapsed_time_str}",
460
+ "savemodel": "モデル'{model_dir}'を保存(エポック{epoch}およびステップ{step})",
461
+ "model_author": "モデルのクレジット:{model_author}",
462
+ "unregistered": "モデルが登録されていません",
463
+ "not_author": "モデルにクレジットがありません",
464
+ "training_author": "モデル作成者名",
465
+ "training_author_info": "モデルにクレジットを付けるために、ここに名前を入力してください",
466
+ "extract_model_error": "モデル抽出中にエラーが発生しました",
467
+ "start_training": "トレーニングを開始",
468
+ "import_pretrain": "事前学習済みモデル({dg})'{pretrain}'を読み込みました",
469
+ "not_using_pretrain": "事前学習済みモデル({dg})は使用されません",
470
+ "training_warning": "警告:生成された損失が次のエポックの損失下限閾値より低くなっています。",
471
+ "overtraining_find": "エポック{epoch}で過学習が検出されました。スムーズジェネレータ損失{smoothed_value_gen}、スムーズディスクリミネータ損失{smoothed_value_disc}",
472
+ "best_epoch": "新しい最高エポック{epoch}:スムーズジェネレータ損失{smoothed_value_gen}、スムーズディスクリミネータ損失{smoothed_value_disc}",
473
+ "success_training": "{epoch}エポック、{global_step}ステップ、総ジェネレータ損失{loss_gen_all}でトレーニングが完了しました。",
474
+ "training_info": "最低ジェネレータ損失:{lowest_value_rounded}(エポック{lowest_value_epoch}、ステップ{lowest_value_step})",
475
+ "model_training_info": "{model_name} | エポック={epoch} | ステップ={global_step} | {epoch_recorder} | 最低値={lowest_value_rounded}(エポック{lowest_value_epoch}、ステップ{lowest_value_step}) | 過学習までの残りエポック:g/合計:{remaining_epochs_gen} d/合計:{remaining_epochs_disc} | スムーズジェネレータ損失={smoothed_value_gen} | スムーズディスクリミネータ損失={smoothed_value_disc}",
476
+ "model_training_info_2": "{model_name} | エポック={epoch} | ステップ={global_step} | {epoch_recorder} | 最低値={lowest_value_rounded}(エポック{lowest_value_epoch}、ステップ{lowest_value_step})",
477
+ "model_training_info_3": "{model_name} | エポック={epoch} | ステップ={global_step} | {epoch_recorder}",
478
+ "training_error": "モデルトレーニング中にエラーが発生しました:",
479
+ "separator_info": "出力パス:{output_dir}、出力形式:{output_format}で初期化",
480
+ "output_dir_is_none": "出力フォルダが指定されていません。現在の作業ディレクトリを使用します。",
481
+ ">0or=1": "正規化閾値は0より大きく、1以下でなければなりません。",
482
+ "output_single": "単一ルート出力が要求されました。1つのファイル({output_single_stem})のみが書き込まれます",
483
+ "step2": "2番目のステップは波形の代わりにスペクトログラムを使用して反転されます。これにより品質が向上する可能性がありますが、若干遅くなります。",
484
+ "name_ver": "バージョン{name}",
485
+ "os": "オペレーティングシステム",
486
+ "platform_info": "システム:{system_info} 名前:{node} リリース:{release} マシン:{machine} プロセッサ:{processor}",
487
+ "none_ffmpeg": "FFmpegがインストールされていません。このパッケージを使用するにはFFmpegをインストールしてください。",
488
+ "install_onnx": "ONNX Runtimeパッケージ{pu}がインストールされました。バージョン",
489
+ "running_in_cpu": "ハードウェアアクセラレーションを構成できません。CPUモードで実行します",
490
+ "running_in_cuda": "TorchでCUDAが利用可能です。TorchデバイスをCUDAに設定",
491
+ "onnx_have": "ONNXruntimeが利用可能です{have}、アクセラレーションを有効にします",
492
+ "onnx_not_have": "ONNXruntimeで{have}が利用できません。アクセラレーションは有効になりません",
493
+ "python_not_install": "Pythonパッケージ:{package_name}がインストールされていません",
494
+ "hash": "モデルファイル{model_path}のハッシュを計算中",
495
+ "ioerror": "ハッシュを計算するためにモデルファイルを-10 MBシークまたは読み込み中にIOErrorが発生しました:{e}",
496
+ "cancel_download": "ファイルが{output_path}に既に存在するため、ダウンロードをスキップします",
497
+ "download_model": "{url}から{output_path}にファイルをダウンロード中。タイムアウトは300秒",
498
+ "download_error": "{url}からのファイルダウンロードに失敗しました。レスポンスコード:{status_code}",
499
+ "vip_model": "モデル:'{model_friendly_name}'は、Anjok07が有料サブスクライバー専用に意図したプレミアムモデルです。",
500
+ "vip_print": "こんにちは、サブスクライブしていない場合、UVRの開発者であるAnjok07をサポートするためにこちらでサブスクライブを検討してください:https://patreon.com/uvr",
501
+ "search_model": "サポートされているモデルのリストでモデル{model_filename}を検索中",
502
+ "load_download_json": "ダウンロードモデルリストが読み込まれました",
503
+ "single_model": "単一モデルファイルが特定されました:{model_friendly_name}",
504
+ "not_found_model": "UVRリポジトリでモデルが見つかりませんでした。オーディオモデル分離リポジトリからダウンロードを試みます...",
505
+ "single_model_path": "単一モデルファイルのパスを返します:{model_path}",
506
+ "find_model": "入力ファイル名{model_filename}がマルチファイルモデルで発見されました:{model_friendly_name}",
507
+ "find_models": "マルチファイルモデルが特定されました:{model_friendly_name}、ファイルをダウンロードするために反復処理します",
508
+ "find_path": "構成ペアのダウンロードパスを特定しようとしています",
509
+ "not_found_model_warehouse": "UVRリポジトリでモデルが見つかりませんでした。オーディオモデ��分離リポジトリからダウンロードを試みます...",
510
+ "yaml_warning": "指定したモデル名{model_filename}は、モデルファイルではなくモデル構成ファイルです。",
511
+ "yaml_warning_2": "この構成ファイルに一致するモデルを見つけました:{config_key}、そのモデルファイルを使用します。",
512
+ "yaml_warning_3": "将来の混乱や一貫性のない動作を避けるために、実際のモデルファイル名を指定してください。",
513
+ "yaml_debug": "UVRリポジトリで構成YAMLモデルファイルが見つかりませんでした。オーディオモデル分離リポジトリからダウンロードを試みます...",
514
+ "download_model_friendly": "モデル{model_friendly_name}のすべてのファイルがダウンロードされました。元のパス{model_path}を返します",
515
+ "not_found_model_2": "サポートされているファイルでモデルファイル{model_filename}が見つかりませんでした",
516
+ "load_yaml": "パス{model_data_yaml_filepath}のYAMLからモデルデータを読み込み中",
517
+ "load_yaml_2": "YAMLファイルからモデルデータが読み込まれました:{model_data}",
518
+ "hash_md5": "UVRデータからモデルパラメータを特定するためにモデルファイルのMD5ハッシュを計算中...",
519
+ "model_hash": "モデル{model_path}のハッシュは{model_hash}です",
520
+ "mdx_data": "MDXモデルデータパスが{mdx_model_data_path}に設定されました",
521
+ "load_mdx": "UVRモデルデータファイルからMDXモデルパラメータを読み込み中...",
522
+ "model_not_support": "サポートされていないモデルファイル:MDXボールトのUVRモデルデータでMD5ハッシュ{model_hash}のパラメータが見つかりませんでした。",
523
+ "uvr_json": "ハッシュ{model_hash}のUVR JSONからモデルデータが読み込まれました:{model_data}",
524
+ "loading_model": "モデル{model_filename}を読み込み中...",
525
+ "download_model_friendly_2": "ダウンロードされたモデル、フレンドリー名:{model_friendly_name}、モデルパス:{model_path}",
526
+ "model_type_not_support": "サポートされていないモデルタイプ:{model_type}",
527
+ "demucs_not_support_python<3.10": "DemucsモデルにはPythonバージョン3.10以上が必要です。",
528
+ "import_module": "モデルタイプのモジュールをインポート中",
529
+ "initialization": "モデルタイプの分離クラスの初期化",
530
+ "loading_model_success": "モデル読み込みが完了しました。",
531
+ "loading_model_duration": "モデル読み込み時間",
532
+ "starting_separator": "オーディオファイルパスの分離プロセスを開始",
533
+ "normalization": "正規化閾値が{normalization_threshold}に設定され、クリッピングを防ぐために波形がこの最大振幅にスケールダウンされます。",
534
+ "loading_separator_model": "モデル{model_filename}をダウンロード中...",
535
+ "separator_success_3": "分離プロセスが完了しました。",
536
+ "separator_duration": "分離時間",
537
+ "downloading_model": "ダウンロードされたモデル、タイプ:{model_type}、フレンドリー名:{model_friendly_name}、モデルパス:{model_path}、モデルデータ:{model_data_dict_size}アイテム",
538
+ "demucs_info": "Demucsパラメータ:セグメントサイズ = {segment_size}、セグメントサイズ有効 = {segments_enabled}",
539
+ "demucs_info_2": "Demucsパラメータ:予測回数 = {shifts}、オーバーラップ = {overlap}",
540
+ "start_demucs": "Demucs分離器の初期化が完了しました",
541
+ "start_separator": "分離プロセスを開始...",
542
+ "prepare_mix": "ミックスを準備中...",
543
+ "demix": "デミックス用のミックスが準備されました。形状:{shape}",
544
+ "cancel_mix": "デミックスのためにモデルを読み込み中...",
545
+ "model_review": "モデルが読み込まれ、評価モードに設定されました。",
546
+ "del_gpu_cache_after_demix": "デミックス後にモデルとGPUキャッシュをクリアしました。",
547
+ "process_output_file": "出力ファイルを処理中...",
548
+ "source_length": "ソース配列を処理中、ソースの長さは{source_length}",
549
+ "process_ver": "ソースバージョンを処理中...",
550
+ "set_map": "ソースマップを{part}パーツに設定...",
551
+ "process_all_part": "すべてのルートパーツを処理中...",
552
+ "skip_part": "out_single_stemが{output_single_stem}に設定されているため、ルートパーツ{stem_name}をスキップ...",
553
+ "starting_demix_demucs": "demix_demucsでデミックスプロセスを開始...",
554
+ "model_infer": "モデル推論を実行中...",
555
+ "name_not_pretrained": "{name}は事前学習済みモデルまたはモデルバンドルではありません。",
556
+ "invalid_checksum": "ファイル{path}のチェックサムが無効です。期待値{checksum}、実際の値{actual_checksum}",
557
+ "mdx_info": "MDXパラメータ:バッチサイズ = {batch_size}、セグメントサイズ = {segment_size}",
558
+ "mdx_info_2": "MDXパラメータ:オーバーラップ = {overlap}、ホップ長 = {hop_length}、ノイズ除去有効 = {enable_denoise}",
559
+ "mdx_info_3": "MDXパラメータ",
560
+ "load_model_onnx": "推論用のONNXモデルを読み込み中...",
561
+ "load_model_onnx_success": "ONNXruntime推論セッションを使用してモデルを正常に読み込みました。",
562
+ "onnx_to_pytorch": "dim_tとセグメントサイズが一致しないため、ONNXからPyTorchにモデルを変換しました。処理が遅くなる可能性があります。",
563
+ "stft": "逆STFTが適用されました。形状の結果を返します",
564
+ "no_denoise": "ノイズ除去なしでスペクトラム上でモデルを実行。",
565
+ "mix": "入力オーディオファイル{audio_file_path}のミックスを準備中...",
566
+ "normalization_demix": "デミックス前にミックスを正規化中...",
567
+ "mix_success": "ミックス準備が完了しました。",
568
+ "primary_source": "プライマリソースを正規化中...",
569
+ "secondary_source": "セカンダリソースを生成中:互換モードでミキシング",
570
+ "invert_using_spec": "invert_USE_specがTrueに設定されている場合、スペクトラムを使用してセカンダリステムを反転",
571
+ "invert_using_spec_2": "初期変換ミックスから変換されたステムを引くことでセカンダリステムを反転",
572
+ "enable_denoise": "ノイズ除去のために正と負のスペクトラムの両方でモデルを実行。",
573
+ "is_match_mix": "is_match_mix:STFT出力から直接取得された予測スペクトラム。",
574
+ "save_secondary_stem_output_path": "セカンダリステム{stem_name}を{stem_output_path}に保存中...",
575
+ "starting_model": "モデル設定を初期化中...",
576
+ "input_info": "モデル入力パラメータ",
577
+ "model_settings": "モデル設定",
578
+ "initialize_mix": "is_ckpt = {is_ckpt}でミックスを初期化。初期ミックス形状:{shape}",
579
+ "!=2": "2チャンネルのオーディオ信号を期待しましたが、{shape}チャンネルを取得しました",
580
+ "process_check": "チェックポイントモードで処理中...",
581
+ "stft_2": "ミックスにSTFTを適用。スペクトラム形状:{shape}",
582
+ "cache": "パディングを計算",
583
+ "shape": "パディング後のミックス形状:{shape}、パーツ数:{num_chunks}",
584
+ "process_no_check": "ノーチェックポイントモードで処理中...",
585
+ "n_sample_or_pad": "サンプル数:{n_sample}、計算されたパディング:{pad}",
586
+ "shape_2": "パディング後のミックス形状",
587
+ "process_part": "パーツ{mix_waves}を処理:開始{i}、終了{ii}",
588
+ "mix_waves_to_tensor": "mix_wavesをテンソルに変換。テンソル形状:{shape}",
589
+ "mix_match": "ミックスモードマッチ;補償係数を適用。",
590
+ "tar_waves": "tar_waves。形状",
591
+ "normalization_2": "結果を除数で割って正規化。",
592
+ "mix_wave": "mix_waveバッチを処理中",
593
+ "mix_or_batch": "バッチにミックスパーツ。バッチ数",
594
+ "demix_is_match_mix": "is_match_mixでデミックスプロセスを開始、",
595
+ "mix_shape": "ルートミックスパーツが保存されました。形状",
596
+ "chunk_size_or_overlap": "互換ミキシングのチャンクサイズ:{chunk_size}、オーバーラップ:{overlap}",
597
+ "chunk_size_or_overlap_standard": "標準チャンクサイズ:{chunk_size}、オーバーラップ:{overlap}",
598
+ "calc_size": "生成されたサイズを計算",
599
+ "window": "このセグメントにウィンドウを適用。",
600
+ "process_part_2": "セグメント{total}/{total_chunks}を処理:開始{start}、終了{end}",
601
+ "all_process_part": "処理するセグメントの総数",
602
+ "step_or_overlap": "パーツを処理するステップサイズ:{step}、オーバーラップは{overlap}に設定。",
603
+ "mix_cache": "パディングでミックスを準備。ミックス形状",
604
+ "dims": "奇数の次元(dim={dims})ではsin/cos位置エンコーディングを使用できません",
605
+ "activation": "アクティベーションはrelu/geluでなければならず、{activation}ではありません",
606
+ "length_or_training_length": "提供された長さ{length}がトレーニング期間{training_length}を超えています",
607
+ "type_not_valid": "無効なタイプ",
608
+ "del_parameter": "存在しないパラメータを削除",
609
+ "info": "共通パラメータ:モデル名 = {model_name}、モデルパス = {model_path}",
610
+ "info_2": "共通パラメータ:出力パス = {output_dir}、出力形式 = {output_format}",
611
+ "info_3": "共通パラメータ:正規化閾値 = {normalization_threshold}",
612
+ "info_4": "共通パラメータ:��イズ除去有効 = {enable_denoise}、単一ステム出力 = {output_single_stem}",
613
+ "info_5": "共通パラメータ:スペックを使用した反転 = {invert_using_spec}、サンプルレート = {sample_rate}",
614
+ "info_6": "共通パラメータ:プライマリルート名 = {primary_stem_name}、セカンダリルート名 = {secondary_stem_name}",
615
+ "info_7": "共通パラメータ:カラオケモード = {is_karaoke}、BVモデル = {is_bv_model}、BVモデルリバランシング = {bv_model_rebalance}",
616
+ "success_process": "ルート{stem_name}の処理が完了し、オーディオを書き込み中...",
617
+ "load_audio": "ファイルからオーディオを読み込み中",
618
+ "load_audio_success": "オーディオが読み込まれました。サンプルレート:{sr}、オーディオ形状:{shape}",
619
+ "convert_mix": "提供されたミックス配列を変換中。",
620
+ "convert_shape": "変換されたミックス形状:{shape}",
621
+ "audio_not_valid": "オーディオファイル{audio_path}が空または無効です",
622
+ "audio_valid": "オーディオファイルは有効でデータを含んでいます。",
623
+ "mix_single": "ミックスがモノラルです。ステレオに変換します。",
624
+ "convert_mix_audio": "ステレオミックスに変換しました。",
625
+ "mix_success_2": "ミックス準備が完了しました。",
626
+ "duration": "オーディオの長さは{duration_hours}時間({duration_seconds}秒)です。",
627
+ "write": "{name}を使用して書き込みます。",
628
+ "write_audio": "ルートパスで{name}を書き込み中:",
629
+ "original_not_valid": "警告:元のソース配列がほぼ無音または空です。",
630
+ "shape_audio": "処理前のオーディオデータ形状",
631
+ "convert_data": "変換前のデータタイプ",
632
+ "original_source_to_int16": "original_sourceをint16に変換しました。",
633
+ "shape_audio_2": "インターリーブされたオーディオデータ形状",
634
+ "create_audiosegment": "AudioSegmentの作成に成功しました。",
635
+ "create_audiosegment_error": "AudioSegment作成中の特定エラー",
636
+ "export_error": "オーディオファイルのエクスポートエラー",
637
+ "export_success": "オーディオファイルを正常にエクスポートしました",
638
+ "clean": "ガベージコレクションを実行中...",
639
+ "clean_cache": "{name}キャッシュをクリア中...",
640
+ "del_path": "入力オーディオファイルのパス、ソース、ルートを削除中...",
641
+ "not_success": "プロセスが成功しませんでした:",
642
+ "resample_error": "リサンプリング中のエラー",
643
+ "shapes": "形状",
644
+ "wav_resolution": "解像度タイプ",
645
+ "warnings": "警告:非常に積極的な値が検出されました",
646
+ "warnings_2": "警告:波形入力でNaNまたは無限値が検出されました。形状",
647
+ "process_file": "ファイルを処理中... \n",
648
+ "save_instruments": "リバーストラックを保存中...",
649
+ "assert": "オーディオファイルは同じ形状でなければなりません - ミックス:{mixshape}、楽器:{instrumentalshape}",
650
+ "rubberband": "Rubberband CLIを実行できません。Rubberband-CLIがインストールされていることを確認してください。",
651
+ "rate": "レートは厳密に正でなければなりません",
652
+ "gdown_error": "ファイルの公開リンクを取得できませんでした。リンクの権限を「リンクを知っている全員」に変更する必要があるか、既に過剰なアクセス権限がある可能性があります。",
653
+ "to": "宛先:",
654
+ "gdown_value_error": "パスまたはIDを指定する必要があります",
655
+ "missing_url": "URLがありません",
656
+ "mac_not_match": "MACが一致しません",
657
+ "file_not_access": "ファイルにアクセスできません",
658
+ "int_resp==-3": "リクエストが失敗しました、再試行中",
659
+ "search_separate": "別々のファイルを検索...",
660
+ "found_choice": "{choice}が見つかりました",
661
+ "separator==0": "別々のファイルが見つかりませんでした!",
662
+ "select_separate": "別々のファイルを選択",
663
+ "start_app": "インターフェースを開始...",
664
+ "provide_audio": "オーディオファイルのパスを入力してください",
665
+ "set_torch_mps": "TorchデバイスをMPSに設定",
666
+ "googletts": "Googleを使用してテキストを変換",
667
+ "pitch_info_2": "テキストから音声への変換のピッチ調整",
668
+ "waveform": "波形は(フレーム数、チャンネル数)の形状でなければなりません",
669
+ "freq_mask_smooth_hz": "freq_mask_smooth_hzは少なくとも{hz}Hzでなければなりません",
670
+ "time_mask_smooth_ms": "time_mask_smooth_msは少なくとも{ms}msでなければなりません",
671
+ "x": "xはより大きくなければなりません",
672
+ "xn": "xnはより大きくなければなりません",
673
+ "not_found_pid": "プロセスが見つかりませんでした!",
674
+ "end_pid": "プロセスが終了しました!",
675
+ "not_found_separate_model": "分離モデルファイルが見つかりませんでした!",
676
+ "not_found_pretrained": "事前学習済みモデルファイルが見つかりませんでした!",
677
+ "not_found_log": "ログファイルが見つかりませんでした!",
678
+ "not_found_predictors": "予測モデルファイルが見つかりませんでした!",
679
+ "not_found_embedders": "埋め込みモデルファイルが見つかりませんでした!",
680
+ "provide_folder": "有効なフォルダを提供してください!",
681
+ "empty_folder": "データフォルダが空です!",
682
+ "vocoder": "ボコーダー",
683
+ "vocoder_info": "ボコーダーは音声変換のために人間の音声信号を分析および合成します。\n\nデフォルト:このオプションはHiFi-GAN-NSFで、すべてのRVCと互換性があります\n\nMRF-HiFi-GAN:高忠実度。\n\nRefineGAN:優れた音質。",
684
+ "code_error": "エラー:ステータスコードを受信しました",
685
+ "json_error": "エラー:レスポンスを解析できません。",
686
+ "requests_error": "リクエストが失敗しました:{e}",
687
+ "memory_efficient_training": "メモリ効率の高いトレーニングを使用",
688
+ "not_use_pretrain_error_download": "ファイルが欠落しているため、事前学習済みモデルは使用されません",
689
+ "provide_file_settings": "プリセット設定ファイルを提供してください!",
690
+ "load_presets": "プリセットファイル{presets}を読み込みました",
691
+ "provide_filename_settings": "プリセットファイル名を提供してください!",
692
+ "choose1": "エクスポートするものを1つ選択してください!",
693
+ "export_settings": "プリセットファイル{name}をエクスポートしました",
694
+ "use_presets": "プリセットファイルを使用",
695
+ "file_preset": "プリセットファイル",
696
+ "load_file": "ファイルを読み込む",
697
+ "export_file": "プリセットファイルをエクスポート",
698
+ "save_clean": "クリーニングを保存",
699
+ "save_autotune": "オートチューンを保存",
700
+ "save_pitch": "ピッチを保存",
701
+ "save_index_2": "インデックスの影響を保存",
702
+ "save_resample": "リサンプリングを保存",
703
+ "save_filter": "メディアンフィルターを保存",
704
+ "save_envelope": "サウンドエンベロープを保存",
705
+ "save_protect": "サウンド保護を保存",
706
+ "save_split": "サウンド分割を保存",
707
+ "filename_to_save": "保存するファイル名",
708
+ "upload_presets": "プリセットファイルをアップロード",
709
+ "stop": "プロセスを停止",
710
+ "stop_separate": "音楽分離を停止",
711
+ "stop_convert": "変換を停止",
712
+ "stop_create_dataset": "データセット作成を停止",
713
+ "stop_training": "トレーニングを停止",
714
+ "stop_extract": "データ処理を停止",
715
+ "stop_preprocess": "データ抽出を停止",
716
+ "not_found_presets": "フォルダにプリセットファイルが見つかりませんでした!",
717
+ "port": "ポート{port}が利用できません!ポートを1つ下げます...",
718
+ "empty_json": "{file}:破損または空",
719
+ "thank": "問題を報告してくれてありがとう。ご不便をおかけして申し訳ありません!",
720
+ "error_read_log": "ログファイルの読み込み中にエラーが発生しました!",
721
+ "error_send": "レポート送信中にエラーが発生しました!Discordでご連絡ください:pham_huynh_anh!",
722
+ "report_bugs": "バグを報告",
723
+ "agree_log": "すべてのログファイルを提供することに同意",
724
+ "error_info": "エラーの説明",
725
+ "error_info_2": "エラーについての詳細情報を提供",
726
+ "report_bug_info": "プログラム使用中に発生したバグを報告",
727
+ "sr_info": "注:一部の形式は48000を超えるレートをサポートしていません",
728
+ "report_info": "可能であれば、デバッグを助けるためにログファイルを提供することに同意してください。\n\nログファイルが提供されない場合、エラーがいつどこで発生したかを詳細に説明してください。\n\nこのレポートシステムも失敗した場合、[ISSUE]({github})またはDiscord:`pham_huynh_anh`で連絡できます",
729
+ "default_setting": "分離中にエラーが発生しました。すべての設定をデフォルトにリセットします...",
730
+ "dataset_folder1": "データフォルダ名を入力してください",
731
+ "checkpointing_err": "サンプルレートやアーキテクチャなどの事前学習済みモデルパラメータが選択したモデルと一致しません。",
732
+ "start_onnx_export": "モデルをonnxに変換開始...",
733
+ "convert_model": "��デルを変換",
734
+ "pytorch2onnx": "PYTORCHモデルをONNXモデルに変換",
735
+ "pytorch2onnx_markdown": "オーディオ変換を最適化するためにRVCモデルをpytorchからonnxに変換",
736
+ "error_readfile": "ファイルの読み込み中にエラーが発生しました!",
737
+ "read_sf": "soundfileを使用してオーディオファイルを読み込む...",
738
+ "read_librosa": "soundfileがサポートされていないため、librosaを使用してオーディオファイルを読み込む...",
739
+ "f0_onnx_mode": "F0 ONNXモード",
740
+ "f0_onnx_mode_info": "ONNXモデルを使用してピッチを抽出すると、速度が向上する可能性があります",
741
+ "formantshift": "ピッチとフォルマントシフト",
742
+ "formant_qfrency": "フォルマントシフトの周波数",
743
+ "formant_timbre": "フォルマント変換の音色",
744
+ "time_frames": "時間(フレーム)",
745
+ "Frequency": "周波数(Hz)",
746
+ "f0_extractor_tab": "F0抽出",
747
+ "f0_extractor_markdown": "## ピッチ抽出",
748
+ "f0_extractor_markdown_2": "F0ピッチ抽出はオーディオ変換推論に使用することを目的としています",
749
+ "start_extract": "抽出プロセスを開始...",
750
+ "extract_done": "抽出プロセスが完了しました!",
751
+ "f0_file": "事前に抽出されたF0ファイルを使用",
752
+ "upload_f0": "F0ファイルをアップロード",
753
+ "f0_file_2": "F0ファイル",
754
+ "clean_f0_file": "F0ファイルをクリーンアップ",
755
+ "embed_mode": "埋め込みモード",
756
+ "embed_mode_info": "異なるモデルを使用して埋め込みを抽出",
757
+ "close": "アプリケーションを終了中...",
758
+ "start_whisper": "Whisperで音声認識を開始...",
759
+ "whisper_done": "音声認識が完了しました!",
760
+ "process_audio": "オーディオを前処理中...",
761
+ "process_done_start_convert": "オーディオ処理が完了しました!オーディオ変換に進みます...",
762
+ "convert_with_whisper": "Whisperでオーディオを変換",
763
+ "convert_with_whisper_info": "Whisperモデルで音声認識を使用してトレーニング済みの音声モデルでオーディオを変換\n\nWhisperは異なる音声を認識し、個々の音声を切り出し、RVCモデルを使用してそれらのセグメントを変換します\n\nWhisperモデルが正しく動作しない場合、異常な出力が発生する可能性があります",
764
+ "num_spk": "音声の数",
765
+ "num_spk_info": "オーディオ内の音声の数",
766
+ "model_size": "Whisperモデルサイズ",
767
+ "model_size_info": "Whisperモデルサイズ\n\n大きなモデルは異常な出力を生成する可能性があります",
768
+ "editing": "編集",
769
+ "inverting": "反転",
770
+ "steps": "ステップ",
771
+ "source_prompt": "ソースプロンプト",
772
+ "target_prompt": "プロンプト",
773
+ "cfg_scale_src": "ソースプロンプト",
774
+ "cfg_scale_tar": "ターゲットプロンプト",
775
+ "t_start": "編集レベル",
776
+ "save_compute": "効果的な編集",
777
+ "error_edit": "バックグラウンドミュージックの編集中にエラーが発生しました:{e}",
778
+ "start_edit": "バックグラウンドミュージック{input_path}の編集を開始...",
779
+ "edit_success": "{time}後にサウンドトラックの編集が完了しました。出力{output_path}",
780
+ "audio_editing": "サウンドトラックの編集",
781
+ "audio_editing_info": "## Audioldm2モデルを使用してサウンドトラックを編集",
782
+ "audio_editing_markdown": "Audioldm2モデルを使用してサウンドトラックを編集すると、サウンドトラック内の楽器の種類を変更できます",
783
+ "target_prompt_info": "希望する編集出力を説明",
784
+ "cfg_scale_src_info": "ソースが出力にどの程度影響するかを示します。高い値はソースの特性をより多く保持します。低い値はシステムに変換の自由度を与えます。",
785
+ "cfg_scale_tar_info": "ターゲットが最終結果にどの程度影響するかを示します。高い値はターゲットの特性を強制的に反映します。低い値はソースとターゲットをバランスさせます。",
786
+ "audioldm2_model": "Audioldm2モデル",
787
+ "audioldm2_model_info": "お好みのAudioldm2モデルを選択\n\nウェイトの読み込みと推論もGPUに応じて時間がかかります",
788
+ "source_prompt_info": "オプション:元のオーディオ入力を説明",
789
+ "t_start_info": "低い補正レベルは元のサウンドに近く、高いほど強い補正になります。",
790
+ "steps_label": "拡散ステップ数",
791
+ "steps_info": "高い値(例:200)は高品質の出力を生成します。",
792
+ "title": "ベトナム人向けのシンプルで高品質、高性能な音声および楽器変換およびトレーニングツール",
793
+ "fp16_not_support": "CPUはfp16を十分にサポートしていません。fp16 -> fp32に変換",
794
+ "precision": "精度",
795
+ "precision_info": "推論およびモデルトレーニングの精度\n\n注:CPUはfp16をサポートしていません\n\nRefineGANおよびMRF HIFIGANで変換する場合は、fp16が異常な出力を引き起こす可能性があるため、fp32を使用してください",
796
+ "update_precision": "精度を更新",
797
+ "start_update_precision": "精度の更新を開始",
798
+ "deterministic": "決定論的アルゴリズム",
799
+ "deterministic_info": "有効にすると、非常に決定論的なアルゴリズムが使用され、同じ入力データの各実行が同じ結果を生成します。\n\n無効にすると、より最適なアルゴリズムが選択される可能性がありますが、完全に決定論的ではなく、実行間で異なるトレーニング結果になる可能性があります。",
800
+ "benchmark": "ベンチマークアルゴリズム",
801
+ "benchmark_info": "有効にすると、特定のハードウェアとサイズに対して最も最適化されたアルゴリズムをテストして選択します。これによりトレーニングが高速化します。\n\n無効にすると、このアルゴリズムの最適化は行われず、速度は低下しますが、各実行で同じアルゴリズムが使用されるため、正確に再現したい場合に便利です。",
802
+ "font": "フォント",
803
+ "font_info": "インターフェースフォント\n\n[Google Font](https://fonts.google.com)にアクセスして好きなフォントを選択してください。",
804
+ "change_font": "フォントを変更",
805
+ "f0_unlock": "すべてをアンロック",
806
+ "f0_unlock_info": "すべてのピッチ抽出方法をアンロック",
807
+ "stop_audioldm2": "Audioldm2を停止",
808
+ "srt": "SRTファイルが空または破損しています!"
809
+ }
assets/languages/vi-VN.json ADDED
@@ -0,0 +1,809 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "set_lang": "Đã đặt ngôn ngữ hiển thị là {lang}",
3
+ "no_support_gpu": "Thật không may, không có GPU tương thích để hỗ trợ việc đào tạo của bạn.",
4
+ "text": "văn bản",
5
+ "upload_success": "Đã tải lên tệp {name} hoàn tất.",
6
+ "download_url": "Tải từ đường dẫn liên kết",
7
+ "download_from_csv": "Tải từ kho mô hình csv",
8
+ "search_models": "Tìm kiếm mô hình",
9
+ "upload": "Tải lên",
10
+ "option_not_valid": "Tùy chọn không hợp lệ!",
11
+ "list_model": "Danh sách mô hình",
12
+ "success": "Hoàn tất!",
13
+ "index": "chỉ mục",
14
+ "model": "mô hình",
15
+ "zip": "nén",
16
+ "search": "tìm kiếm",
17
+ "provide_file": "Vui lòng cung cấp tệp {filename} hợp lệ!",
18
+ "start": "Bắt đầu {start}...",
19
+ "not_found": "Không tìm thấy {name}",
20
+ "found": "Đã tìm thấy {results} kết quả!",
21
+ "download_music": "tải nhạc",
22
+ "download": "tải xuống",
23
+ "provide_url": "Vui lòng cung cấp đường dẫn liên kết.",
24
+ "provide_name_is_save": "Vui lòng cung cấp tên mô hình để lưu.",
25
+ "not_support_url": "Liên kết mô hình của bạn không được hỗ trợ.",
26
+ "error_occurred": "Đã xảy ra lỗi: {e}",
27
+ "not_model": "Tệp bạn vừa tải lên không phải là tệp mô hình!",
28
+ "unable_analyze_model": "Không phân tích được mô hình!",
29
+ "download_pretrain": "Tải xuống huấn luyện trước...",
30
+ "provide_pretrain": "Vui lòng cung cấp đường dẫn mô hình huấn luyện trước {dg}.",
31
+ "sr_not_same": "Tốc độ lấy mẫu của hai mô hình không giống nhau",
32
+ "architectures_not_same": "Không thể hợp nhất các mô hình. Các kiến trúc mô hình không giống nhau.",
33
+ "fushion_model": "dung hợp mô hình",
34
+ "model_fushion_info": "Mô hình được {name} được dung hợp từ {pth_1} và {pth_2} với ratio {ratio}.",
35
+ "not_found_create_time": "Không tìm thấy thời gian tạo.",
36
+ "format_not_valid": "Định dạng không hợp lệ.",
37
+ "read_info": "Các mô hình được huấn luyện trên các ứng dụng khác nhau có thể đem lại các thông tin khác nhau hoặc không thể đọc!",
38
+ "epoch": "kỷ nguyên.",
39
+ "step": "bước",
40
+ "sr": "Tốc độ lấy mẫu",
41
+ "f0": "huấn luyện cao độ",
42
+ "version": "phiên bản.",
43
+ "not_f0": "Không được huấn luyện cao độ",
44
+ "trained_f0": "Được huấn luyện cao độ",
45
+ "model_info": "Tên mô hình: {model_name}\n\n Người tạo mô hình: {model_author}\n\nKỷ nguyên: {epochs}\n\nSố bước: {steps}\n\nPhiên bản của mô hình: {version}\n\nTốc độ lấy mẫu: {sr}\n\nHuấn luyện cao độ: {pitch_guidance}\n\nHash (ID): {model_hash}\n\nThời gian tạo: {creation_date_str}\n\nBộ mã hóa: {vocoder}\n",
46
+ "input_not_valid": "Vui lòng nhập đầu vào hợp lệ!",
47
+ "output_not_valid": "Vui lòng nhập đầu ra hợp lệ!",
48
+ "apply_effect": "áp dụng hiệu ứng",
49
+ "enter_the_text": "Vui lòng nhập văn bản để chuyển!",
50
+ "choose_voice": "Vui lòng chọn giọng!",
51
+ "convert": "Chuyển đổi {name}...",
52
+ "separator_music": "tách nhạc",
53
+ "notfound": "Không tìm thấy",
54
+ "turn_on_use_audio": "Vui lòng bật sử dụng âm thanh vừa tách để sử dụng",
55
+ "turn_off_convert_backup": "Tắt chuyển đổi giọng bè để có thể sử dụng giọng gốc",
56
+ "turn_off_merge_backup": "Tắt không kết hợp giọng bè để có thể sử dụng giọng gốc",
57
+ "not_found_original_vocal": "Không tìm thấy giọng gốc!",
58
+ "convert_vocal": "Đang chuyển đổi giọng nói...",
59
+ "convert_success": "Đã hoàn tất chuyển đổi giọng nói!",
60
+ "convert_backup": "Đang chuyển đổi giọng bè...",
61
+ "convert_backup_success": "Đã Hoàn tất chuyển đổi giọng bè!",
62
+ "merge_backup": "Kết hợp giọng với giọng bè...",
63
+ "merge_success": "Kết hợp Hoàn tất.",
64
+ "is_folder": "Đầu vào là một thư mục: Chuyển đổi tất cả tệp âm thanh trong thư mục...",
65
+ "not_found_in_folder": "Không tìm thấy tệp âm thanh trong thư mục!",
66
+ "batch_convert": "Đang chuyển đổi hàng loạt...",
67
+ "batch_convert_success": "Chuyển đổi hàng loạt hoàn tất!",
68
+ "create": "tạo",
69
+ "provide_name": "Vui lòng cung cấp tên mô hình.",
70
+ "not_found_data": "Không tìm thấy dữ liệu",
71
+ "not_found_data_preprocess": "Không tìm thấy dữ liệu được xử lý, vui lòng xử lý lại âm thanh",
72
+ "not_found_data_extract": "Không tìm thấy dữ liệu được trích xuất, vui lòng trích xuất lại âm thanh",
73
+ "provide_pretrained": "Vui lòng nhập huấn luyện {dg}",
74
+ "download_pretrained": "Tải xuống huấn luyện trước {dg}{rvc_version} gốc",
75
+ "not_found_pretrain": "Không tìm thấy huấn luyện trước {dg}",
76
+ "not_use_pretrain": "Sẽ không có huấn luyện trước được sử dụng",
77
+ "training": "huấn luyện",
78
+ "rick_roll": "Bấm vào đây nếu bạn muốn bị Rick Roll:) ---> [RickRoll]({rickroll})",
79
+ "terms_of_use": "**Vui lòng không sử dụng Dự án với bất kỳ mục đích nào vi phạm đạo đức, pháp luật, hoặc gây tổn hại đến cá nhân, tổ chức...**",
80
+ "exemption": "**Trong trường hợp người sử dụng không tuân thủ các điều khoản hoặc vi phạm, tôi sẽ không chịu trách nhiệm về bất kỳ khiếu nại, thiệt hại, hay trách nhiệm pháp lý nào, dù là trong hợp đồng, do sơ suất, hay các lý do khác, phát sinh từ, ngoài, hoặc liên quan đến phần mềm, việc sử dụng phần mềm hoặc các giao dịch khác liên quan đến phần mềm.**",
81
+ "separator_tab": "Tách Nhạc",
82
+ "4_part": "Một hệ thống tách nhạc đơn giản có thể tách được 4 phần: Nhạc, giọng, giọng chính, giọng bè",
83
+ "clear_audio": "Làm sạch âm thanh",
84
+ "separator_backing": "Tách giọng bè",
85
+ "denoise_mdx": "Khữ tách MDX",
86
+ "use_mdx": "Sử dụng MDX",
87
+ "dereveb_audio": "Tách vang",
88
+ "dereveb_backing": "Tách vang bè",
89
+ "separator_model": "Mô hình tách nhạc",
90
+ "separator_backing_model": "Mô hình tách bè",
91
+ "shift": "Số lượng dự đoán",
92
+ "shift_info": "Càng cao chất lượng càng tốt nhưng lâu nhưng tốn tài nguyên",
93
+ "segments_size": "Kích Thước Phân Đoạn",
94
+ "segments_size_info": "Càng cao chất lượng càng tốt nhưng tốn tài nguyên",
95
+ "batch_size": "Kích thước lô",
96
+ "batch_size_info": "Số lượng mẫu xử lý đồng thời trong một lần huấn luyện. Cao có thể gây tràn bộ nhớ",
97
+ "mdx_batch_size_info": "Số lượng mẫu được xử lý cùng một lúc. Việc chia thành các lô giúp tối ưu hóa quá trình tính toán. Lô quá lớn có thể làm tràn bộ nhớ, khi lô quá nhỏ sẽ làm giảm hiệu quả dùng tài nguyên",
98
+ "overlap": "Chồng chéo",
99
+ "overlap_info": "Số lượng chồng chéo giữa các cửa sổ dự đoán",
100
+ "export_format": "Định dạng âm thanh",
101
+ "export_info": "Định dạng âm thanh khi xuất tệp âm thanh ra",
102
+ "output_separator": "Âm thanh đã được tách",
103
+ "hop_length_info": "Khoảng thời gian chuyển cửa sổ phân tích khi thực hiện phép biến đổi. Giá trị nhỏ độ chi tiết cao nhưng cần tính toán nhiều hơn",
104
+ "drop_audio": "Thả âm thanh vào đây",
105
+ "drop_text": "Thả tệp văn bản vào đây",
106
+ "use_url": "Sử dụng đường dẫn youtube",
107
+ "url_audio": "Đường dẫn liên kết đến âm thanh",
108
+ "downloads": "Tải Xuống",
109
+ "clean_strength": "Mức độ làm sạch âm thanh",
110
+ "clean_strength_info": "Mức độ của bộ làm sạch âm thanh để lọc giọng hát khi xuất",
111
+ "input_output": "Đầu vào, đầu ra âm thanh",
112
+ "audio_path": "Đường dẫn đầu vào âm thanh",
113
+ "refesh": "Tải lại",
114
+ "output_folder": "Đường dẫn thư mục đầu ra âm thanh",
115
+ "output_folder_info": "Nhập đường dẫn thư mục âm thanh sẽ xuất ra ở đó",
116
+ "input_audio": "Đầu vào âm thanh",
117
+ "instruments": "Nhạc nền",
118
+ "original_vocal": "Giọng gốc",
119
+ "main_vocal": "Giọng chính",
120
+ "backing_vocal": "Giọng bè",
121
+ "convert_audio": "Chuyển Đổi Âm Thanh",
122
+ "convert_info": "Chuyển đổi âm thanh bằng mô hình giọng nói đã được huấn luyện",
123
+ "autotune": "Tự động điều chỉnh",
124
+ "use_audio": "Sử dụng âm thanh vừa tách",
125
+ "convert_original": "Chuyển đổi giọng gốc",
126
+ "convert_backing": "Chuyển đổi giọng bè",
127
+ "not_merge_backing": "Không kết hợp giọng bè",
128
+ "merge_instruments": "Kết hợp nhạc nền",
129
+ "pitch": "Cao độ",
130
+ "pitch_info": "Khuyến cáo: chỉnh lên 12 để chuyển giọng nam thành nữ và ngược lại",
131
+ "model_accordion": "Mô hình và chỉ mục",
132
+ "model_name": "Tệp mô hình",
133
+ "index_path": "Tệp chỉ mục",
134
+ "index_strength": "Ảnh hưởng của chỉ mục",
135
+ "index_strength_info": "Càng cao ảnh hưởng càng lớn. Tuy nhiên, việc chọn giá trị thấp hơn có thể giảm hiện tượng giả trong âm thanh",
136
+ "output_path": "Đường dẫn đầu ra âm thanh",
137
+ "output_path_info": "Nhập đường dẫn đầu ra(cứ để định dạng .wav khi chuyển đổi nó tự sửa)",
138
+ "setting": "Cài đặt chung",
139
+ "f0_method": "Phương pháp trích xuất",
140
+ "f0_method_info": "Phương pháp để trích xuất dữ liệu",
141
+ "f0_method_hybrid": "Phương pháp trích xuất HYBRID",
142
+ "f0_method_hybrid_info": "Sự kết h���p của hai hoặc nhiều loại trích xuất khác nhau",
143
+ "hubert_model": "Mô hình nhúng",
144
+ "hubert_info": "Mô hình được huấn luyện trước để giúp nhúng",
145
+ "modelname": "Tên của mô hình",
146
+ "modelname_info": "Nếu bạn có mô hình riêng chỉ cần tải và nhập tên của mô hình vào đây",
147
+ "split_audio": "Cắt âm thanh",
148
+ "autotune_rate": "Mức độ điều chỉnh",
149
+ "autotune_rate_info": "Mức độ điều chỉnh tự động",
150
+ "resample": "Lấy mẫu lại",
151
+ "resample_info": "Lấy mẫu lại sau xử lý đến tốc độ lấy mẫu cuối cùng, 0 có nghĩa là không lấy mẫu lại, LƯU Ý: MỘT SỐ ĐỊNH DẠNG KHÔNG HỖ TRỢ TỐC ĐỘ TRÊN 48000",
152
+ "filter_radius": "Lọc trung vị",
153
+ "filter_radius_info": "Nếu giá trị lớn hơn ba sẽ áp dụng tính năng lọc trung vị. Giá trị đại diện cho bán kính bộ lọc và có thể làm giảm hơi thở hoặc tắt thở.",
154
+ "volume_envelope": "Đường bao âm thanh",
155
+ "volume_envelope_info": "Sử dụng đường bao âm lượng của đầu vào để thay thế hoặc trộn với đường bao âm lượng của đầu ra. Càng gần 1 thì đường bao đầu ra càng được sử dụng nhiều",
156
+ "protect": "Bảo vệ phụ âm",
157
+ "protect_info": "Bảo vệ các phụ âm riêng biệt và âm thanh thở ngăn chặn việc rách điện âm và các hiện tượng giả khác. Việc chỉnh tối đa sẽ bảo vệ toàn diện. Việc giảm giá trị này có thể giảm độ bảo vệ, đồng thời có khả năng giảm thiểu hiệu ứng lập chỉ mục",
158
+ "output_convert": "Âm thanh đã được chuyển đổi",
159
+ "main_convert": "Chuyển đổi giọng chính",
160
+ "main_or_backing": "Giọng chính + Giọng bè",
161
+ "voice_or_instruments": "Giọng + Nhạc nền",
162
+ "convert_text": "Chuyển Đổi Văn Bản",
163
+ "convert_text_markdown": "## Chuyển Đổi Văn Bản Thành Giọng Nói",
164
+ "convert_text_markdown_2": "Chuyển văn bản thành giọng nói và đọc lại bằng mô hình giọng nói được huấn luyện",
165
+ "input_txt": "Nhập dữ liệu từ tệp văn bản txt",
166
+ "text_to_speech": "Văn bản cần đọc",
167
+ "voice_speed": "Tốc độ đọc",
168
+ "voice_speed_info": "Tốc độ đọc của giọng nói",
169
+ "tts_1": "1. Chuyển Đổi Văn Bản",
170
+ "tts_2": "2. Chuyển Đổi Giọng Nói",
171
+ "voice": "Giọng nói của các nước",
172
+ "output_tts": "Đường dẫn đầu ra giọng nói",
173
+ "output_tts_convert": "Đường dẫn đầu ra giọng chuyển đổi",
174
+ "tts_output": "Nhập đường dẫn đầu ra",
175
+ "output_tts_markdown": "Âm thanh chưa được chuyển đổi và âm thanh đã được chuyển đổi",
176
+ "output_text_to_speech": "Giọng được tạo bởi chuyển đổi văn bản thành giọng nói",
177
+ "output_file_tts_convert": "Giọng được chuyển đổi bởi mô hình",
178
+ "output_audio": "Đầu ra âm thanh",
179
+ "provide_output": "Nhập đường dẫn đầu ra",
180
+ "audio_effects": "Hiệu Ứng Âm Thanh",
181
+ "apply_audio_effects": "## Áp Dụng Thêm Hiệu Ứng Cho Âm Thanh",
182
+ "audio_effects_edit": "Chỉnh sửa thêm hiệu ứng cho âm thanh",
183
+ "reverb": "Hiệu ứng vọng âm",
184
+ "chorus": "Hiệu ứng hòa âm",
185
+ "delay": "Hiệu ứng độ trễ",
186
+ "more_option": "Tùy chọn thêm",
187
+ "phaser": "Hiệu ứng xoay pha",
188
+ "compressor": "Hiệu ứng nén",
189
+ "apply": "Áp dụng",
190
+ "reverb_freeze": "Chế độ đóng băng",
191
+ "reverb_freeze_info": "Tạo hiệu ứng vang liên tục khi bật chế độ này",
192
+ "room_size": "Kích thước phòng",
193
+ "room_size_info": "Điều chỉnh không gian của phòng để tạo độ vang",
194
+ "damping": "Giảm âm",
195
+ "damping_info": "Điều chỉnh độ hút âm, kiểm soát mức độ vang",
196
+ "wet_level": "Mức độ tín hiệu vang",
197
+ "wet_level_info": "Điều chỉnh mức độ của tín hiệu có hiệu ứng vọng âm",
198
+ "dry_level": "Mức độ tín hiệu gốc",
199
+ "dry_level_info": "Điều chỉnh mức độ của tín hiệu không có hiệu ứng",
200
+ "width": "Chiều rộng âm thanh",
201
+ "width_info": "Điều chỉnh độ rộng của không gian âm thanh",
202
+ "chorus_depth": "Giảm âm",
203
+ "chorus_depth_info": "Điều chỉnh cường độ hòa âm, tạo ra cảm giác rộng cho âm thanh",
204
+ "chorus_rate_hz": "Tần số",
205
+ "chorus_rate_hz_info": "Điều chỉnh tốc độ dao động của hòa âm",
206
+ "chorus_mix": "Trộn tín hiệu",
207
+ "chorus_mix_info": "Điều chỉnh mức độ trộn giữa âm gốc và âm có hiệu ứng",
208
+ "chorus_centre_delay_ms": "Đỗ trễ trung tâm (mili giây)",
209
+ "chorus_centre_delay_ms_info": "Khoảng thời gian trễ giữa các kênh stereo để tạo hiệu ứng hòa âm",
210
+ "chorus_feedback": "Phản hồi",
211
+ "chorus_feedback_info": "Điều chỉnh lượng tín hiệu hiệu ứng được quay lại vào tín hiệu gốc",
212
+ "delay_seconds": "Thời gian trễ",
213
+ "delay_seconds_info": "Điều chỉnh khoảng thời gian trễ giữa âm gốc và âm có hiệu ứng",
214
+ "delay_feedback": "Phản hồi độ trễ",
215
+ "delay_feedback_info": "Điều chỉnh lượng tín hiệu được quay lại, tạo hiệu ứng lặp lại",
216
+ "delay_mix": "Trộn tín hiệu độ trễ",
217
+ "delay_mix_info": "Điều chỉnh mức độ trộn giữa âm gốc và âm trễ",
218
+ "fade": "Hiệu ứng mờ dần",
219
+ "bass_or_treble": "Âm trầm và âm cao",
220
+ "limiter": "Giới hạn ngưỡng",
221
+ "distortion": "Hiệu ứng nhiễu âm",
222
+ "gain": "Cường độ âm",
223
+ "bitcrush": "Hiệu ứng giảm bits",
224
+ "clipping": "Hiệu ứng méo âm",
225
+ "fade_in": "Hiệu ứng mờ dần vào (mili giây)",
226
+ "fade_in_info": "Thời gian mà âm thanh sẽ tăng dần từ mức 0 đến mức bình thường",
227
+ "fade_out": "Hiệu ứng mờ dần ra (mili giây)",
228
+ "fade_out_info": "thời gian mà âm thanh sẽ giảm dần từ bình thường xuống mức 0",
229
+ "bass_boost": "Độ khuếch đại âm trầm (db)",
230
+ "bass_boost_info": "mức độ tăng cường âm trầm trong đoạn âm thanh",
231
+ "bass_frequency": "Tần số cắt của bộ lọc thông thấp (Hz)",
232
+ "bass_frequency_info": "tần số bị giảm. Tần số thấp sẽ làm âm trầm rõ hơn",
233
+ "treble_boost": "Độ khuếch đại âm cao (db)",
234
+ "treble_boost_info": "mức độ tăng cường âm cao trong đoạn âm thanh",
235
+ "treble_frequency": "Tần số cắt của bộ lọc thông cao (Hz)",
236
+ "treble_frequency_info": "tần số sẽ lọc bỏ. Tần số càng cao thì giữ lại âm càng cao",
237
+ "limiter_threashold_db": "Ngưỡng giới hạn",
238
+ "limiter_threashold_db_info": "Giới hạn mức độ âm thanh tối đa, ngăn không cho vượt quá ngưỡng",
239
+ "limiter_release_ms": "Thời gian thả",
240
+ "limiter_release_ms_info": "Khoảng thời gian để âm thanh trở lại sau khi bị giới hạn (Mili Giây)",
241
+ "distortion_info": "Điều chỉnh mức độ nhiễu âm, tạo hiệu ứng méo tiếng",
242
+ "gain_info": "Tăng giảm âm lượng của tín hiệu",
243
+ "clipping_threashold_db": "Ngưỡng cắt",
244
+ "clipping_threashold_db_info": "Cắt bớt tín hiệu vượt quá ngưỡng, tạo âm thanh méo",
245
+ "bitcrush_bit_depth": "Độ sâu bit",
246
+ "bitcrush_bit_depth_info": "Giảm chất lượng âm thanh bằng cách giảm số bit, tạo hiệu ứng âm thanh bị méo",
247
+ "phaser_depth": "Độ sâu",
248
+ "phaser_depth_info": "Điều chỉnh độ sâu của hiệu ứng, ảnh hưởng đến cường độ của hiệu ứng xoay pha",
249
+ "phaser_rate_hz": "Tần số",
250
+ "phaser_rate_hz_info": "Điều chỉnh tốc độ của hiệu ứng hiệu ứng xoay pha",
251
+ "phaser_mix": "Trộn tín hiệu",
252
+ "phaser_mix_info": "Điều chỉnh mức độ trộn giữa tín hiệu gốc và tín hiệu đã qua xử lý",
253
+ "phaser_centre_frequency_hz": "Tần số trung tâm",
254
+ "phaser_centre_frequency_hz_info": "Tần số trung tâm của hiệu ứng xoay pha, ảnh hưởng đến tần số bị điều chỉnh",
255
+ "phaser_feedback": "Phản hồi",
256
+ "phaser_feedback_info": "Điều chỉnh lượng phản hồi tín hiệu, tạo cảm giác xoay pha mạnh hoặc nhẹ",
257
+ "compressor_threashold_db": "Ngưỡng nén",
258
+ "compressor_threashold_db_info": "Ngưỡng mức âm thanh sẽ bị nén khi vượt qua ngưỡng này",
259
+ "compressor_ratio": "Tỉ lệ nén",
260
+ "compressor_ratio_info": "Điều chỉnh mức độ nén âm thanh khi vượt qua ngưỡng",
261
+ "compressor_attack_ms": "Thời gian tấn công (mili giây)",
262
+ "compressor_attack_ms_info": "Khoảng thời gian nén bắt đầu tác dụng sau khi âm thanh vượt ngưỡng",
263
+ "compressor_release_ms": "Thời gian thả",
264
+ "compressor_release_ms_info": "Thời gian để âm thanh trở lại trạng thái bình thường sau khi bị nén",
265
+ "create_dataset_url": "Đường dẫn liên kết đến âm thanh(sử dụng dấu , để sử dụng nhiều liên kết)",
266
+ "createdataset": "Tạo dữ liệu",
267
+ "create_dataset_markdown": "## Tạo Dữ Liệu Huấn Luyện Từ Youtube",
268
+ "create_dataset_markdown_2": "Xử lý và tạo tập tin dữ liệu huấn luyện bằng đường dẫn youtube",
269
+ "denoise": "Khử tách mô hình",
270
+ "skip": "Bỏ qua giây",
271
+ "model_ver": "Phiên bản tách giọng",
272
+ "model_ver_info": "Phiên bản của mô hình tách nhạc để tách giọng",
273
+ "create_dataset_info": "Thông tin tạo dữ liệu",
274
+ "output_data": "Đầu ra dữ liệu",
275
+ "output_data_info": "Đầu ra dữ liệu sau khi tạo xong dữ liệu",
276
+ "skip_start": "Bỏ qua phần đầu",
277
+ "skip_start_info": "Bỏ qua số giây đầu của âm thanh, dùng dấu , để sử dụng cho nhiều âm thanh",
278
+ "skip_end": "Bỏ qua phần cuối",
279
+ "skip_end_info": "Bỏ qua số giây cuối của âm thanh, dùng dấu , để sử dụng cho nhiều âm thanh",
280
+ "training_model": "Huấn Luyện Mô Hình",
281
+ "training_markdown": "Huấn luyện và đào tạo mô hình giọng nói bằng một lượng dữ liệu giọng nói",
282
+ "training_model_name": "Tên của mô hình khi huấn luyện(không sử dụng ký tự đặc biệt hay dấu cách)",
283
+ "sample_rate": "Tỉ lệ lấy mẫu",
284
+ "sample_rate_info": "Tỉ lệ lấy mẫu của mô hình",
285
+ "training_version": "Phiên bản mô hình",
286
+ "training_version_info": "Phiên bản mô hình khi huấn luyện",
287
+ "training_pitch": "Huấn luyện cao độ",
288
+ "upload_dataset": "Tải lên dữ liệu huấn luyện",
289
+ "preprocess_effect": "Xử lý hậu kỳ",
290
+ "clear_dataset": "Làm sạch dữ liệu",
291
+ "preprocess_info": "Thông tin phần xử lý trước",
292
+ "preprocess_button": "1. Xử lý dữ liệu",
293
+ "extract_button": "2. Trích xuất dữ liệu",
294
+ "extract_info": "Thông tin phần trích xuất dữ liệu",
295
+ "total_epoch": "Tổng số kỷ nguyên",
296
+ "total_epoch_info": "Tổng số kỷ nguyên huấn luyện đào tạo",
297
+ "save_epoch": "Tần suất lưu",
298
+ "save_epoch_info": "Tần suất lưu mô hình khi huấn luyện, giúp việc huấn luyện lại mô hình",
299
+ "create_index": "Tạo chỉ mục",
300
+ "index_algorithm": "Thuật toán chỉ mục",
301
+ "index_algorithm_info": "Thuật toán tạo chỉ mục",
302
+ "custom_dataset": "Tùy chọn thư mục",
303
+ "custom_dataset_info": "Tùy chọn thư mục dữ liệu huấn luyện",
304
+ "overtraining_detector": "Kiểm tra quá sức",
305
+ "overtraining_detector_info": "Kiểm tra huấn luyện mô hình quá sức",
306
+ "cleanup_training": "Làm sạch huấn luyện",
307
+ "cleanup_training_info": "Bật khi cần huấn luyện lại từ đầu.",
308
+ "cache_in_gpu": "Lưu mô hình vào đệm",
309
+ "cache_in_gpu_info": "Lưu mô hình vào bộ nhớ đệm gpu",
310
+ "dataset_folder": "Thư mục chứa dữ liệu",
311
+ "threshold": "Ngưỡng huấn luyện quá sức",
312
+ "setting_cpu_gpu": "Tùy chọn CPU/GPU",
313
+ "gpu_number": "Số gpu được sử dụng",
314
+ "gpu_number_info": "Số của GPU được sử dụng trong huấn luyện",
315
+ "save_only_latest": "Chỉ lưu mới nhất",
316
+ "save_only_latest_info": "Chỉ lưu mô hình D và G mới nhất",
317
+ "save_every_weights": "Lưu mọi mô hình",
318
+ "save_every_weights_info": "Lưu mọi mô hình sau mỗi lượt kỷ nguyên",
319
+ "gpu_info": "Thông tin của GPU",
320
+ "gpu_info_2": "Thông tin của GPU được sử dụng trong huấn luyện",
321
+ "cpu_core": "Số lõi xử lý có thể sử dụng",
322
+ "cpu_core_info": "Số lõi được sử dụng trong việc huấn luyện",
323
+ "not_use_pretrain_2": "Không dùng huấn luyện",
324
+ "not_use_pretrain_info": "Không dùng huấn luyện trước",
325
+ "custom_pretrain": "Tùy chỉnh huấn luyện",
326
+ "custom_pretrain_info": "Tùy chỉnh huấn luyện trước",
327
+ "pretrain_file": "Tệp mô hình huấn luyện trước {dg}",
328
+ "train_info": "Thông tin phần huấn luyện",
329
+ "export_model": "5. Xuất Mô hình",
330
+ "zip_model": "2. Nén mô hình",
331
+ "output_zip": "Đầu ra tệp khi nén",
332
+ "model_path": "Đường dẫn mô hình",
333
+ "model_ratio": "Tỉ lệ mô hình",
334
+ "model_ratio_info": "Chỉnh hướng về bên nào sẽ làm cho mô hình giống với bên đó",
335
+ "output_model_path": "Đầu ra mô hình",
336
+ "fushion": "Dung Hợp Mô Hình",
337
+ "fushion_markdown": "## Dung Hợp Hai Mô Hình Với Nhau",
338
+ "fushion_markdown_2": "Dung hợp hai mô hình giọng nói lại với nhau để tạo thành một mô hình duy nhất",
339
+ "read_model": "Đọc Thông Tin",
340
+ "read_model_markdown": "## Đọc Thông Tin Của Mô Hình",
341
+ "read_model_markdown_2": "Đọc các thông tin được ghi trong mô hình",
342
+ "drop_model": "Thả mô hình vào đây",
343
+ "readmodel": "Đọc mô hình",
344
+ "model_path_info": "Nhập đường dẫn đến tệp mô hình",
345
+ "modelinfo": "Thông Tin Mô Hình",
346
+ "download_markdown": "## Tải Xuống Mô Hình",
347
+ "download_markdown_2": "Tải xuống mô hình giọng nói, mô hình huấn luyện trước, mô hình nhúng",
348
+ "model_download": "Tải xuống mô hình giọng nói",
349
+ "model_url": "Đường dẫn liên kết đến mô hình",
350
+ "15s": "Vui lòng đợi khoảng 15 giây. Hệ thống sẽ tự khởi động lại!",
351
+ "model_download_select": "Chọn cách tải mô hình",
352
+ "model_warehouse": "Kho mô hình",
353
+ "get_model": "Nhận mô hình",
354
+ "name_to_search": "Tên để tìm kiếm",
355
+ "search_2": "Tìm kiếm",
356
+ "select_download_model": "Chọn mô hình đã được tìm kiếm(Bấm vào để chọn)",
357
+ "download_pretrained_2": "Tải xuống mô hình huấn luyện trước",
358
+ "only_huggingface": "Chỉ hỗ trợ huggingface.co",
359
+ "pretrained_url": "Đường dẫn liên kết đến mô hình huấn luyện trước {dg}",
360
+ "select_pretrain": "Chọn mô hình huấn luyện trước",
361
+ "select_pretrain_info": "Chọn mô hình huấn luyện trước để cài đặt về",
362
+ "pretrain_sr": "Tốc độ lấy mẫu của mô hình",
363
+ "drop_pretrain": "Thả mô hình huấn luyện trước {dg} vào đây",
364
+ "settings": "Tùy Chỉnh",
365
+ "settings_markdown": "## Tùy Chỉnh Thêm",
366
+ "settings_markdown_2": "Tùy chỉnh thêm một số tính năng của dự án",
367
+ "lang": "Ngôn ngữ",
368
+ "lang_restart": "Ngôn ngữ được hiển thị trong dự án(Khi đổi ngôn ngữ hệ thống sẽ tự khởi động lại sau 15 giây để cập nhật)",
369
+ "change_lang": "Đổi Ngôn Ngữ",
370
+ "theme": "Chủ đề",
371
+ "theme_restart": "Loại Chủ đề của giao diện được hiển thị(Khi đổi chủ đề hệ thống sẽ tự khởi động lại sau 15 giây để cập nhật)",
372
+ "theme_button": "Đổi Chủ Đề",
373
+ "change_light_dark": "Đổi Chế Độ Sáng/Tối",
374
+ "tensorboard_url": "Đường dẫn biểu đồ",
375
+ "errors_loading_audio": "Lỗi khi tải âm thanh: {e}",
376
+ "apply_error": "Đã xảy ra lỗi khi áp dụng hiệu ứng: {e}",
377
+ "indexpath": "Đường dẫn chỉ mục",
378
+ "split_total": "Tổng số phần đã cắt",
379
+ "process_audio_error": "Đã xảy ra lỗi khi xử lý âm thanh",
380
+ "merge_error": "Đã xảy ra lỗi khi ghép âm thanh",
381
+ "not_found_convert_file": "Không tìm thấy tệp đã xử lý",
382
+ "convert_batch": "Chuyển đổi hàng loạt...",
383
+ "found_audio": "Tìm thấy {audio_files} tệp âm thanh cho việc chuyển đổi.",
384
+ "not_found_audio": "Không tìm thấy tệp âm thanh!",
385
+ "error_convert": "Đã xảy ra lỗi khi chuyển đổi âm thanh: {e}",
386
+ "convert_batch_success": "Đã chuyển đổi hàng loạt hoàn tất sau {elapsed_time} giây. {output_path}",
387
+ "convert_audio_success": "Tệp {input_path} được chuyển đổi hoàn tất sau {elapsed_time} giây. {output_path}",
388
+ "hybrid_methods": "Tính toán ước lượng cao độ f0 cho các phương pháp {methods}",
389
+ "method_not_valid": "Phương pháp không hợp lệ",
390
+ "read_faiss_index_error": "Đã xảy ra lỗi khi đọc chỉ mục FAISS: {e}",
391
+ "read_model_error": "Thất bại khi tải mô hình: {e}",
392
+ "starting_download": "Bắt đầu tải xuống",
393
+ "version_not_valid": "Phiên bản tách giọng không hợp lệ",
394
+ "skip<audio": "Không thể bỏ qua vì số lượng thời gian bỏ qua thấp hơn số lượng tệp âm thanh",
395
+ "skip>audio": "Không thể bỏ qua vì số lượng thời gian bỏ qua cao hơn số lượng tệp âm thanh",
396
+ "=<0": "Thời gian bỏ qua bé hơn hoặc bằng 0 nên bỏ qua",
397
+ "skip_warning": "Thời lượng bỏ qua ({seconds} giây) vượt quá thời lượng âm thanh ({total_duration} giây). Bỏ qua.",
398
+ "download_success": "Đã tải xuống hoàn tất",
399
+ "create_dataset_error": "Đã xảy ra lỗi khi tạo dữ liệu huấn luyện",
400
+ "create_dataset_success": "Quá trình tạo dữ liệu huấn huyện đã hoàn tất sau: {elapsed_time} giây",
401
+ "skip_start_audio": "Bỏ qua âm thanh đầu hoàn tất: {input_file}",
402
+ "skip_end_audio": "Bỏ qua âm thanh cuối hoàn tất: {input_file}",
403
+ "merge_audio": "Đã ghép các phần chứa âm thanh lại",
404
+ "separator_process": "Đang tách giọng: {input}...",
405
+ "not_found_main_vocal": "Không tìm thấy giọng chính!",
406
+ "not_found_backing_vocal": "Không tìm thấy giọng bè!",
407
+ "not_found_instruments": "Không tìm thấy nhạc nền",
408
+ "merge_instruments_process": "Kết hợp giọng với nhạc nền...",
409
+ "dereverb": "Đang tách âm vang",
410
+ "dereverb_success": "Đã tách âm vang hoàn tất",
411
+ "save_index": "Đã lưu tệp chỉ mục",
412
+ "create_index_error": "Đã xảy ra lỗi khi tạo chỉ mục",
413
+ "sr_not_16000": "Tỉ lệ mẫu phải là 16000",
414
+ "gpu_not_valid": "Chỉ số GPU không hợp lệ. Chuyển sang CPU.",
415
+ "extract_file_error": "Đã xảy ra lỗi khi giải nén tập tin",
416
+ "extract_f0_method": "Bắt đầu trích xuất cao độ với {num_processes} lõi với phương pháp trích xuất {f0_method}...",
417
+ "extract_f0": "Trích Xuất Cao Độ",
418
+ "extract_f0_success": "Quá trình trích xuất cao độ đã hoàn tất vào {elapsed_time} giây.",
419
+ "NaN": "chứa giá trị NaN và sẽ bị bỏ qua.",
420
+ "start_extract_hubert": "Đang bắt đầu nhúng trích xuất...",
421
+ "not_found_audio_file": "Không tìm thấy tập tin âm thanh. Hãy chắc chắn rằng bạn đã cung cấp âm thanh chính xác.",
422
+ "process_error": "Đã xảy ra lỗi khi xử lý",
423
+ "extract_hubert_success": "Quá trình trích xuất nhúng đã hoàn tất trong {elapsed_time} giây.",
424
+ "export_process": "Đường dẫn của mô hình",
425
+ "extract_error": "Đã xảy ra lỗi khi trích xuất dữ liệu",
426
+ "extract_success": "Đã trích xuất hoàn tất mô hình",
427
+ "min_length>=min_interval>=hop_size": "min_length lớn hơn hoặc bằng min_interval lớn hơn hoặc bằng hop_size là bắt buộc",
428
+ "max_sil_kept>=hop_size": "max_sil_kept lớn hơn hoặc bằng hop_size là bắt buộc",
429
+ "start_preprocess": "Đang bắt đầu xử lý dữ liệu với {num_processes} lõi xử lý...",
430
+ "not_integer": "Thư mục ID giọng nói phải là số nguyên, thay vào đó có",
431
+ "preprocess_success": "Quá trình xử lý hoàn tất sau {elapsed_time} giây.",
432
+ "preprocess_model_success": "Đã hoàn tất xử lý trước dữ liệu cho mô hình",
433
+ "turn_on_dereverb": "Điều kiện cần để sử dụng tách vang giọng bè là phải bật tách vang",
434
+ "turn_on_separator_backing": "Điều kiện cần để sử dụng tách vang giọng bè là phải bật tách bè",
435
+ "backing_model_ver": "Phiên bản mô hình của tách bè",
436
+ "clean_audio_success": "Đã làm sạch âm hoàn tất!",
437
+ "separator_error": "Đã xảy ra lỗi khi tách nhạc",
438
+ "separator_success": "Quá trình tách nhạc đã hoàn tất sau: {elapsed_time} giây",
439
+ "separator_process_2": "Đang xử lý tách nhạc",
440
+ "separator_success_2": "Đã tách nhạc hoàn tất!",
441
+ "separator_process_backing": "Đang xử lý tách giọng bè",
442
+ "separator_process_backing_success": "Đã tách giọng bè hoàn tất!",
443
+ "process_original": "Đang xử lý tách âm vang giọng gốc...",
444
+ "process_original_success": "Đã tách âm vang giọng gốc hoàn tất!",
445
+ "process_main": "Đang xử lý tách âm vang giọng chính...",
446
+ "process_main_success": "Đã tách âm vang giọng chính hoàn tất!",
447
+ "process_backing": "Đang xử lý tách âm vang giọng bè...",
448
+ "process_backing_success": "Đã tách âm vang giọng bè hoàn tất!",
449
+ "save_every_epoch": "Lưu mô hình sau: ",
450
+ "total_e": "Tổng số kỷ nguyên huấn luyện: ",
451
+ "dorg": "Huấn luyện trước G: {pretrainG} | Huấn luyện trước D: {pretrainD}",
452
+ "training_f0": "Huấn luyện cao độ",
453
+ "not_gpu": "Không phát hiện thấy GPU, hoàn nguyên về CPU (không khuyến nghị)",
454
+ "not_found_checkpoint": "Không tìm thấy tệp điểm đã lưu: {checkpoint_path}",
455
+ "save_checkpoint": "Đã tải lại điểm đã lưu '{checkpoint_path}' (kỷ nguyên {checkpoint_dict})",
456
+ "save_model": "Đã lưu mô hình '{checkpoint_path}' (kỷ nguyên {iteration})",
457
+ "sr_does_not_match": "{sample_rate} Tỉ lệ mẫu không khớp với mục tiêu {sample_rate2} Tỉ lệ mẫu",
458
+ "spec_error": "Đã xảy ra lỗi khi nhận thông số kỹ thuật từ {spec_filename}: {e}",
459
+ "time_or_speed_training": "thời gian={current_time} | tốc độ huấn luyện={elapsed_time_str}",
460
+ "savemodel": "Đã lưu mô hình '{model_dir}' (kỷ nguyên {epoch} và bước {step})",
461
+ "model_author": "Ghi công mô hình cho {model_author}",
462
+ "unregistered": "Mô hình không được ghi chép",
463
+ "not_author": "Mô hình không được ghi chép",
464
+ "training_author": "Tên chủ mô hình",
465
+ "training_author_info": "Nếu bạn muốn ghi công mô hình hãy nhập tên của bạn vào đây",
466
+ "extract_model_error": "Đã xảy ra lỗi khi trích xuất mô hình",
467
+ "start_training": "Bắt đầu huấn luyện",
468
+ "import_pretrain": "Đã nạp huấn luyện trước ({dg}) '{pretrain}'",
469
+ "not_using_pretrain": "Sẽ không có huấn luyện trước ({dg}) được sử dụng",
470
+ "training_warning": "CẢNH BÁO: Tổn thất tạo ra thấp hơn đã bị vượt quá tổn thất thấp hơn trong kỷ nguyên tiếp theo.",
471
+ "overtraining_find": "Tập luyện quá sức được phát hiện ở kỷ nguyên {epoch} với mất mát g được làm mịn {smoothed_value_gen} và mất mát d được làm mịn {smoothed_value_disc}",
472
+ "best_epoch": "Kỷ nguyên mới tốt nhất {epoch} với mất mát g được làm mịn {smoothed_value_gen} và mất mát d được làm mịn {smoothed_value_disc}",
473
+ "success_training": "Đã đào tạo hoàn tất với {epoch} kỷ nguyên, {global_step} các bước và {loss_gen_all} mất mát gen.",
474
+ "training_info": "Tổn thất gen thấp nhất: {lowest_value_rounded} ở ký nguyên {lowest_value_epoch}, bước {lowest_value_step}",
475
+ "model_training_info": "{model_name} | kỷ nguyên={epoch} | bước={global_step} | {epoch_recorder} | giá trị thấp nhất={lowest_value_rounded} (kỷ nguyên {lowest_value_epoch} và bước {lowest_value_step}) | Số kỷ nguyên còn lại để tập luyện quá sức: g/total: {remaining_epochs_gen} d/total: {remaining_epochs_disc} | làm mịn mất mát gen={smoothed_value_gen} | làm mịn mất mát disc={smoothed_value_disc}",
476
+ "model_training_info_2": "{model_name} | kỷ nguyên={epoch} | bước={global_step} | {epoch_recorder} | giá trị thấp nhất={lowest_value_rounded} (kỷ nguyên {lowest_value_epoch} và bước {lowest_value_step})",
477
+ "model_training_info_3": "{model_name} | kỷ nguyên={epoch} | bước={global_step} | {epoch_recorder}",
478
+ "training_error": "Đã xảy ra lỗi khi huấn luyện mô hình:",
479
+ "separator_info": "Đang khởi tạo với đường dẫn đầu ra: {output_dir}, định dạng đầu ra: {output_format}",
480
+ "output_dir_is_none": "Thư mục đầu ra không được chỉ định. Sử dụng thư mục làm việc hiện tại.",
481
+ ">0or=1": "Ngưỡng chuẩn hóa phải lớn hơn 0 và nhỏ hơn hoặc bằng 1.",
482
+ "output_single": "Đã yêu cầu đầu ra một gốc nên chỉ có một tệp đầu ra ({output_single_stem}) sẽ được ghi",
483
+ "step2": "Bước thứ hai sẽ được đảo ngược bằng cách sử dụng quang phổ thay vì dạng sóng. Điều này có thể cải thiện chất lượng nhưng chậm hơn một chút.",
484
+ "name_ver": "Phiên bản {name}",
485
+ "os": "Hệ điều hành",
486
+ "platform_info": "Hệ thống: {system_info} Tên: {node} Phát hành: {release} Máy: {machine} Vi xử lý: {processor}",
487
+ "none_ffmpeg": "FFmpeg chưa được cài đặt. Vui lòng cài đặt FFmpeg để sử dụng gói này.",
488
+ "install_onnx": "Gói {pu} ONNX Runtime được cài đặt cùng với phiên bản",
489
+ "running_in_cpu": "Không thể cấu hình khả năng tăng tốc phần cứng, chạy ở chế độ CPU",
490
+ "running_in_cuda": "CUDA có sẵn trong Torch, cài đặt thiết bị Torch thành CUDA",
491
+ "onnx_have": "ONNXruntime có sẵn {have}, cho phép tăng tốc",
492
+ "onnx_not_have": "{have} không có sẵn trong ONNXruntime, do đó khả năng tăng tốc sẽ KHÔNG được bật",
493
+ "python_not_install": "Gói Python: {package_name} chưa được cài đặt",
494
+ "hash": "Tính hash của tệp mô hình {model_path}",
495
+ "ioerror": "IOError đang tìm kiếm -10 MB hoặc đọc tệp mô hình để tính toán hàm băm: {e}",
496
+ "cancel_download": "Tệp đã tồn tại tại {output_path}, bỏ qua quá trình tải xuống",
497
+ "download_model": "Đang tải tệp từ {url} xuống {output_path} với thời gian chờ 300 giây",
498
+ "download_error": "Không tải được tệp xuống từ {url}, mã phản hồi: {status_code}",
499
+ "vip_model": "Mô hình: '{model_friendly_name}' là mô hình cao cấp, được Anjok07 dự định chỉ dành cho những người đăng ký trả phí truy cập.",
500
+ "vip_print": "Này bạn, nếu bạn chưa đăng ký, vui lòng cân nhắc việc hỗ trợ cho nhà phát triển của UVR, Anjok07 bằng cách đăng ký tại đây: https://patreon.com/uvr",
501
+ "search_model": "Đang tìm kiếm mô hình {model_filename} trong tập tin các mô hình được hỗ trợ trong nhóm",
502
+ "load_download_json": "Đã tải danh sách tải xuống mô hình",
503
+ "single_model": "Đã xác định được tệp mô hình đơn: {model_friendly_name}",
504
+ "not_found_model": "Không tìm thấy mô hình trong kho lưu trữ UVR, đang cố tải xuống từ kho lưu trữ mô hình phân tách âm thanh...",
505
+ "single_model_path": "Đường dẫn trả về cho tệp mô hình đơn: {model_path}",
506
+ "find_model": "Đã tìm thấy tên tệp đầu vào {model_filename} trong mô hình nhiều tệp: {model_friendly_name}",
507
+ "find_models": "Đã xác định mô hình nhiều tệp: {model_friendly_name}, lặp qua các tệp để tải xuống",
508
+ "find_path": "Đang cố gắng xác định ĐƯỜNG DẪN tải xuống cho cặp cấu hình",
509
+ "not_found_model_warehouse": "Không tìm thấy mô hình trong kho lưu trữ UVR, đang cố tải xuống từ kho lưu trữ mô hình phân tách âm thanh...",
510
+ "yaml_warning": "Tên mô hình bạn đã chỉ định, {model_filename} thực sự là tệp cấu hình mô hình chứ không phải tệp mô hình.",
511
+ "yaml_warning_2": "Chúng tôi đã tìm thấy một mô hình khớp với tệp cấu hình này: {config_key} nên chúng tôi sẽ sử dụng tệp mô hình đó cho lần chạy này.",
512
+ "yaml_warning_3": "Để tránh hành vi gây nhầm lẫn/không nhất quán trong tương lai, thay vào đó hãy chỉ định tên tệp mô hình thực tế.",
513
+ "yaml_debug": "Không tìm thấy tệp cấu hình mô hình YAML trong kho lưu trữ UVR, đang cố tải xuống từ kho lưu trữ mô hình phân tách âm thanh...",
514
+ "download_model_friendly": "Tất cả các tệp đã tải xuống cho mô hình {model_friendly_name}, trả về đường dẫn ban đầu {model_path}",
515
+ "not_found_model_2": "Không tìm thấy tệp mô hình {model_filename} trong các tệp mô hình được hỗ trợ",
516
+ "load_yaml": "Đang tải dữ liệu mô hình từ YAML tại đường dẫn {model_data_yaml_filepath}",
517
+ "load_yaml_2": "Dữ liệu mô hình được tải từ tệp YAML: {model_data}",
518
+ "hash_md5": "Tính hash MD5 cho tệp mô hình để xác định các tham số mô hình từ dữ liệu UVR...",
519
+ "model_hash": "Mô hình {model_path} có hash {model_hash}",
520
+ "mdx_data": "Đường dẫn dữ liệu mô hình MDX được đặt thành {mdx_model_data_path}",
521
+ "load_mdx": "Đang tải các tham số mô hình MDX từ tệp dữ liệu mô hình UVR...",
522
+ "model_not_support": "Tệp mô hình không được hỗ trợ: không thể tìm thấy tham số cho hash MD5 {model_hash} trong tệp dữ liệu mô hình UVR cho vòm MDX.",
523
+ "uvr_json": "Dữ liệu mô hình được tải từ UVR JSON bằng hàm băm {model_hash}: {model_data}",
524
+ "loading_model": "Đang tải mô hình {model_filename}...",
525
+ "download_model_friendly_2": "Đã tải xuống mô hình, tên thân thiện: {model_friendly_name}, Đường dẫn mô hình: {model_path}",
526
+ "model_type_not_support": "Loại mô hình không được hỗ trợ: {model_type}",
527
+ "demucs_not_support_python<3.10": "Các mô hình Demucs yêu cầu phiên bản Python 3.10 trở lên.",
528
+ "import_module": "Nhập mô-đun cho loại mô hình",
529
+ "initialization": "Khởi tạo lớp phân cách cho loại mô hình",
530
+ "loading_model_success": "Đang tải mô hình hoàn tất.",
531
+ "loading_model_duration": "Tải thời lượng mô hình",
532
+ "starting_separator": "Bắt đầu quá trình tách cho đường dẫn tập tin âm thanh",
533
+ "normalization": "Ngưỡng chuẩn hóa được đặt thành {normalization_threshold}, dạng sóng sẽ hạ xuống biên độ tối đa này để tránh bị cắt.",
534
+ "loading_separator_model": "Đang tải xuống mô hình {model_filename}...",
535
+ "separator_success_3": "Quá trình tách hoàn tất.",
536
+ "separator_duration": "Thời gian tách",
537
+ "downloading_model": "Đã tải xuống mô hình, loại: {model_type}, tên thân thiện: {model_friendly_name}, đường dẫn mô hình: {model_path}, dữ liệu mô hình: {model_data_dict_size} mục",
538
+ "demucs_info": "Thông số Demucs: Kích thước phân đoạn = {segment_size}, Kích hoạt kích thước phân đoạn = {segments_enabled}",
539
+ "demucs_info_2": "Thông số Demucs: Số lượng dự đoán = {shifts}, Chồng chéo = {overlap}",
540
+ "start_demucs": "Khởi tạo hoàn tất Demucs Separator",
541
+ "start_separator": "Bắt đầu quá trình tách...",
542
+ "prepare_mix": "Chuẩn bị hỗn hợp...",
543
+ "demix": "Hỗn hợp đã chuẩn bị để khử trộn. Hình dạng: {shape}",
544
+ "cancel_mix": "Đang tải mô hình để hủy trộn...",
545
+ "model_review": "Mô hình được tải và đặt ở chế độ đánh giá.",
546
+ "del_gpu_cache_after_demix": "Đã xóa bộ nhớ đệm mô hình và GPU sau khi hủy trộn.",
547
+ "process_output_file": "Đang xử lý tập tin đầu ra...",
548
+ "source_length": "Đang xử lý mảng nguồn, độ dài nguồn là {source_length}",
549
+ "process_ver": "Đang xử lý nguồn phiên bản...",
550
+ "set_map": "Đặt bản đồ nguồn thành {part} phần gốc...",
551
+ "process_all_part": "Xử lý cho tất cả các phần gốc...",
552
+ "skip_part": "Bỏ qua phần viết gốc {stem_name} vì out_single_stem được đặt thành {output_single_stem}...",
553
+ "starting_demix_demucs": "Đang bắt đầu quá trình trộn trong demix_demucs...",
554
+ "model_infer": "Chạy mô hình suy luận...",
555
+ "name_not_pretrained": "{name} không phải là một mô hình được đào tạo trước hay một túi mô hình.",
556
+ "invalid_checksum": "Tổng kiểm tra không hợp lệ cho tệp {path}, dự kiến {checksum} nhưng lại nhận được {actual_checksum}",
557
+ "mdx_info": "Thông số MDX: Kích thước lô = {batch_size}, Kích thước phân đoạn = {segment_size}",
558
+ "mdx_info_2": "Thông số MDX: Chồng chéo = {overlap}, Hop_length = {hop_length}, Kích hoạt khữ nhiễu = {enable_denoise}",
559
+ "mdx_info_3": "Thông số MDX",
560
+ "load_model_onnx": "Đang tải mô hình ONNX để suy luận...",
561
+ "load_model_onnx_success": "Đã tải mô hình hoàn tất bằng phiên suy luận ONNXruntime.",
562
+ "onnx_to_pytorch": "Mô hình được chuyển đổi từ onnx sang pytorch do kích thước phân đoạn không khớp với dim_t, quá trình xử lý có thể chậm hơn.",
563
+ "stft": "STFT nghịch đảo được áp dụng. Trả về kết quả có hình dạng",
564
+ "no_denoise": "Mô hình chạy trên quang phổ mà không khử nhiễu.",
565
+ "mix": "Đang chuẩn bị trộn cho tệp âm thanh đầu vào {audio_file_path}...",
566
+ "normalization_demix": "Chuẩn hóa hỗn hợp trước khi khử trộn...",
567
+ "mix_success": "Quá trình trộn hoàn tất.",
568
+ "primary_source": "Bình thường hóa nguồn chính...",
569
+ "secondary_source": "Sản xuất nguồn thứ cấp: Trộn ở chế độ trộn phù hợp",
570
+ "invert_using_spec": "Đảo ngược thân thứ cấp bằng cách sử dụng quang phổ khi invert_USE_spec được đặt thành True",
571
+ "invert_using_spec_2": "Đảo ngược thân thứ cấp bằng cách trừ đi thân cây được chuyển đổi từ hỗn hợp ban đầu được chuyển đổi",
572
+ "enable_denoise": "Mô hình chạy trên cả phổ âm và dương để khử nhiễu.",
573
+ "is_match_mix": "is_match_mix: dự đoán phổ thu được trực tiếp từ đầu ra STFT.",
574
+ "save_secondary_stem_output_path": "Đang lưu phần gốc {stem_name} vào {stem_output_path}...",
575
+ "starting_model": "Đang khởi tạo cài đặt mô hình...",
576
+ "input_info": "Thông số đầu vào của mô hình",
577
+ "model_settings": "Cài đặt mô hình",
578
+ "initialize_mix": "Đang khởi tạo kết hợp với is_ckpt = {is_ckpt}. Hình dạng trộn ban đầu: {shape}",
579
+ "!=2": "Dự kiến có tín hiệu âm thanh 2 kênh nhưng lại có {shape} kênh",
580
+ "process_check": "Xử lý ở chế độ điểm kiểm tra...",
581
+ "stft_2": "STFT được áp dụng trên hỗn hợp. Hình dạng quang phổ: {shape}",
582
+ "cache": "Khoảng đệm được tính toán",
583
+ "shape": "Hình dạng hỗn hợp sau khi đệm: {shape}, Số phần: {num_chunks}",
584
+ "process_no_check": "Xử lý ở chế độ không có điểm kiểm tra...",
585
+ "n_sample_or_pad": "Số lượng mẫu: {n_sample}, Đã tính đệm: {pad}",
586
+ "shape_2": "Hình dạng hỗn hợp sau khi đệm",
587
+ "process_part": "Đoạn đã xử lý {mix_waves}: Bắt đầu {i}, Kết thúc {ii}",
588
+ "mix_waves_to_tensor": "Đã chuyển đổi mix_waves thành tensor. Hình dạng tensor: {shape}",
589
+ "mix_match": "Chế độ trộn Match; áp dụng hệ số bù.",
590
+ "tar_waves": "Sóng tar_waves. Hình dạng",
591
+ "normalization_2": "Chuẩn hóa kết quả bằng cách chia kết quả cho số chia.",
592
+ "mix_wave": "Đang xử lý lô mix_wave",
593
+ "mix_or_batch": "Trộn phần chia thành từng đợt. Số lượng lô",
594
+ "demix_is_match_mix": "Bắt đầu quá trình hủy trộn với is_match_mix,",
595
+ "mix_shape": "Hỗn hợp phần gốc được lưu trữ. Hình dạng",
596
+ "chunk_size_or_overlap": "Kích thước đoạn để trộn phù hợp: {chunk_size}, Chồng chéo: {overlap}",
597
+ "chunk_size_or_overlap_standard": "Kích thước phần tiêu chuẩn: {chunk_size}, Chồng chéo: {overlap}",
598
+ "calc_size": "Kích thước được tạo được tính toán",
599
+ "window": "Cửa sổ được áp dụng cho đoạn này.",
600
+ "process_part_2": "Đang xử lý đoạn {total}/{total_chunks}: Bắt đầu {start}, Kết thúc {end}",
601
+ "all_process_part": "Tổng số phần cần xử lý",
602
+ "step_or_overlap": "Kích thước bước để xử lý các phần: {step} khi chồng chéo được đặt thành {overlap}.",
603
+ "mix_cache": "Hỗn hợp được chuẩn bị với lớp đệm. Hình dạng hỗn hợp",
604
+ "dims": "Không thể sử dụng mã hóa vị trí sin/cos với thứ nguyên lẻ (có dim={dims})",
605
+ "activation": "kích hoạt phải là relu/gelu, không phải {activation}",
606
+ "length_or_training_length": "Độ dài cho trước {length} dài hơn thời lượng huấn luyện {training_length}",
607
+ "type_not_valid": "Loại không hợp lệ cho",
608
+ "del_parameter": "Bỏ tham số không tồn tại ",
609
+ "info": "Các thông số phổ biến: Tên mô hình = {model_name}, Đường dẫn mô hình = {model_path}",
610
+ "info_2": "Các thông số phổ biến: Đường dẫn đầu ra = {output_dir}, Định dạng đầu ra = {output_format}",
611
+ "info_3": "Các thông số phổ biến: ngưỡng chuẩn hóa = {normalization_threshold}",
612
+ "info_4": "Các thông số phổ biến: Kích hoạt khữ nhiễu = {enable_denoise}, Đầu ra một phần = {output_single_stem}",
613
+ "info_5": "Các thông số phổ biến: Đảo ngược bằng cách sử dụng thông số kỹ thuật = {invert_using_spec}, tỷ lệ mẫu = {sample_rate}",
614
+ "info_6": "Các thông số phổ biến: Tên phần gốc chính = {primary_stem_name}, Tên phần gốc phụ = {secondary_stem_name}",
615
+ "info_7": "Các thông số phổ biến: Là Karaoke = {is_karaoke}, là mô hình bv = {is_bv_model}, tái cân bằng mô hình bv = {bv_model_rebalance}",
616
+ "success_process": "Đang hoàn tất quá trình xử lý phần gốc {stem_name} và ghi âm thanh...",
617
+ "load_audio": "Đang tải âm thanh từ tập tin",
618
+ "load_audio_success": "Đã tải âm thanh. Tốc độ mẫu: {sr}, Hình dạng âm thanh: {shape}",
619
+ "convert_mix": "Chuyển đổi mảng hỗn hợp được cung cấp.",
620
+ "convert_shape": "Hình dạng hỗn hợp chuyển đổi: {shape}",
621
+ "audio_not_valid": "Tệp âm thanh {audio_path} trống hoặc không hợp lệ",
622
+ "audio_valid": "Tệp âm thanh hợp lệ và chứa dữ liệu.",
623
+ "mix_single": "Hỗn hợp là đơn sắc. Chuyển đổi sang âm thanh nổi.",
624
+ "convert_mix_audio": "Đã chuyển đổi thành bản trộn âm thanh nổi.",
625
+ "mix_success_2": "Công tác chuẩn bị hỗn hợp đã hoàn tất.",
626
+ "duration": "Thời lượng âm thanh là {duration_hours} giờ ({duration_seconds} giây).",
627
+ "write": "Sử dụng {name} để viết.",
628
+ "write_audio": "Đang nhập {name} bằng đường dẫn gốc:",
629
+ "original_not_valid": "Cảnh báo: mảng nguồn gốc gần như im lặng hoặc trống.",
630
+ "shape_audio": "Hình dạng dữ liệu âm thanh trước khi xử lý",
631
+ "convert_data": "Kiểu dữ liệu trước khi chuyển đổi",
632
+ "original_source_to_int16": "Đã chuyển đổi original_source thành int16.",
633
+ "shape_audio_2": "Hình dạng dữ liệu âm thanh xen kẽ",
634
+ "create_audiosegment": "Đã tạo AudioSegment hoàn tất.",
635
+ "create_audiosegment_error": "Lỗi cụ thể khi tạo AudioSegment",
636
+ "export_error": "Lỗi xuất file âm thanh",
637
+ "export_success": "Đã xuất hoàn tất tệp âm thanh sang",
638
+ "clean": "Chạy thu gom rác...",
639
+ "clean_cache": "Xóa bộ nhớ đệm {name}...",
640
+ "del_path": "Xóa đường dẫn, nguồn và gốc của tệp âm thanh đầu vào...",
641
+ "not_success": "Quá trình đăng không hoàn tất: ",
642
+ "resample_error": "Lỗi trong quá trình lấy mẫu lại",
643
+ "shapes": "Hình dạng",
644
+ "wav_resolution": "Loại độ phân giải",
645
+ "warnings": "Cảnh báo: Đã phát hiện các giá trị cực kỳ hung hãn",
646
+ "warnings_2": "Cảnh báo: Đã phát hiện NaN hoặc giá trị vô hạn trong đầu vào sóng. Hình dạng",
647
+ "process_file": "Đang xử lý tập tin... \n",
648
+ "save_instruments": "Lưu bản nhạc ngược...",
649
+ "assert": "Các tệp âm thanh phải có hình dạng giống nhau - Mix: {mixshape}, Inst: {instrumentalshape}",
650
+ "rubberband": "Không thể thực Rubberband. Vui lòng xác minh rằng Rubberband-cli đã được cài đặt.",
651
+ "rate": "Tỉ lệ phải hoàn toàn tích cực",
652
+ "gdown_error": "Không thể truy xuất liên kết công khai của tệp. Bạn có thể cần phải thay đổi quyền thành bất kỳ ai có liên kết hoặc đã có nhiều quyền truy cập.",
653
+ "to": "Đến:",
654
+ "gdown_value_error": "Phải chỉ định đường dẫn hoặc id",
655
+ "missing_url": "Thiếu đường dẫn",
656
+ "mac_not_match": "MAC không khớp",
657
+ "file_not_access": "Tệp tin không thể truy cập",
658
+ "int_resp==-3": "Yêu cầu không hoàn tất, đang thử lại",
659
+ "search_separate": "Tìm bản tách...",
660
+ "found_choice": "Tìm thấy {choice}",
661
+ "separator==0": "Không tìm thấy bản tách nào!",
662
+ "select_separate": "Chọn bản tách",
663
+ "start_app": "Khởi động giao diện...",
664
+ "provide_audio": "Nhập đường dẫn đến tệp âm thanh",
665
+ "set_torch_mps": "Cài đặt thiết bị Torch thành MPS",
666
+ "googletts": "Chuyển đổi văn bản bằng google",
667
+ "pitch_info_2": "Cao độ giọng nói của bộ chuyển đổi văn bản",
668
+ "waveform": "Dạng sóng phải có hình dạng (# khung, # kênh)",
669
+ "freq_mask_smooth_hz": "freq_mask_smooth_hz cần ít nhất là {hz}Hz",
670
+ "time_mask_smooth_ms": "time_mask_smooth_ms cần ít nhất là {ms}ms",
671
+ "x": "x phải lớn hơn",
672
+ "xn": "xn phải lớn hơn",
673
+ "not_found_pid": "Không thấy tiến trình nào!",
674
+ "end_pid": "Đã kết thúc tiến trình!",
675
+ "not_found_separate_model": "Không tìm thấy tệp mô hình tách nhạc nào!",
676
+ "not_found_pretrained": "Không tìm thấy tệp mô hình huấn luyện trước nào!",
677
+ "not_found_log": "Không tìm thấy tệp nhật ký nào!",
678
+ "not_found_predictors": "Không tìm thấy tệp mô hình dự đoán nào!",
679
+ "not_found_embedders": "Không tìm thấy tệp mô hình nhúng nào!",
680
+ "provide_folder": "Vui lòng cung cấp thư mục hợp lệ!",
681
+ "empty_folder": "Thư mục dữ liệu trống!",
682
+ "vocoder": "Bộ mã hóa",
683
+ "vocoder_info": "Bộ mã hóa giọng nói dùng để phân tích và tổng hợp tín hiệu giọng nói của con người để chuyển đổi giọng nói.\n\nDefault: Tùy chọn này là HiFi-GAN-NSF, tương thích với tất cả các RVC\n\nMRF-HiFi-GAN: Độ trung thực cao hơn.\n\nRefineGAN: Chất lượng âm thanh vượt trội.",
684
+ "code_error": "Lỗi: Nhận mã trạng thái",
685
+ "json_error": "Lỗi: Không thể phân tích từ phản hồi.",
686
+ "requests_error": "Yêu cầu thất bại: {e}",
687
+ "memory_efficient_training": "Sử dụng hiệu quả bộ nhớ",
688
+ "not_use_pretrain_error_download": "Sẽ không dùng huấn luyện trước vì không có mô hình",
689
+ "provide_file_settings": "Vui lòng cung cấp tệp cài đặt trước!",
690
+ "load_presets": "Đã tải tệp cài đặt trước {presets}",
691
+ "provide_filename_settings": "Vui lòng cung cấp tên tệp cài đặt trước!",
692
+ "choose1": "Vui lòng chọn 1 để xuất!",
693
+ "export_settings": "Đã xuất tệp cài đặt trước {name}",
694
+ "use_presets": "Sử dụng tệp cài đặt trước",
695
+ "file_preset": "Tệp cài đặt trước",
696
+ "load_file": "Tải tệp",
697
+ "export_file": "Xuất tệp cài đặt trước",
698
+ "save_clean": "Lưu làm sạch",
699
+ "save_autotune": "Lưu tự điều chỉnh",
700
+ "save_pitch": "Lưu cao độ",
701
+ "save_index_2": "Lưu ảnh hưởng chỉ mục",
702
+ "save_resample": "Lưu lấy mẫu lại",
703
+ "save_filter": "Lưu trung vị",
704
+ "save_envelope": "Lưu đường bao âm",
705
+ "save_protect": "Lưu bảo vệ âm",
706
+ "save_split": "Lưu cắt âm",
707
+ "filename_to_save": "Tên khi lưu tệp",
708
+ "upload_presets": "Tải lên tệp cài đặt",
709
+ "stop": "Dừng tiến trình",
710
+ "stop_separate": "Dừng Tách Nhạc",
711
+ "stop_convert": "Dừng Chuyển Đổi",
712
+ "stop_create_dataset": "Dừng Tạo Dữ Liệu",
713
+ "stop_training": "Dừng Huấn Luyện",
714
+ "stop_extract": "Dừng Xử Lí Dữ Liệu",
715
+ "stop_preprocess": "Dừng Trích Xuất Dữ Liệu",
716
+ "not_found_presets": "Không tìm thấy tệp cài đặt sẳn nào trong thư mục!",
717
+ "port": "Cổng {port} không thể dùng! Giảm cổng xuống một...",
718
+ "empty_json": "{file}: Bị lỗi hoặc trống",
719
+ "thank": "Cảm ơn bạn đã báo cáo lỗi và cũng xin lỗi bạn vì sự bất tiện do lỗi gây ra này!",
720
+ "error_read_log": "Đã xảy ra lỗi khi đọc các tệp nhật ký!",
721
+ "error_send": "Đã xảy ra lỗi khi gửi báo cáo! Hãy liên hệ tôi qua Discord: pham_huynh_anh!",
722
+ "report_bugs": "Báo Cáo Lỗi",
723
+ "agree_log": "Đồng ý cung cấp tất cả tệp nhật ký",
724
+ "error_info": "Mô tả lỗi",
725
+ "error_info_2": "Cung cấp thêm thông tin về lỗi",
726
+ "report_bug_info": "Báo cáo các lỗi xảy ra khi sử dụng chương trình",
727
+ "sr_info": "LƯU Ý: MỘT SỐ ĐỊNH DẠNG KHÔNG HỖ TRỢ TRÊN 48000",
728
+ "report_info": "Nếu được bạn hãy đồng ý cung cấp các tệp nhật ký để hỗ trợ quá trình sửa lỗi\n\nNếu không cung cấp các tệp nhật ký bạn hãy mô tả chi tiết lỗi, lỗi xảy ra khi nào ở đâu\n\nNếu hệ thống báo cáo này bị lỗi nốt thì bạn có thể liên hệ qua [ISSUE]({github}) hoặc discord: `pham_huynh_anh`",
729
+ "default_setting": "Đã xảy ra lỗi khi sử dụng tách, đặt tất cả cài đặt về mặc định...",
730
+ "dataset_folder1": "Vui lòng nhập tên thư mục dữ liệu",
731
+ "checkpointing_err": "Các tham số của mô hình đào tạo trước như tốc độ mẫu hoặc kiến trúc không khớp với mô hình đã chọn.",
732
+ "start_onnx_export": "Bắt đầu chuyển đổi mô hình sang dạng onnx...",
733
+ "convert_model": "Chuyển Đổi Mô Hình",
734
+ "pytorch2onnx": "Chuyển Đổi Mô Hình PYTORCH Sang ONNX",
735
+ "pytorch2onnx_markdown": "Chuyển đổi mô hình RVC từ dạng pytorch sang onnx để tối ưu cho việc chuyển đổi âm thanh",
736
+ "error_readfile": "Đã xảy ra lỗi khi đọc tệp!",
737
+ "read_sf": "Đọc tệp âm thanh bằng soundfile...",
738
+ "read_librosa": "Đọc tệp âm thanh bằng librosa do soundfile không hỗ trợ...",
739
+ "f0_onnx_mode": "Chế độ F0 ONNX",
740
+ "f0_onnx_mode_info": "Trích xuất cao độ bằng mô hình ONNX có thể giúp tăng tốc độ",
741
+ "formantshift": "Dịch chuyển cao độ và âm sắc",
742
+ "formant_qfrency": "Tần số cho dịch chuyển định dạng",
743
+ "formant_timbre": "Âm sắc để chuyển đổi định dạng",
744
+ "time_frames": "Thời Gian (Khung)",
745
+ "Frequency": "Tần Số (Hz)",
746
+ "f0_extractor_tab": "Trích xuất F0",
747
+ "f0_extractor_markdown": "## Trích Xuất Cao Độ",
748
+ "f0_extractor_markdown_2": "Trích xuất cao độ F0 nhằm mục đích sử dụng cho suy luận chuyển đổi âm thanh",
749
+ "start_extract": "Bắt đầu quá trình trích xuất...",
750
+ "extract_done": "Hoàn tất quá trình trích xuất!",
751
+ "f0_file": "Sử dụng tệp F0 trích xuất trước",
752
+ "upload_f0": "Tải lên tệp F0",
753
+ "f0_file_2": "Tệp F0",
754
+ "clean_f0_file": "Dọp dẹp tệp F0",
755
+ "embed_mode": "Chế độ nhúng",
756
+ "embed_mode_info": "Trích xuất nhúng bằng các mô hình khác nhau",
757
+ "close": "Ứng dụng đang tắt...",
758
+ "start_whisper": "Bắt đầu nhận dạng giọng nói bằng Whisper...",
759
+ "whisper_done": "Đã nhận dạng giọng nói hoàn tất!",
760
+ "process_audio": "Xử lí trước âm thanh...",
761
+ "process_done_start_convert": "Hoàn tất xử lí âm thanh! tiến hành chuyển đổi âm thanh...",
762
+ "convert_with_whisper": "Chuyển Đổi Âm Thanh Với Whisper",
763
+ "convert_with_whisper_info": "Chuyển đổi âm thanh bằng mô hình giọng nói đã được huấn luyện kèm với mô hình Whisper để nhận diện giọng nói\n\nWhisper sẽ nhận dạng các giọng nói khác nhau sau đó cắt các giọng riêng ra rồi dùng mô hình RVC để chuyển đổi lại các phân đoạn đó\n\nMô hình Whisper có thể hoạt động không chính xác làm cho đầu ra có thể kì lạ",
764
+ "num_spk": "Số lượng giọng",
765
+ "num_spk_info": "Số lượng giọng nói có trong âm thanh",
766
+ "model_size": "Kích thước mô hình Whisper",
767
+ "model_size_info": "Kích thước mô hình Whisper\n\nCác mô hình large có thể đưa ra các đầu ra kì lạ",
768
+ "editing": "Chỉnh Sửa",
769
+ "inverting": "Đảo Ngược",
770
+ "steps": "Bước",
771
+ "source_prompt": "Lời Nhắc Nguồn",
772
+ "target_prompt": "Lời Nhắc",
773
+ "cfg_scale_src": "Hướng Dẫn Nguồn",
774
+ "cfg_scale_tar": "Hướng Dẫn Mục Tiêu",
775
+ "t_start": "Mức Độ Chỉnh Sửa",
776
+ "save_compute": "Chỉnh Sửa Hiệu Quả",
777
+ "error_edit": "Đã xảy ra lỗi khi chỉnh sửa nhạc nền {e}",
778
+ "start_edit": "Bắt đầu chỉnh sửa nhạc nền {input_path}...",
779
+ "edit_success": "Đã hoàn thành chỉnh sửa nhạc nền sau {time} với đầu ra {output_path}",
780
+ "audio_editing": "Chỉnh Sửa Nhạc Nền",
781
+ "audio_editing_info": "## Chỉnh Sửa Nhạc Nền Bằng Mô Hình Audioldm2",
782
+ "audio_editing_markdown": "Chỉnh sửa nhạc nền bằng mô hình của Audioldm2 có thể giúp thay đổi loại nhạc cụ bên trong nhạc nền",
783
+ "target_prompt_info": "Mô tả đầu ra đã chỉnh sửa mong muốn của bạn",
784
+ "cfg_scale_src_info": "Mức độ ảnh hưởng của gốc lên kết quả đầu ra. Giá trị cao hơn giữ lại nhiều đặc điểm hơn từ nguồn. Giá trị thấp hơn làm cho hệ thống tự do hơn trong việc biến đổi.",
785
+ "cfg_scale_tar_info": "Mức độ mục tiêu ảnh hưởng đến kết quả cuối cùng. Giá trị cao hơn sẽ ép kết quả theo đặc điểm của mục tiêu. Giá trị thấp hơn sẽ cân bằng giữa nguồn và mục tiêu.",
786
+ "audioldm2_model": "Mô hình Audioldm2",
787
+ "audioldm2_model_info": "Chọn mô hình Audioldm2 theo mong muốn của bạn\n\nViệc tải trọng số và suy luận cũng sẽ tốn nhiều thời gian tùy thuộc vào GPU của bạn",
788
+ "source_prompt_info": "Tùy chọn: Mô tả đầu vào âm thanh gốc",
789
+ "t_start_info": "Mức chỉnh sửa thấp hơn sẽ gần với âm thanh gốc hơn, cao hơn sẽ chỉnh sửa mạnh hơn.",
790
+ "steps_label": "Bước khuếch tán số",
791
+ "steps_info": "Giá trị cao hơn (ví dụ: 200) tạo ra sản phẩm có chất lượng cao hơn.",
792
+ "title": "Công cụ huấn luyện, chuyển đổi nhạc cụ và giọng nói chất lượng và hiệu suất cao đơn giản dành cho người Việt",
793
+ "fp16_not_support": "CPU Không hỗ trợ tốt fp16, chuyển đổi fp16 -> fp32",
794
+ "precision": "Độ chính xác",
795
+ "precision_info": "Độ chính xác của suy luận và huấn luyện mô hình\n\nLưu ý: CPU Không hỗ trợ fp16\n\nĐối với RefineGAN và MRF HIFIGAN khi chuyển đổi nên sử dụng fp32 vì fp16 có thể khiến chúng cho ra đầu ra kì lạ",
796
+ "update_precision": "Cập Nhật Độ Chính Xác",
797
+ "start_update_precision": "Bắt đầu cập nhật độ chính xác",
798
+ "deterministic": "Thuật toán xác định",
799
+ "deterministic_info": "Khi bật sẽ sử dụng các thuật toán có tính xác định cao, đảm bảo rằng mỗi lần chạy cùng một dữ liệu đầu vào sẽ cho kết quả giống nhau.\n\nKhi tắt có thể chọn các thuật toán tối ưu hơn nhưng có thể không hoàn toàn xác định, dẫn đến kết quả huấn luyện có sự khác biệt giữa các lần chạy.",
800
+ "benchmark": "Thuật toán điểm chuẩn",
801
+ "benchmark_info": "Khi bật sẽ thử nghiệm và chọn thuật toán tối ưu nhất cho phần cứng và kích thước cụ thể. Điều này có thể giúp tăng tốc độ huấn luyện.\n\nKhi tắt sẽ không thực hiện tối ưu thuật toán này, có thể làm giảm tốc độ nhưng đảm bảo rằng mỗi lần chạy sử dụng cùng một thuật toán, điều này hữu ích nếu bạn muốn tái tạo chính xác.",
802
+ "font": "Phông chữ",
803
+ "font_info": "Phông chữ của giao diện\n\nTruy cập vào [Google Font](https://fonts.google.com) để lựa phông yêu thích của bạn.",
804
+ "change_font": "Đổi Phông Chữ",
805
+ "f0_unlock": "Mở khóa tất cả",
806
+ "f0_unlock_info": "Mở khóa toàn bộ phương pháp trích xuất cao độ",
807
+ "stop_audioldm2": "Dừng chỉnh sửa nhạc",
808
+ "srt": "Tệp SRT trống hoặc bị lỗi!"
809
+ }
assets/logs/mute/f0/mute.wav.npy ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:9b9acf9ab7facdb032e1d687fe35182670b0b94566c4b209ae48c239d19956a6
3
+ size 1332
assets/logs/mute/f0_voiced/mute.wav.npy ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:30792849c8e72d67e6691754077f2888b101cb741e9c7f193c91dd9692870c87
3
+ size 2536
assets/logs/mute/sliced_audios/mute32000.wav ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:9edcf85ec77e88bd01edf3d887bdc418d3596d573f7ad2694da546f41dae6baf
3
+ size 192078
assets/logs/mute/sliced_audios/mute40000.wav ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:67a816e77b50cb9f016e49e5c01f07e080c4e3b82b7a8ac3e64bcb143f90f31b
3
+ size 240078
assets/logs/mute/sliced_audios/mute48000.wav ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:2f2bb4daaa106e351aebb001e5a25de985c0b472f22e8d60676bc924a79056ee
3
+ size 288078
assets/logs/mute/sliced_audios_16k/mute.wav ADDED
Binary file (96.1 kB). View file
 
assets/logs/mute/v1_extracted/mute.npy ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:64d5abbac078e19a3f649c0d78a02cb33a71407ded3ddf2db78e6b803d0c0126
3
+ size 152704
assets/logs/mute/v2_extracted/mute.npy ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:16ef62b957887ac9f0913aa5158f18983afff1ef5a3e4c5fd067ac20fc380d54
3
+ size 457856
assets/logs/mute_spin/f0/mute.wav.npy ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:9b9acf9ab7facdb032e1d687fe35182670b0b94566c4b209ae48c239d19956a6
3
+ size 1332
assets/logs/mute_spin/f0_voiced/mute.wav.npy ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:30792849c8e72d67e6691754077f2888b101cb741e9c7f193c91dd9692870c87
3
+ size 2536
assets/logs/mute_spin/sliced_audios/mute32000.wav ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:9edcf85ec77e88bd01edf3d887bdc418d3596d573f7ad2694da546f41dae6baf
3
+ size 192078
assets/logs/mute_spin/sliced_audios/mute40000.wav ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:67a816e77b50cb9f016e49e5c01f07e080c4e3b82b7a8ac3e64bcb143f90f31b
3
+ size 240078
assets/logs/mute_spin/sliced_audios/mute48000.wav ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:2f2bb4daaa106e351aebb001e5a25de985c0b472f22e8d60676bc924a79056ee
3
+ size 288078
assets/logs/mute_spin/sliced_audios_16k/mute.wav ADDED
Binary file (96.1 kB). View file
 
assets/logs/mute_spin/v1_extracted/mute.npy ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:8ec393080466213b7eaa951526d632b92b4d3f9adc3f208bee6d8364fcc0ad0b
3
+ size 152704
assets/logs/mute_spin/v2_extracted/mute.npy ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:997d1ba7055e5567344fe2dbf34be29dd5de70a66cf1cfc32ff98326f957618d
3
+ size 457856
assets/models/audioldm2/.gitattributes ADDED
File without changes
assets/models/embedders/.gitattributes ADDED
File without changes
assets/models/predictors/.gitattributes ADDED
File without changes
assets/models/pretrained_custom/.gitattributes ADDED
File without changes
assets/models/pretrained_v1/.gitattributes ADDED
File without changes
assets/models/pretrained_v2/.gitattributes ADDED
File without changes
assets/models/speaker_diarization/assets/gpt2.tiktoken ADDED
The diff for this file is too large to render. See raw diff
 
assets/models/speaker_diarization/assets/mel_filters.npz ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:7450ae70723a5ef9d341e3cee628c7cb0177f36ce42c44b7ed2bf3325f0f6d4c
3
+ size 4271
assets/models/speaker_diarization/assets/multilingual.tiktoken ADDED
The diff for this file is too large to render. See raw diff
 
assets/models/speaker_diarization/models/.gitattributes ADDED
File without changes
assets/models/uvr5/.gitattributes ADDED
File without changes
assets/png/.g ADDED
@@ -0,0 +1 @@
 
 
1
+
assets/presets/.gitattributes ADDED
File without changes
assets/weights/.gitattributes ADDED
File without changes
audios/.gitattributes ADDED
File without changes
dataset/.gitattributes ADDED
File without changes
docker-compose-cpu.yaml ADDED
@@ -0,0 +1,14 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ version: '1'
2
+
3
+ services:
4
+ rvc:
5
+ build:
6
+ context: .
7
+ dockerfile: Dockerfile
8
+ container_name: rvc
9
+ ports:
10
+ - 7865:7865
11
+ deploy:
12
+ resources:
13
+ reservations:
14
+ devices: []
docker-compose-cuda118.yaml ADDED
@@ -0,0 +1,17 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ version: '1'
2
+
3
+ services:
4
+ rvc:
5
+ build:
6
+ context: .
7
+ dockerfile: Dockerfile.cuda118
8
+ container_name: rvc
9
+ ports:
10
+ - 7865:7865
11
+ deploy:
12
+ resources:
13
+ reservations:
14
+ devices:
15
+ - driver: nvidia
16
+ count: 1
17
+ capabilities: [gpu]
docker-compose-cuda128.yaml ADDED
@@ -0,0 +1,17 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ version: '1'
2
+
3
+ services:
4
+ rvc:
5
+ build:
6
+ context: .
7
+ dockerfile: Dockerfile.cuda128
8
+ container_name: rvc
9
+ ports:
10
+ - 7865:7865
11
+ deploy:
12
+ resources:
13
+ reservations:
14
+ devices:
15
+ - driver: nvidia
16
+ count: 1
17
+ capabilities: [gpu]
main/app/app.py ADDED
The diff for this file is too large to render. See raw diff
 
main/app/based/utils.py ADDED
@@ -0,0 +1,1534 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import os
2
+ import re
3
+ import ssl
4
+ import sys
5
+ import json
6
+ import torch
7
+ import codecs
8
+ import shutil
9
+ import asyncio
10
+ import librosa
11
+ import logging
12
+ import datetime
13
+ import platform
14
+ import requests
15
+ import warnings
16
+ import threading
17
+ import subprocess
18
+ import logging.handlers
19
+
20
+ import numpy as np
21
+ import gradio as gr
22
+ import pandas as pd
23
+ import soundfile as sf
24
+
25
+ from time import sleep
26
+ from multiprocessing import cpu_count
27
+
28
+ sys.path.append(os.getcwd())
29
+
30
+ from main.tools import huggingface
31
+ from main.configs.config import Config
32
+
33
+ ssl._create_default_https_context = ssl._create_unverified_context
34
+ logger = logging.getLogger(__name__)
35
+ logger.propagate = False
36
+
37
+ if logger.hasHandlers(): logger.handlers.clear()
38
+ else:
39
+ console_handler = logging.StreamHandler()
40
+ console_formatter = logging.Formatter(fmt="\n%(asctime)s.%(msecs)03d | %(levelname)s | %(module)s | %(message)s", datefmt="%Y-%m-%d %H:%M:%S")
41
+ console_handler.setFormatter(console_formatter)
42
+ console_handler.setLevel(logging.INFO)
43
+ file_handler = logging.handlers.RotatingFileHandler(os.path.join("assets", "logs", "app.log"), maxBytes=5*1024*1024, backupCount=3, encoding='utf-8')
44
+ file_formatter = logging.Formatter(fmt="\n%(asctime)s.%(msecs)03d | %(levelname)s | %(module)s | %(message)s", datefmt="%Y-%m-%d %H:%M:%S")
45
+ file_handler.setFormatter(file_formatter)
46
+ file_handler.setLevel(logging.DEBUG)
47
+ logger.addHandler(console_handler)
48
+ logger.addHandler(file_handler)
49
+ logger.setLevel(logging.DEBUG)
50
+
51
+ warnings.filterwarnings("ignore")
52
+ for l in ["httpx", "gradio", "uvicorn", "httpcore", "urllib3"]:
53
+ logging.getLogger(l).setLevel(logging.ERROR)
54
+
55
+ config = Config()
56
+ python = sys.executable
57
+ translations = config.translations
58
+ configs_json = os.path.join("main", "configs", "config.json")
59
+ configs = json.load(open(configs_json, "r"))
60
+
61
+ os.environ["TORCH_FORCE_NO_WEIGHTS_ONLY_LOAD"] = "1"
62
+ os.environ["TORCH_FORCE_WEIGHTS_ONLY_LOAD"] = "0"
63
+
64
+ if config.device in ["cpu", "mps"] and configs.get("fp16", False):
65
+ logger.warning(translations["fp16_not_support"])
66
+ configs["fp16"] = config.is_half = False
67
+ with open(configs_json, "w") as f:
68
+ json.dump(configs, f, indent=4)
69
+
70
+ models, model_options = {}, {}
71
+
72
+ method_f0 = ["mangio-crepe-full", "crepe-full", "fcpe", "rmvpe", "harvest", "pyin"]
73
+ method_f0_full = ["pm", "dio", "mangio-crepe-tiny", "mangio-crepe-small", "mangio-crepe-medium", "mangio-crepe-large", "mangio-crepe-full", "crepe-tiny", "crepe-small", "crepe-medium", "crepe-large", "crepe-full", "fcpe", "fcpe-legacy", "rmvpe", "rmvpe-legacy", "harvest", "yin", "pyin", "swipe"]
74
+
75
+ embedders_mode = ["fairseq", "onnx", "transformers", "spin"]
76
+ embedders_model = ["contentvec_base", "hubert_base", "japanese_hubert_base", "korean_hubert_base", "chinese_hubert_base", "portuguese_hubert_base", "custom"]
77
+
78
+ paths_for_files = sorted([os.path.abspath(os.path.join(root, f)) for root, _, files in os.walk("audios") for f in files if os.path.splitext(f)[1].lower() in (".wav", ".mp3", ".flac", ".ogg", ".opus", ".m4a", ".mp4", ".aac", ".alac", ".wma", ".aiff", ".webm", ".ac3")])
79
+ model_name, index_path, delete_index = sorted(list(model for model in os.listdir(os.path.join("assets", "weights")) if model.endswith((".pth", ".onnx")) and not model.startswith("G_") and not model.startswith("D_"))), sorted([os.path.join(root, name) for root, _, files in os.walk(os.path.join("assets", "logs"), topdown=False) for name in files if name.endswith(".index") and "trained" not in name]), sorted([os.path.join("assets", "logs", f) for f in os.listdir(os.path.join("assets", "logs")) if "mute" not in f and os.path.isdir(os.path.join("assets", "logs", f))])
80
+ pretrainedD, pretrainedG, Allpretrained = ([model for model in os.listdir(os.path.join("assets", "models", "pretrained_custom")) if model.endswith(".pth") and "D" in model], [model for model in os.listdir(os.path.join("assets", "models", "pretrained_custom")) if model.endswith(".pth") and "G" in model], [os.path.join("assets", "models", path, model) for path in ["pretrained_v1", "pretrained_v2", "pretrained_custom"] for model in os.listdir(os.path.join("assets", "models", path)) if model.endswith(".pth") and ("D" in model or "G" in model)])
81
+
82
+ separate_model = sorted([os.path.join("assets", "models", "uvr5", models) for models in os.listdir(os.path.join("assets", "models", "uvr5")) if models.endswith((".th", ".yaml", ".onnx"))])
83
+ presets_file = sorted(list(f for f in os.listdir(os.path.join("assets", "presets")) if f.endswith(".json")))
84
+ f0_file = sorted([os.path.abspath(os.path.join(root, f)) for root, _, files in os.walk(os.path.join("assets", "f0")) for f in files if f.endswith(".txt")])
85
+
86
+ language, theme, edgetts, google_tts_voice, mdx_model, uvr_model, font = configs.get("language", "vi-VN"), configs.get("theme", "NoCrypt/miku"), configs.get("edge_tts", ["vi-VN-HoaiMyNeural", "vi-VN-NamMinhNeural"]), configs.get("google_tts_voice", ["vi", "en"]), configs.get("mdx_model", "MDXNET_Main"), (configs.get("demucs_model", "HD_MMI") + configs.get("mdx_model", "MDXNET_Main")), configs.get("font", "https://fonts.googleapis.com/css2?family=Courgette&display=swap")
87
+
88
+ csv_path = os.path.join("assets", "spreadsheet.csv")
89
+ logger.info(config.device)
90
+
91
+ if "--allow_all_disk" in sys.argv:
92
+ import win32api
93
+
94
+ allow_disk = win32api.GetLogicalDriveStrings().split('\x00')[:-1]
95
+ else: allow_disk = []
96
+
97
+ if language == "vi-VN":
98
+ import gradio.strings
99
+ gradio.strings.en = {"RUNNING_LOCALLY": "* Chạy trên liên kết nội bộ: {}://{}:{}", "RUNNING_LOCALLY_SSR": "* Chạy trên liên kết nội bộ: {}://{}:{}, với SSR ⚡ (thử nghiệm, để tắt hãy dùng `ssr=False` trong `launch()`)", "SHARE_LINK_DISPLAY": "* Chạy trên liên kết công khai: {}", "COULD_NOT_GET_SHARE_LINK": "\nKhông thể tạo liên kết công khai. Vui lòng kiểm tra kết nối mạng của bạn hoặc trang trạng thái của chúng tôi: https://status.gradio.app.", "COULD_NOT_GET_SHARE_LINK_MISSING_FILE": "\nKhông thể tạo liên kết công khai. Thiếu tập tin: {}. \n\nVui lòng kiểm tra kết nối internet của bạn. Điều này có thể xảy ra nếu phần mềm chống vi-rút của bạn chặn việc tải xuống tệp này. Bạn có thể cài đặt thủ công bằng cách làm theo các bước sau: \n\n1. Tải xuống tệp này: {}\n2. Đổi tên tệp đã tải xuống thành: {}\n3. Di chuyển tệp đến vị trí này: {}", "COLAB_NO_LOCAL": "Không thể hiển thị giao diện nội bộ trên google colab, liên kết công khai đã được tạo.", "PUBLIC_SHARE_TRUE": "\nĐể tạo một liên kết công khai, hãy đặt `share=True` trong `launch()`.", "MODEL_PUBLICLY_AVAILABLE_URL": "Mô hình được cung cấp công khai tại: {} (có thể mất tới một phút để sử dụng được liên kết)", "GENERATING_PUBLIC_LINK": "Đang tạo liên kết công khai (có thể mất vài giây...):", "BETA_INVITE": "\nCảm ơn bạn đã là người dùng Gradio! Nếu bạn có thắc mắc hoặc phản hồi, vui lòng tham gia máy chủ Discord của chúng tôi và trò chuyện với chúng tôi: https://discord.gg/feTf9x3ZSB", "COLAB_DEBUG_TRUE": "Đã phát hiện thấy sổ tay Colab. Ô này sẽ chạy vô thời hạn để bạn có thể xem lỗi và nhật ký. " "Để tắt, hãy đặt debug=False trong launch().", "COLAB_DEBUG_FALSE": "Đã phát hiện thấy sổ tay Colab. Để hiển thị lỗi trong sổ ghi chép colab, hãy đặt debug=True trong launch()", "COLAB_WARNING": "Lưu ý: việc mở Chrome Inspector có thể làm hỏng bản demo trong sổ tay Colab.", "SHARE_LINK_MESSAGE": "\nLiên kết công khai sẽ hết hạn sau 72 giờ. Để nâng cấp GPU và lưu trữ vĩnh viễn miễn phí, hãy chạy `gradio deploy` từ terminal trong thư mục làm việc để triển khai lên huggingface (https://huggingface.co/spaces)", "INLINE_DISPLAY_BELOW": "Đang tải giao diện bên dưới...", "COULD_NOT_GET_SHARE_LINK_CHECKSUM": "\nKhông thể tạo liên kết công khai. Tổng kiểm tra không khớp cho tập tin: {}."}
100
+
101
+ if os.path.exists(csv_path): cached_data = pd.read_csv(csv_path)
102
+ else:
103
+ cached_data = pd.read_csv(codecs.decode("uggcf://qbpf.tbbtyr.pbz/fcernqfurrgf/q/1gNHnDeRULtEfz1Yieaw14USUQjWJy0Oq9k0DrCrjApb/rkcbeg?sbezng=pfi&tvq=1977693859", "rot13"))
104
+ cached_data.to_csv(csv_path, index=False)
105
+
106
+ for _, row in cached_data.iterrows():
107
+ filename = row['Filename']
108
+ url = None
109
+
110
+ for value in row.values:
111
+ if isinstance(value, str) and "huggingface" in value:
112
+ url = value
113
+ break
114
+
115
+ if url: models[filename] = url
116
+
117
+
118
+
119
+ def gr_info(message):
120
+ gr.Info(message, duration=2)
121
+ logger.info(message)
122
+
123
+ def gr_warning(message):
124
+ gr.Warning(message, duration=2)
125
+ logger.warning(message)
126
+
127
+ def gr_error(message):
128
+ gr.Error(message=message, duration=6)
129
+ logger.error(message)
130
+
131
+ def get_gpu_info():
132
+ ngpu = torch.cuda.device_count()
133
+ gpu_infos = [f"{i}: {torch.cuda.get_device_name(i)} ({int(torch.cuda.get_device_properties(i).total_memory / 1024 / 1024 / 1024 + 0.4)} GB)" for i in range(ngpu) if torch.cuda.is_available() or ngpu != 0]
134
+ return "\n".join(gpu_infos) if len(gpu_infos) > 0 else translations["no_support_gpu"]
135
+
136
+ def change_f0_choices():
137
+ f0_file = sorted([os.path.abspath(os.path.join(root, f)) for root, _, files in os.walk(os.path.join("assets", "f0")) for f in files if f.endswith(".txt")])
138
+ return {"value": f0_file[0] if len(f0_file) >= 1 else "", "choices": f0_file, "__type__": "update"}
139
+
140
+ def change_audios_choices(input_audio):
141
+ audios = sorted([os.path.abspath(os.path.join(root, f)) for root, _, files in os.walk("audios") for f in files if os.path.splitext(f)[1].lower() in (".wav", ".mp3", ".flac", ".ogg", ".opus", ".m4a", ".mp4", ".aac", ".alac", ".wma", ".aiff", ".webm", ".ac3")])
142
+ return {"value": input_audio if input_audio != "" else (audios[0] if len(audios) >= 1 else ""), "choices": audios, "__type__": "update"}
143
+
144
+ def change_separate_choices():
145
+ return [{"choices": sorted([os.path.join("assets", "models", "uvr5", models) for models in os.listdir(os.path.join("assets", "models", "uvr5")) if model.endswith((".th", ".yaml", ".onnx"))]), "__type__": "update"}]
146
+
147
+ def change_models_choices():
148
+ model, index = sorted(list(model for model in os.listdir(os.path.join("assets", "weights")) if model.endswith((".pth", ".onnx")) and not model.startswith("G_") and not model.startswith("D_"))), sorted([os.path.join(root, name) for root, _, files in os.walk(os.path.join("assets", "logs"), topdown=False) for name in files if name.endswith(".index") and "trained" not in name])
149
+ return [{"value": model[0] if len(model) >= 1 else "", "choices": model, "__type__": "update"}, {"value": index[0] if len(index) >= 1 else "", "choices": index, "__type__": "update"}]
150
+
151
+ def change_allpretrained_choices():
152
+ return [{"choices": sorted([os.path.join("assets", "models", path, model) for path in ["pretrained_v1", "pretrained_v2", "pretrained_custom"] for model in os.listdir(os.path.join("assets", "models", path)) if model.endswith(".pth") and ("D" in model or "G" in model)]), "__type__": "update"}]
153
+
154
+ def change_pretrained_choices():
155
+ return [{"choices": sorted([model for model in os.listdir(os.path.join("assets", "models", "pretrained_custom")) if model.endswith(".pth") and "D" in model]), "__type__": "update"}, {"choices": sorted([model for model in os.listdir(os.path.join("assets", "models", "pretrained_custom")) if model.endswith(".pth") and "G" in model]), "__type__": "update"}]
156
+
157
+ def change_choices_del():
158
+ return [{"choices": sorted(list(model for model in os.listdir(os.path.join("assets", "weights")) if model.endswith(".pth") and not model.startswith("G_") and not model.startswith("D_"))), "__type__": "update"}, {"choices": sorted([os.path.join("assets", "logs", f) for f in os.listdir(os.path.join("assets", "logs")) if "mute" not in f and os.path.isdir(os.path.join("assets", "logs", f))]), "__type__": "update"}]
159
+
160
+ def change_preset_choices():
161
+ return {"value": "", "choices": sorted(list(f for f in os.listdir(os.path.join("assets", "presets")) if f.endswith(".json"))), "__type__": "update"}
162
+
163
+ def change_tts_voice_choices(google):
164
+ return {"choices": google_tts_voice if google else edgetts, "value": google_tts_voice[0] if google else edgetts[0], "__type__": "update"}
165
+
166
+ def change_backing_choices(backing, merge):
167
+ if backing or merge: return {"value": False, "interactive": False, "__type__": "update"}
168
+ elif not backing or not merge: return {"interactive": True, "__type__": "update"}
169
+ else: gr_warning(translations["option_not_valid"])
170
+
171
+ def change_download_choices(select):
172
+ selects = [False]*10
173
+
174
+ if select == translations["download_url"]: selects[0] = selects[1] = selects[2] = True
175
+ elif select == translations["download_from_csv"]: selects[3] = selects[4] = True
176
+ elif select == translations["search_models"]: selects[5] = selects[6] = True
177
+ elif select == translations["upload"]: selects[9] = True
178
+ else: gr_warning(translations["option_not_valid"])
179
+
180
+ return [{"visible": selects[i], "__type__": "update"} for i in range(len(selects))]
181
+
182
+ def change_download_pretrained_choices(select):
183
+ selects = [False]*8
184
+
185
+ if select == translations["download_url"]: selects[0] = selects[1] = selects[2] = True
186
+ elif select == translations["list_model"]: selects[3] = selects[4] = selects[5] = True
187
+ elif select == translations["upload"]: selects[6] = selects[7] = True
188
+ else: gr_warning(translations["option_not_valid"])
189
+
190
+ return [{"visible": selects[i], "__type__": "update"} for i in range(len(selects))]
191
+
192
+ def get_index(model):
193
+ model = os.path.basename(model).split("_")[0]
194
+ return {"value": next((f for f in [os.path.join(root, name) for root, _, files in os.walk(os.path.join("assets", "logs"), topdown=False) for name in files if name.endswith(".index") and "trained" not in name] if model.split(".")[0] in f), ""), "__type__": "update"} if model else None
195
+
196
+ def index_strength_show(index):
197
+ return {"visible": index != "" and os.path.exists(index), "value": 0.5, "__type__": "update"}
198
+
199
+ def hoplength_show(method, hybrid_method=None):
200
+ show_hop_length_method = ["mangio-crepe-tiny", "mangio-crepe-small", "mangio-crepe-medium", "mangio-crepe-large", "mangio-crepe-full", "fcpe", "fcpe-legacy", "yin", "pyin"]
201
+
202
+ if method in show_hop_length_method: visible = True
203
+ elif method == "hybrid":
204
+ methods_str = re.search("hybrid\[(.+)\]", hybrid_method)
205
+ if methods_str: methods = [method.strip() for method in methods_str.group(1).split("+")]
206
+
207
+ for i in methods:
208
+ visible = i in show_hop_length_method
209
+ if visible: break
210
+ else: visible = False
211
+
212
+ return {"visible": visible, "__type__": "update"}
213
+
214
+ def visible(value):
215
+ return {"visible": value, "__type__": "update"}
216
+
217
+ def valueFalse_interactive(inp):
218
+ return {"value": False, "interactive": inp, "__type__": "update"}
219
+
220
+ def valueEmpty_visible1(inp1):
221
+ return {"value": "", "visible": inp1, "__type__": "update"}
222
+
223
+ def process_input(file_path):
224
+ file_contents = ""
225
+
226
+ if not file_path.endswith(".srt"):
227
+ with open(file_path, "r", encoding="utf-8") as file:
228
+ file_contents = file.read()
229
+
230
+ gr_info(translations["upload_success"].format(name=translations["text"]))
231
+ return file_contents
232
+
233
+ def fetch_pretrained_data():
234
+ response = requests.get(codecs.decode("uggcf://uhttvatsnpr.pb/NauC/Ivrganzrfr-EIP-Cebwrpg/erfbyir/znva/wfba/phfgbz_cergenvarq.wfba", "rot13"))
235
+ response.raise_for_status()
236
+
237
+ return response.json()
238
+
239
+ def update_sample_rate_dropdown(model):
240
+ data = fetch_pretrained_data()
241
+ if model != translations["success"]: return {"choices": list(data[model].keys()), "value": list(data[model].keys())[0], "__type__": "update"}
242
+
243
+ def if_done(done, p):
244
+ while 1:
245
+ if p.poll() is None: sleep(0.5)
246
+ else: break
247
+
248
+ done[0] = True
249
+
250
+ def restart_app():
251
+ global app
252
+
253
+ gr_info(translations["15s"])
254
+ os.system("cls" if platform.system() == "Windows" else "clear")
255
+
256
+ app.close()
257
+ subprocess.run([python, os.path.join("main", "app", "app.py")] + sys.argv[1:])
258
+
259
+ def change_language(lang):
260
+ configs = json.load(open(configs_json, "r"))
261
+ configs["language"] = lang
262
+
263
+ with open(configs_json, "w") as f:
264
+ json.dump(configs, f, indent=4)
265
+
266
+ restart_app()
267
+
268
+ def change_theme(theme):
269
+ with open(configs_json, "r") as f:
270
+ configs = json.load(f)
271
+
272
+ configs["theme"] = theme
273
+ with open(configs_json, "w") as f:
274
+ json.dump(configs, f, indent=4)
275
+
276
+ restart_app()
277
+
278
+ def change_font(font):
279
+ with open(configs_json, "r") as f:
280
+ configs = json.load(f)
281
+
282
+ configs["font"] = font
283
+ with open(configs_json, "w") as f:
284
+ json.dump(configs, f, indent=4)
285
+
286
+ restart_app()
287
+
288
+ def zip_file(name, pth, index):
289
+ pth_path = os.path.join("assets", "weights", pth)
290
+ if not pth or not os.path.exists(pth_path) or not pth.endswith((".pth", ".onnx")): return gr_warning(translations["provide_file"].format(filename=translations["model"]))
291
+
292
+ zip_file_path = os.path.join("assets", "logs", name, name + ".zip")
293
+ gr_info(translations["start"].format(start=translations["zip"]))
294
+
295
+ import zipfile
296
+ with zipfile.ZipFile(zip_file_path, 'w') as zipf:
297
+ zipf.write(pth_path, os.path.basename(pth_path))
298
+ if index: zipf.write(index, os.path.basename(index))
299
+
300
+ gr_info(translations["success"])
301
+ return {"visible": True, "value": zip_file_path, "__type__": "update"}
302
+
303
+ def fetch_models_data(search):
304
+ all_table_data = []
305
+ page = 1
306
+
307
+ while 1:
308
+ try:
309
+ response = requests.post(url=codecs.decode("uggcf://ibvpr-zbqryf.pbz/srgpu_qngn.cuc", "rot13"), data={"page": page, "search": search})
310
+
311
+ if response.status_code == 200:
312
+ table_data = response.json().get("table", "")
313
+ if not table_data.strip(): break
314
+ all_table_data.append(table_data)
315
+ page += 1
316
+ else:
317
+ logger.debug(f"{translations['code_error']} {response.status_code}")
318
+ break
319
+ except json.JSONDecodeError:
320
+ logger.debug(translations["json_error"])
321
+ break
322
+ except requests.RequestException as e:
323
+ logger.debug(translations["requests_error"].format(e=e))
324
+ break
325
+ return all_table_data
326
+
327
+ def search_models(name):
328
+ gr_info(translations["start"].format(start=translations["search"]))
329
+ tables = fetch_models_data(name)
330
+
331
+ if len(tables) == 0:
332
+ gr_info(translations["not_found"].format(name=name))
333
+ return [None]*2
334
+ else:
335
+ model_options.clear()
336
+
337
+ from bs4 import BeautifulSoup
338
+
339
+ for table in tables:
340
+ for row in BeautifulSoup(table, "html.parser").select("tr"):
341
+ name_tag, url_tag = row.find("a", {"class": "fs-5"}), row.find("a", {"class": "btn btn-sm fw-bold btn-light ms-0 p-1 ps-2 pe-2"})
342
+ url = url_tag["href"].replace("https://easyaivoice.com/run?url=", "")
343
+ if "huggingface" in url:
344
+ if name_tag and url_tag: model_options[name_tag.text.replace(".onnx", "").replace(".pth", "").replace(".index", "").replace(".zip", "").replace(" ", "_").replace("(", "").replace(")", "").replace("[", "").replace("]", "").replace(",", "").replace('"', "").replace("'", "").replace("|", "").strip()] = url
345
+
346
+ gr_info(translations["found"].format(results=len(model_options)))
347
+ return [{"value": "", "choices": model_options, "interactive": True, "visible": True, "__type__": "update"}, {"value": translations["downloads"], "visible": True, "__type__": "update"}]
348
+
349
+ def move_files_from_directory(src_dir, dest_weights, dest_logs, model_name):
350
+ for root, _, files in os.walk(src_dir):
351
+ for file in files:
352
+ file_path = os.path.join(root, file)
353
+ if file.endswith(".index"):
354
+ model_log_dir = os.path.join(dest_logs, model_name)
355
+ os.makedirs(model_log_dir, exist_ok=True)
356
+
357
+ filepath = os.path.join(model_log_dir, file.replace(' ', '_').replace('(', '').replace(')', '').replace('[', '').replace(']', '').replace(",", "").replace('"', "").replace("'", "").replace("|", "").strip())
358
+ if os.path.exists(filepath): os.remove(filepath)
359
+
360
+ shutil.move(file_path, filepath)
361
+ elif file.endswith(".pth") and not file.startswith("D_") and not file.startswith("G_"):
362
+ pth_path = os.path.join(dest_weights, model_name + ".pth")
363
+ if os.path.exists(pth_path): os.remove(pth_path)
364
+
365
+ shutil.move(file_path, pth_path)
366
+ elif file.endswith(".onnx") and not file.startswith("D_") and not file.startswith("G_"):
367
+ pth_path = os.path.join(dest_weights, model_name + ".onnx")
368
+ if os.path.exists(pth_path): os.remove(pth_path)
369
+
370
+ shutil.move(file_path, pth_path)
371
+
372
+ def download_url(url):
373
+ import yt_dlp
374
+
375
+ if not url: return gr_warning(translations["provide_url"])
376
+ if not os.path.exists("audios"): os.makedirs("audios", exist_ok=True)
377
+
378
+ with warnings.catch_warnings():
379
+ warnings.filterwarnings("ignore")
380
+ ydl_opts = {"format": "bestaudio/best", "postprocessors": [{"key": "FFmpegExtractAudio", "preferredcodec": "wav", "preferredquality": "192"}], "quiet": True, "no_warnings": True, "noplaylist": True, "verbose": False}
381
+
382
+ gr_info(translations["start"].format(start=translations["download_music"]))
383
+
384
+ with yt_dlp.YoutubeDL(ydl_opts) as ydl:
385
+ audio_output = os.path.join("audios", re.sub(r'\s+', '-', re.sub(r'[^\w\s\u4e00-\u9fff\uac00-\ud7af\u0400-\u04FF\u1100-\u11FF]', '', ydl.extract_info(url, download=False).get('title', 'video')).strip()))
386
+ if os.path.exists(audio_output): shutil.rmtree(audio_output, ignore_errors=True)
387
+
388
+ ydl_opts['outtmpl'] = audio_output
389
+
390
+ with yt_dlp.YoutubeDL(ydl_opts) as ydl:
391
+ audio_output = audio_output + ".wav"
392
+ if os.path.exists(audio_output): os.remove(audio_output)
393
+
394
+ ydl.download([url])
395
+
396
+ gr_info(translations["success"])
397
+ return [audio_output, audio_output, translations["success"]]
398
+
399
+ def download_model(url=None, model=None):
400
+ if not url: return gr_warning(translations["provide_url"])
401
+ if not model: return gr_warning(translations["provide_name_is_save"])
402
+
403
+ model = model.replace(".onnx", "").replace(".pth", "").replace(".index", "").replace(".zip", "").replace(" ", "_").replace("(", "").replace(")", "").replace("[", "").replace("]", "").replace(",", "").replace('"', "").replace("'", "").replace("|", "").strip()
404
+ url = url.replace("/blob/", "/resolve/").replace("?download=true", "").strip()
405
+
406
+ download_dir = os.path.join("download_model")
407
+ weights_dir = os.path.join("assets", "weights")
408
+ logs_dir = os.path.join("assets", "logs")
409
+
410
+ if not os.path.exists(download_dir): os.makedirs(download_dir, exist_ok=True)
411
+ if not os.path.exists(weights_dir): os.makedirs(weights_dir, exist_ok=True)
412
+ if not os.path.exists(logs_dir): os.makedirs(logs_dir, exist_ok=True)
413
+
414
+ try:
415
+ gr_info(translations["start"].format(start=translations["download"]))
416
+
417
+ if url.endswith(".pth"): huggingface.HF_download_file(url, os.path.join(weights_dir, f"{model}.pth"))
418
+ elif url.endswith(".onnx"): huggingface.HF_download_file(url, os.path.join(weights_dir, f"{model}.onnx"))
419
+ elif url.endswith(".index"):
420
+ model_log_dir = os.path.join(logs_dir, model)
421
+ os.makedirs(model_log_dir, exist_ok=True)
422
+
423
+ huggingface.HF_download_file(url, os.path.join(model_log_dir, f"{model}.index"))
424
+ elif url.endswith(".zip"):
425
+ output_path = huggingface.HF_download_file(url, os.path.join(download_dir, model + ".zip"))
426
+ shutil.unpack_archive(output_path, download_dir)
427
+
428
+ move_files_from_directory(download_dir, weights_dir, logs_dir, model)
429
+ else:
430
+ if "drive.google.com" in url or "drive.usercontent.google.com" in url:
431
+ file_id = None
432
+
433
+ from main.tools import gdown
434
+
435
+ if "/file/d/" in url: file_id = url.split("/d/")[1].split("/")[0]
436
+ elif "open?id=" in url: file_id = url.split("open?id=")[1].split("/")[0]
437
+ elif "/download?id=" in url: file_id = url.split("/download?id=")[1].split("&")[0]
438
+
439
+ if file_id:
440
+ file = gdown.gdown_download(id=file_id, output=download_dir)
441
+ if file.endswith(".zip"): shutil.unpack_archive(file, download_dir)
442
+
443
+ move_files_from_directory(download_dir, weights_dir, logs_dir, model)
444
+ elif "mega.nz" in url:
445
+ from main.tools import meganz
446
+
447
+ meganz.mega_download_url(url, download_dir)
448
+
449
+ file_download = next((f for f in os.listdir(download_dir)), None)
450
+ if file_download.endswith(".zip"): shutil.unpack_archive(os.path.join(download_dir, file_download), download_dir)
451
+
452
+ move_files_from_directory(download_dir, weights_dir, logs_dir, model)
453
+ elif "mediafire.com" in url:
454
+ from main.tools import mediafire
455
+
456
+ file = mediafire.Mediafire_Download(url, download_dir)
457
+ if file.endswith(".zip"): shutil.unpack_archive(file, download_dir)
458
+
459
+ move_files_from_directory(download_dir, weights_dir, logs_dir, model)
460
+ elif "pixeldrain.com" in url:
461
+ from main.tools import pixeldrain
462
+
463
+ file = pixeldrain.pixeldrain(url, download_dir)
464
+ if file.endswith(".zip"): shutil.unpack_archive(file, download_dir)
465
+
466
+ move_files_from_directory(download_dir, weights_dir, logs_dir, model)
467
+ else:
468
+ gr_warning(translations["not_support_url"])
469
+ return translations["not_support_url"]
470
+
471
+ gr_info(translations["success"])
472
+ return translations["success"]
473
+ except Exception as e:
474
+ gr_error(message=translations["error_occurred"].format(e=e))
475
+ logger.debug(e)
476
+ return translations["error_occurred"].format(e=e)
477
+ finally:
478
+ shutil.rmtree(download_dir, ignore_errors=True)
479
+
480
+ def save_drop_model(dropbox):
481
+ weight_folder = os.path.join("assets", "weights")
482
+ logs_folder = os.path.join("assets", "logs")
483
+ save_model_temp = os.path.join("save_model_temp")
484
+
485
+ if not os.path.exists(weight_folder): os.makedirs(weight_folder, exist_ok=True)
486
+ if not os.path.exists(logs_folder): os.makedirs(logs_folder, exist_ok=True)
487
+ if not os.path.exists(save_model_temp): os.makedirs(save_model_temp, exist_ok=True)
488
+
489
+ shutil.move(dropbox, save_model_temp)
490
+
491
+ try:
492
+ file_name = os.path.basename(dropbox)
493
+
494
+ if file_name.endswith(".pth") and file_name.endswith(".onnx") and file_name.endswith(".index"): gr_warning(translations["not_model"])
495
+ else:
496
+ if file_name.endswith(".zip"):
497
+ shutil.unpack_archive(os.path.join(save_model_temp, file_name), save_model_temp)
498
+ move_files_from_directory(save_model_temp, weight_folder, logs_folder, file_name.replace(".zip", ""))
499
+ elif file_name.endswith((".pth", ".onnx")):
500
+ output_file = os.path.join(weight_folder, file_name)
501
+ if os.path.exists(output_file): os.remove(output_file)
502
+
503
+ shutil.move(os.path.join(save_model_temp, file_name), output_file)
504
+ elif file_name.endswith(".index"):
505
+ def extract_name_model(filename):
506
+ match = re.search(r"([A-Za-z]+)(?=_v|\.|$)", filename)
507
+ return match.group(1) if match else None
508
+
509
+ model_logs = os.path.join(logs_folder, extract_name_model(file_name))
510
+ if not os.path.exists(model_logs): os.makedirs(model_logs, exist_ok=True)
511
+ shutil.move(os.path.join(save_model_temp, file_name), model_logs)
512
+ else:
513
+ gr_warning(translations["unable_analyze_model"])
514
+ return None
515
+
516
+ gr_info(translations["upload_success"].format(name=translations["model"]))
517
+ return None
518
+ except Exception as e:
519
+ gr_error(message=translations["error_occurred"].format(e=e))
520
+ logger.debug(e)
521
+ return None
522
+ finally:
523
+ shutil.rmtree(save_model_temp, ignore_errors=True)
524
+
525
+ def download_pretrained_model(choices, model, sample_rate):
526
+ pretraineds_custom_path = os.path.join("assets", "models", "pretrained_custom")
527
+ if choices == translations["list_model"]:
528
+ paths = fetch_pretrained_data()[model][sample_rate]
529
+
530
+ if not os.path.exists(pretraineds_custom_path): os.makedirs(pretraineds_custom_path, exist_ok=True)
531
+ url = codecs.decode("uggcf://uhttvatsnpr.pb/NauC/Ivrganzrfr-EIP-Cebwrpg/erfbyir/znva/cergenvarq_phfgbz/", "rot13") + paths
532
+
533
+ gr_info(translations["download_pretrain"])
534
+ file = huggingface.HF_download_file(url.replace("/blob/", "/resolve/").replace("?download=true", "").strip(), os.path.join(pretraineds_custom_path, paths))
535
+
536
+ if file.endswith(".zip"):
537
+ shutil.unpack_archive(file, pretraineds_custom_path)
538
+ os.remove(file)
539
+
540
+ gr_info(translations["success"])
541
+ return translations["success"]
542
+ elif choices == translations["download_url"]:
543
+ if not model: return gr_warning(translations["provide_pretrain"].format(dg="D"))
544
+ if not sample_rate: return gr_warning(translations["provide_pretrain"].format(dg="G"))
545
+
546
+ gr_info(translations["download_pretrain"])
547
+
548
+ huggingface.HF_download_file(model.replace("/blob/", "/resolve/").replace("?download=true", "").strip(), pretraineds_custom_path)
549
+ huggingface.HF_download_file(sample_rate.replace("/blob/", "/resolve/").replace("?download=true", "").strip(), pretraineds_custom_path)
550
+
551
+ gr_info(translations["success"])
552
+ return translations["success"]
553
+
554
+ def fushion_model_pth(name, pth_1, pth_2, ratio):
555
+ if not name.endswith(".pth"): name = name + ".pth"
556
+
557
+ if not pth_1 or not os.path.exists(pth_1) or not pth_1.endswith(".pth"):
558
+ gr_warning(translations["provide_file"].format(filename=translations["model"] + " 1"))
559
+ return [translations["provide_file"].format(filename=translations["model"] + " 1"), None]
560
+
561
+ if not pth_2 or not os.path.exists(pth_2) or not pth_2.endswith(".pth"):
562
+ gr_warning(translations["provide_file"].format(filename=translations["model"] + " 2"))
563
+ return [translations["provide_file"].format(filename=translations["model"] + " 2"), None]
564
+
565
+ from collections import OrderedDict
566
+
567
+ def extract(ckpt):
568
+ a = ckpt["model"]
569
+ opt = OrderedDict()
570
+ opt["weight"] = {}
571
+
572
+ for key in a.keys():
573
+ if "enc_q" in key: continue
574
+
575
+ opt["weight"][key] = a[key]
576
+
577
+ return opt
578
+
579
+ try:
580
+ ckpt1 = torch.load(pth_1, map_location="cpu")
581
+ ckpt2 = torch.load(pth_2, map_location="cpu")
582
+
583
+ if ckpt1["sr"] != ckpt2["sr"]:
584
+ gr_warning(translations["sr_not_same"])
585
+ return [translations["sr_not_same"], None]
586
+
587
+ cfg = ckpt1["config"]
588
+ cfg_f0 = ckpt1["f0"]
589
+ cfg_version = ckpt1["version"]
590
+ cfg_sr = ckpt1["sr"]
591
+
592
+ vocoder = ckpt1.get("vocoder", "Default")
593
+
594
+ ckpt1 = extract(ckpt1) if "model" in ckpt1 else ckpt1["weight"]
595
+ ckpt2 = extract(ckpt2) if "model" in ckpt2 else ckpt2["weight"]
596
+
597
+ if sorted(list(ckpt1.keys())) != sorted(list(ckpt2.keys())):
598
+ gr_warning(translations["architectures_not_same"])
599
+ return [translations["architectures_not_same"], None]
600
+
601
+ gr_info(translations["start"].format(start=translations["fushion_model"]))
602
+
603
+ opt = OrderedDict()
604
+ opt["weight"] = {}
605
+
606
+ for key in ckpt1.keys():
607
+ if key == "emb_g.weight" and ckpt1[key].shape != ckpt2[key].shape:
608
+ min_shape0 = min(ckpt1[key].shape[0], ckpt2[key].shape[0])
609
+ opt["weight"][key] = (ratio * (ckpt1[key][:min_shape0].float()) + (1 - ratio) * (ckpt2[key][:min_shape0].float())).half()
610
+ else: opt["weight"][key] = (ratio * (ckpt1[key].float()) + (1 - ratio) * (ckpt2[key].float())).half()
611
+
612
+ opt["config"] = cfg
613
+ opt["sr"] = cfg_sr
614
+ opt["f0"] = cfg_f0
615
+ opt["version"] = cfg_version
616
+ opt["infos"] = translations["model_fushion_info"].format(name=name, pth_1=pth_1, pth_2=pth_2, ratio=ratio)
617
+ opt["vocoder"] = vocoder
618
+
619
+ output_model = os.path.join("assets", "weights")
620
+ if not os.path.exists(output_model): os.makedirs(output_model, exist_ok=True)
621
+
622
+ torch.save(opt, os.path.join(output_model, name))
623
+
624
+ gr_info(translations["success"])
625
+ return [translations["success"], os.path.join(output_model, name)]
626
+ except Exception as e:
627
+ gr_error(message=translations["error_occurred"].format(e=e))
628
+ logger.debug(e)
629
+ return [e, None]
630
+
631
+ def fushion_model(name, path_1, path_2, ratio):
632
+ if not name:
633
+ gr_warning(translations["provide_name_is_save"])
634
+ return [translations["provide_name_is_save"], None]
635
+
636
+ if path_1.endswith(".pth") and path_2.endswith(".pth"): return fushion_model_pth(name.replace(".onnx", ".pth"), path_1, path_2, ratio)
637
+ else:
638
+ gr_warning(translations["format_not_valid"])
639
+ return [None, None]
640
+
641
+ def onnx_export(model_path):
642
+ from main.library.algorithm.onnx_export import onnx_exporter
643
+
644
+ if not model_path.endswith(".pth"): model_path + ".pth"
645
+ if not model_path or not os.path.exists(model_path) or not model_path.endswith(".pth"):
646
+ gr_warning(translations["provide_file"].format(filename=translations["model"]))
647
+ return [None, translations["provide_file"].format(filename=translations["model"])]
648
+
649
+ try:
650
+ gr_info(translations["start_onnx_export"])
651
+ output = onnx_exporter(model_path, model_path.replace(".pth", ".onnx"), is_half=config.is_half, device=config.device)
652
+
653
+ gr_info(translations["success"])
654
+ return [output, translations["success"]]
655
+ except Exception as e:
656
+ return [None, e]
657
+
658
+ def model_info(path):
659
+ if not path or not os.path.exists(path) or os.path.isdir(path) or not path.endswith((".pth", ".onnx")): return gr_warning(translations["provide_file"].format(filename=translations["model"]))
660
+
661
+ def prettify_date(date_str):
662
+ if date_str == translations["not_found_create_time"]: return None
663
+
664
+ try:
665
+ return datetime.datetime.strptime(date_str, "%Y-%m-%dT%H:%M:%S.%f").strftime("%Y-%m-%d %H:%M:%S")
666
+ except ValueError as e:
667
+ logger.debug(e)
668
+ return translations["format_not_valid"]
669
+
670
+ if path.endswith(".pth"): model_data = torch.load(path, map_location=torch.device("cpu"))
671
+ else:
672
+ import onnx
673
+
674
+ model = onnx.load(path)
675
+ model_data = None
676
+
677
+ for prop in model.metadata_props:
678
+ if prop.key == "model_info":
679
+ model_data = json.loads(prop.value)
680
+ break
681
+
682
+ gr_info(translations["read_info"])
683
+
684
+ epochs = model_data.get("epoch", None)
685
+ if epochs is None:
686
+ epochs = model_data.get("info", None)
687
+ try:
688
+ epoch = epochs.replace("epoch", "").replace("e", "").isdigit()
689
+ if epoch and epochs is None: epochs = translations["not_found"].format(name=translations["epoch"])
690
+ except:
691
+ pass
692
+
693
+ steps = model_data.get("step", translations["not_found"].format(name=translations["step"]))
694
+ sr = model_data.get("sr", translations["not_found"].format(name=translations["sr"]))
695
+ f0 = model_data.get("f0", translations["not_found"].format(name=translations["f0"]))
696
+ version = model_data.get("version", translations["not_found"].format(name=translations["version"]))
697
+ creation_date = model_data.get("creation_date", translations["not_found_create_time"])
698
+ model_hash = model_data.get("model_hash", translations["not_found"].format(name="model_hash"))
699
+ pitch_guidance = translations["trained_f0"] if f0 else translations["not_f0"]
700
+ creation_date_str = prettify_date(creation_date) if creation_date else translations["not_found_create_time"]
701
+ model_name = model_data.get("model_name", translations["unregistered"])
702
+ model_author = model_data.get("author", translations["not_author"])
703
+ vocoder = model_data.get("vocoder", "Default")
704
+
705
+ gr_info(translations["success"])
706
+ return translations["model_info"].format(model_name=model_name, model_author=model_author, epochs=epochs, steps=steps, version=version, sr=sr, pitch_guidance=pitch_guidance, model_hash=model_hash, creation_date_str=creation_date_str, vocoder=vocoder)
707
+
708
+ def audio_effects(input_path, output_path, resample, resample_sr, chorus_depth, chorus_rate, chorus_mix, chorus_delay, chorus_feedback, distortion_drive, reverb_room_size, reverb_damping, reverb_wet_level, reverb_dry_level, reverb_width, reverb_freeze_mode, pitch_shift, delay_seconds, delay_feedback, delay_mix, compressor_threshold, compressor_ratio, compressor_attack_ms, compressor_release_ms, limiter_threshold, limiter_release, gain_db, bitcrush_bit_depth, clipping_threshold, phaser_rate_hz, phaser_depth, phaser_centre_frequency_hz, phaser_feedback, phaser_mix, bass_boost_db, bass_boost_frequency, treble_boost_db, treble_boost_frequency, fade_in_duration, fade_out_duration, export_format, chorus, distortion, reverb, delay, compressor, limiter, gain, bitcrush, clipping, phaser, treble_bass_boost, fade_in_out, audio_combination, audio_combination_input):
709
+ if not input_path or not os.path.exists(input_path) or os.path.isdir(input_path):
710
+ gr_warning(translations["input_not_valid"])
711
+ return None
712
+
713
+ if not output_path:
714
+ gr_warning(translations["output_not_valid"])
715
+ return None
716
+
717
+ if os.path.isdir(output_path): output_path = os.path.join(output_path, f"audio_effects.{export_format}")
718
+ output_dir = os.path.dirname(output_path) or output_path
719
+
720
+ if not os.path.exists(output_dir): os.makedirs(output_dir, exist_ok=True)
721
+ if os.path.exists(output_path): os.remove(output_path)
722
+
723
+ gr_info(translations["start"].format(start=translations["apply_effect"]))
724
+ subprocess.run([python, "main/inference/audio_effects.py", "--input_path", input_path, "--output_path", output_path, "--resample", str(resample), "--resample_sr", str(resample_sr), "--chorus_depth", str(chorus_depth), "--chorus_rate", str(chorus_rate), "--chorus_mix", str(chorus_mix), "--chorus_delay", str(chorus_delay), "--chorus_feedback", str(chorus_feedback), "--drive_db", str(distortion_drive), "--reverb_room_size", str(reverb_room_size), "--reverb_damping", str(reverb_damping), "--reverb_wet_level", str(reverb_wet_level), "--reverb_dry_level", str(reverb_dry_level), "--reverb_width", str(reverb_width), "--reverb_freeze_mode", str(reverb_freeze_mode), "--pitch_shift", str(pitch_shift), "--delay_seconds", str(delay_seconds), "--delay_feedback", str(delay_feedback), "--delay_mix", str(delay_mix), "--compressor_threshold", str(compressor_threshold), "--compressor_ratio", str(compressor_ratio), "--compressor_attack_ms", str(compressor_attack_ms), "--compressor_release_ms", str(compressor_release_ms), "--limiter_threshold", str(limiter_threshold), "--limiter_release", str(limiter_release), "--gain_db", str(gain_db), "--bitcrush_bit_depth", str(bitcrush_bit_depth), "--clipping_threshold", str(clipping_threshold), "--phaser_rate_hz", str(phaser_rate_hz), "--phaser_depth", str(phaser_depth), "--phaser_centre_frequency_hz", str(phaser_centre_frequency_hz), "--phaser_feedback", str(phaser_feedback), "--phaser_mix", str(phaser_mix), "--bass_boost_db", str(bass_boost_db), "--bass_boost_frequency", str(bass_boost_frequency), "--treble_boost_db", str(treble_boost_db), "--treble_boost_frequency", str(treble_boost_frequency), "--fade_in_duration", str(fade_in_duration), "--fade_out_duration", str(fade_out_duration), "--export_format", export_format, "--chorus", str(chorus), "--distortion", str(distortion), "--reverb", str(reverb), "--pitchshift", str(pitch_shift != 0), "--delay", str(delay), "--compressor", str(compressor), "--limiter", str(limiter), "--gain", str(gain), "--bitcrush", str(bitcrush), "--clipping", str(clipping), "--phaser", str(phaser), "--treble_bass_boost", str(treble_bass_boost), "--fade_in_out", str(fade_in_out), "--audio_combination", str(audio_combination), "--audio_combination_input", audio_combination_input])
725
+
726
+ gr_info(translations["success"])
727
+ return output_path.replace("wav", export_format)
728
+
729
+ def synthesize_tts(prompt, voice, speed, output, pitch, google):
730
+ if not google:
731
+ from edge_tts import Communicate
732
+
733
+ asyncio.run(Communicate(text=prompt, voice=voice, rate=f"+{speed}%" if speed >= 0 else f"{speed}%", pitch=f"+{pitch}Hz" if pitch >= 0 else f"{pitch}Hz").save(output))
734
+ else:
735
+ response = requests.get(codecs.decode("uggcf://genafyngr.tbbtyr.pbz/genafyngr_ggf", "rot13"), params={"ie": "UTF-8", "q": prompt, "tl": voice, "ttsspeed": speed, "client": "tw-ob"}, headers={"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36"})
736
+
737
+ if response.status_code == 200:
738
+ with open(output, "wb") as f:
739
+ f.write(response.content)
740
+
741
+ if pitch != 0 or speed != 0:
742
+ y, sr = librosa.load(output, sr=None)
743
+
744
+ if pitch != 0: y = librosa.effects.pitch_shift(y, sr=sr, n_steps=pitch)
745
+ if speed != 0: y = librosa.effects.time_stretch(y, rate=speed)
746
+
747
+ sf.write(file=output, data=y, samplerate=sr, format=os.path.splitext(os.path.basename(output))[-1].lower().replace('.', ''))
748
+ else: gr_error(f"{response.status_code}, {response.text}")
749
+
750
+ def time_stretch(y, sr, target_duration):
751
+ rate = (len(y) / sr) / target_duration
752
+ if rate != 1.0: y = librosa.effects.time_stretch(y=y.astype(np.float32), rate=rate)
753
+
754
+ n_target = int(round(target_duration * sr))
755
+ return np.pad(y, (0, n_target - len(y))) if len(y) < n_target else y[:n_target]
756
+
757
+ def pysrttime_to_seconds(t):
758
+ return (t.hours * 60 + t.minutes) * 60 + t.seconds + t.milliseconds / 1000
759
+
760
+ def srt_tts(srt_file, out_file, voice, rate = 0, sr = 24000, google = False):
761
+ import pysrt
762
+ import tempfile
763
+
764
+ subs = pysrt.open(srt_file)
765
+ if not subs: raise ValueError(translations["srt"])
766
+
767
+ final_audio = np.zeros(int(round(pysrttime_to_seconds(subs[-1].end) * sr)), dtype=np.float32)
768
+
769
+ with tempfile.TemporaryDirectory() as tempdir:
770
+ for idx, seg in enumerate(subs):
771
+ wav_path = os.path.join(tempdir, f"seg_{idx}.wav")
772
+ synthesize_tts(" ".join(seg.text.splitlines()), voice, 0, wav_path, rate, google)
773
+
774
+ audio, file_sr = sf.read(wav_path, dtype=np.float32)
775
+ if file_sr != sr: audio = np.interp(np.linspace(0, len(audio) - 1, int(len(audio) * sr / file_sr)), np.arange(len(audio)), audio)
776
+ adjusted = time_stretch(audio, sr, pysrttime_to_seconds(seg.duration))
777
+
778
+ start_sample = int(round(pysrttime_to_seconds(seg.start) * sr))
779
+ end_sample = start_sample + adjusted.shape[0]
780
+
781
+ if end_sample > final_audio.shape[0]:
782
+ adjusted = adjusted[: final_audio.shape[0] - start_sample]
783
+ end_sample = final_audio.shape[0]
784
+
785
+ final_audio[start_sample:end_sample] += adjusted
786
+
787
+ sf.write(out_file, final_audio, sr)
788
+
789
+ def TTS(prompt, voice, speed, output, pitch, google, srt_input):
790
+ if not srt_input: srt_input = ""
791
+
792
+ if not prompt and not srt_input.endswith(".srt"):
793
+ gr_warning(translations["enter_the_text"])
794
+ return None
795
+
796
+ if not voice:
797
+ gr_warning(translations["choose_voice"])
798
+ return None
799
+
800
+ if not output:
801
+ gr_warning(translations["output_not_valid"])
802
+ return None
803
+
804
+ if os.path.isdir(output): output = os.path.join(output, f"tts.wav")
805
+ gr_info(translations["convert"].format(name=translations["text"]))
806
+
807
+ output_dir = os.path.dirname(output) or output
808
+ if not os.path.exists(output_dir): os.makedirs(output_dir, exist_ok=True)
809
+
810
+ if srt_input.endswith(".srt"): srt_tts(srt_input, output, voice, 0, 24000, google)
811
+ else: synthesize_tts(prompt, voice, speed, output, pitch, google)
812
+
813
+ gr_info(translations["success"])
814
+ return output
815
+
816
+ def separator_music(input, output_audio, format, shifts, segments_size, overlap, clean_audio, clean_strength, denoise, separator_model, kara_model, backing, reverb, backing_reverb, hop_length, batch_size, sample_rate):
817
+ output = os.path.dirname(output_audio) or output_audio
818
+
819
+ if not input or not os.path.exists(input) or os.path.isdir(input):
820
+ gr_warning(translations["input_not_valid"])
821
+ return [None]*4
822
+
823
+ if not os.path.exists(output):
824
+ gr_warning(translations["output_not_valid"])
825
+ return [None]*4
826
+
827
+ if not os.path.exists(output): os.makedirs(output)
828
+ gr_info(translations["start"].format(start=translations["separator_music"]))
829
+
830
+ subprocess.run([python, "main/inference/separator_music.py", "--input_path", input, "--output_path", output, "--format", format, "--shifts", str(shifts), "--segments_size", str(segments_size), "--overlap", str(overlap), "--mdx_hop_length", str(hop_length), "--mdx_batch_size", str(batch_size), "--clean_audio", str(clean_audio), "--clean_strength", str(clean_strength), "--kara_model", kara_model, "--backing", str(backing), "--mdx_denoise", str(denoise), "--reverb", str(reverb), "--backing_reverb", str(backing_reverb), "--model_name", separator_model, "--sample_rate", str(sample_rate)])
831
+ gr_info(translations["success"])
832
+
833
+ filename, _ = os.path.splitext(os.path.basename(input))
834
+ output = os.path.join(output, filename)
835
+
836
+ return [os.path.join(output, f"Original_Vocals_No_Reverb.{format}") if reverb else os.path.join(output, f"Original_Vocals.{format}"), os.path.join(output, f"Instruments.{format}"), (os.path.join(output, f"Main_Vocals_No_Reverb.{format}") if reverb else os.path.join(output, f"Main_Vocals.{format}") if backing else None), (os.path.join(output, f"Backing_Vocals_No_Reverb.{format}") if backing_reverb else os.path.join(output, f"Backing_Vocals.{format}") if backing else None)] if os.path.isfile(input) else [None]*4
837
+
838
+ def convert(pitch, filter_radius, index_rate, volume_envelope, protect, hop_length, f0_method, input_path, output_path, pth_path, index_path, f0_autotune, clean_audio, clean_strength, export_format, embedder_model, resample_sr, split_audio, f0_autotune_strength, checkpointing, onnx_f0_mode, embedders_mode, formant_shifting, formant_qfrency, formant_timbre, f0_file):
839
+ subprocess.run([python, "main/inference/convert.py", "--pitch", str(pitch), "--filter_radius", str(filter_radius), "--index_rate", str(index_rate), "--volume_envelope", str(volume_envelope), "--protect", str(protect), "--hop_length", str(hop_length), "--f0_method", f0_method, "--input_path", input_path, "--output_path", output_path, "--pth_path", pth_path, "--index_path", index_path if index_path else "", "--f0_autotune", str(f0_autotune), "--clean_audio", str(clean_audio), "--clean_strength", str(clean_strength), "--export_format", export_format, "--embedder_model", embedder_model, "--resample_sr", str(resample_sr), "--split_audio", str(split_audio), "--f0_autotune_strength", str(f0_autotune_strength), "--checkpointing", str(checkpointing), "--f0_onnx", str(onnx_f0_mode), "--embedders_mode", embedders_mode, "--formant_shifting", str(formant_shifting), "--formant_qfrency", str(formant_qfrency), "--formant_timbre", str(formant_timbre), "--f0_file", f0_file])
840
+
841
+ def convert_audio(clean, autotune, use_audio, use_original, convert_backing, not_merge_backing, merge_instrument, pitch, clean_strength, model, index, index_rate, input, output, format, method, hybrid_method, hop_length, embedders, custom_embedders, resample_sr, filter_radius, volume_envelope, protect, split_audio, f0_autotune_strength, input_audio_name, checkpointing, onnx_f0_mode, formant_shifting, formant_qfrency, formant_timbre, f0_file, embedders_mode):
842
+ model_path = os.path.join("assets", "weights", model)
843
+
844
+ return_none = [None]*6
845
+ return_none[5] = {"visible": True, "__type__": "update"}
846
+
847
+ if not use_audio:
848
+ if merge_instrument or not_merge_backing or convert_backing or use_original:
849
+ gr_warning(translations["turn_on_use_audio"])
850
+ return return_none
851
+
852
+ if use_original:
853
+ if convert_backing:
854
+ gr_warning(translations["turn_off_convert_backup"])
855
+ return return_none
856
+ elif not_merge_backing:
857
+ gr_warning(translations["turn_off_merge_backup"])
858
+ return return_none
859
+
860
+ if not model or not os.path.exists(model_path) or os.path.isdir(model_path) or not model.endswith((".pth", ".onnx")):
861
+ gr_warning(translations["provide_file"].format(filename=translations["model"]))
862
+ return return_none
863
+
864
+ f0method, embedder_model = (method if method != "hybrid" else hybrid_method), (embedders if embedders != "custom" else custom_embedders)
865
+
866
+ if use_audio:
867
+ output_audio = os.path.join("audios", input_audio_name)
868
+
869
+ from main.library.utils import pydub_convert, pydub_load
870
+
871
+ def get_audio_file(label):
872
+ matching_files = [f for f in os.listdir(output_audio) if label in f]
873
+
874
+ if not matching_files: return translations["notfound"]
875
+ return os.path.join(output_audio, matching_files[0])
876
+
877
+ output_path = os.path.join(output_audio, f"Convert_Vocals.{format}")
878
+ output_backing = os.path.join(output_audio, f"Convert_Backing.{format}")
879
+ output_merge_backup = os.path.join(output_audio, f"Vocals+Backing.{format}")
880
+ output_merge_instrument = os.path.join(output_audio, f"Vocals+Instruments.{format}")
881
+
882
+ if os.path.exists(output_audio): os.makedirs(output_audio, exist_ok=True)
883
+ if os.path.exists(output_path): os.remove(output_path)
884
+
885
+ if use_original:
886
+ original_vocal = get_audio_file('Original_Vocals_No_Reverb.')
887
+
888
+ if original_vocal == translations["notfound"]: original_vocal = get_audio_file('Original_Vocals.')
889
+
890
+ if original_vocal == translations["notfound"]:
891
+ gr_warning(translations["not_found_original_vocal"])
892
+ return return_none
893
+
894
+ input_path = original_vocal
895
+ else:
896
+ main_vocal = get_audio_file('Main_Vocals_No_Reverb.')
897
+ backing_vocal = get_audio_file('Backing_Vocals_No_Reverb.')
898
+
899
+ if main_vocal == translations["notfound"]: main_vocal = get_audio_file('Main_Vocals.')
900
+ if not not_merge_backing and backing_vocal == translations["notfound"]: backing_vocal = get_audio_file('Backing_Vocals.')
901
+
902
+ if main_vocal == translations["notfound"]:
903
+ gr_warning(translations["not_found_main_vocal"])
904
+ return return_none
905
+
906
+ if not not_merge_backing and backing_vocal == translations["notfound"]:
907
+ gr_warning(translations["not_found_backing_vocal"])
908
+ return return_none
909
+
910
+ input_path = main_vocal
911
+ backing_path = backing_vocal
912
+
913
+ gr_info(translations["convert_vocal"])
914
+
915
+ convert(pitch, filter_radius, index_rate, volume_envelope, protect, hop_length, f0method, input_path, output_path, model_path, index, autotune, clean, clean_strength, format, embedder_model, resample_sr, split_audio, f0_autotune_strength, checkpointing, onnx_f0_mode, embedders_mode, formant_shifting, formant_qfrency, formant_timbre, f0_file)
916
+
917
+ gr_info(translations["convert_success"])
918
+
919
+ if convert_backing:
920
+ if os.path.exists(output_backing): os.remove(output_backing)
921
+
922
+ gr_info(translations["convert_backup"])
923
+
924
+ convert(pitch, filter_radius, index_rate, volume_envelope, protect, hop_length, f0method, backing_path, output_backing, model_path, index, autotune, clean, clean_strength, format, embedder_model, resample_sr, split_audio, f0_autotune_strength, checkpointing, onnx_f0_mode, embedders_mode, formant_shifting, formant_qfrency, formant_timbre, f0_file)
925
+
926
+ gr_info(translations["convert_backup_success"])
927
+
928
+ try:
929
+ if not not_merge_backing and not use_original:
930
+ backing_source = output_backing if convert_backing else backing_vocal
931
+
932
+ if os.path.exists(output_merge_backup): os.remove(output_merge_backup)
933
+
934
+ gr_info(translations["merge_backup"])
935
+
936
+ pydub_convert(pydub_load(output_path)).overlay(pydub_convert(pydub_load(backing_source))).export(output_merge_backup, format=format)
937
+
938
+ gr_info(translations["merge_success"])
939
+
940
+ if merge_instrument:
941
+ vocals = output_merge_backup if not not_merge_backing and not use_original else output_path
942
+
943
+ if os.path.exists(output_merge_instrument): os.remove(output_merge_instrument)
944
+
945
+ gr_info(translations["merge_instruments_process"])
946
+
947
+ instruments = get_audio_file('Instruments.')
948
+
949
+ if instruments == translations["notfound"]:
950
+ gr_warning(translations["not_found_instruments"])
951
+ output_merge_instrument = None
952
+ else: pydub_convert(pydub_load(instruments)).overlay(pydub_convert(pydub_load(vocals))).export(output_merge_instrument, format=format)
953
+
954
+ gr_info(translations["merge_success"])
955
+ except:
956
+ return return_none
957
+
958
+ return [(None if use_original else output_path), output_backing, (None if not_merge_backing and use_original else output_merge_backup), (output_path if use_original else None), (output_merge_instrument if merge_instrument else None), {"visible": True, "__type__": "update"}]
959
+ else:
960
+ if not input or not os.path.exists(input) or os.path.isdir(input):
961
+ gr_warning(translations["input_not_valid"])
962
+ return return_none
963
+
964
+ if not output:
965
+ gr_warning(translations["output_not_valid"])
966
+ return return_none
967
+
968
+ output = output.replace("wav", format)
969
+
970
+ if os.path.isdir(input):
971
+ gr_info(translations["is_folder"])
972
+
973
+ if not [f for f in os.listdir(input) if f.lower().endswith(("wav", "mp3", "flac", "ogg", "opus", "m4a", "mp4", "aac", "alac", "wma", "aiff", "webm", "ac3"))]:
974
+ gr_warning(translations["not_found_in_folder"])
975
+ return return_none
976
+
977
+ gr_info(translations["batch_convert"])
978
+
979
+ output_dir = os.path.dirname(output) or output
980
+ convert(pitch, filter_radius, index_rate, volume_envelope, protect, hop_length, f0method, input, output_dir, model_path, index, autotune, clean, clean_strength, format, embedder_model, resample_sr, split_audio, f0_autotune_strength, checkpointing, onnx_f0_mode, embedders_mode, formant_shifting, formant_qfrency, formant_timbre, f0_file)
981
+
982
+ gr_info(translations["batch_convert_success"])
983
+
984
+ return return_none
985
+ else:
986
+ output_dir = os.path.dirname(output) or output
987
+
988
+ if not os.path.exists(output_dir): os.makedirs(output_dir, exist_ok=True)
989
+ if os.path.exists(output): os.remove(output)
990
+
991
+ gr_info(translations["convert_vocal"])
992
+
993
+ convert(pitch, filter_radius, index_rate, volume_envelope, protect, hop_length, f0method, input, output, model_path, index, autotune, clean, clean_strength, format, embedder_model, resample_sr, split_audio, f0_autotune_strength, checkpointing, onnx_f0_mode, embedders_mode, formant_shifting, formant_qfrency, formant_timbre, f0_file)
994
+
995
+ gr_info(translations["convert_success"])
996
+
997
+ return_none[0] = output
998
+ return return_none
999
+
1000
+ def convert_selection(clean, autotune, use_audio, use_original, convert_backing, not_merge_backing, merge_instrument, pitch, clean_strength, model, index, index_rate, input, output, format, method, hybrid_method, hop_length, embedders, custom_embedders, resample_sr, filter_radius, volume_envelope, protect, split_audio, f0_autotune_strength, checkpointing, onnx_f0_mode, formant_shifting, formant_qfrency, formant_timbre, f0_file, embedders_mode):
1001
+ if use_audio:
1002
+ gr_info(translations["search_separate"])
1003
+
1004
+ choice = [f for f in os.listdir("audios") if os.path.isdir(os.path.join("audios", f))]
1005
+
1006
+ gr_info(translations["found_choice"].format(choice=len(choice)))
1007
+
1008
+ if len(choice) == 0:
1009
+ gr_warning(translations["separator==0"])
1010
+
1011
+ return [{"choices": [], "value": "", "interactive": False, "visible": False, "__type__": "update"}, None, None, None, None, None, {"visible": True, "__type__": "update"}]
1012
+ elif len(choice) == 1:
1013
+ convert_output = convert_audio(clean, autotune, use_audio, use_original, convert_backing, not_merge_backing, merge_instrument, pitch, clean_strength, model, index, index_rate, None, None, format, method, hybrid_method, hop_length, embedders, custom_embedders, resample_sr, filter_radius, volume_envelope, protect, split_audio, f0_autotune_strength, choice[0], checkpointing, onnx_f0_mode, formant_shifting, formant_qfrency, formant_timbre, f0_file, embedders_mode)
1014
+
1015
+ return [{"choices": [], "value": "", "interactive": False, "visible": False, "__type__": "update"}, convert_output[0], convert_output[1], convert_output[2], convert_output[3], convert_output[4], {"visible": True, "__type__": "update"}]
1016
+ else: return [{"choices": choice, "value": "", "interactive": True, "visible": True, "__type__": "update"}, None, None, None, None, None, {"visible": False, "__type__": "update"}]
1017
+ else:
1018
+ main_convert = convert_audio(clean, autotune, use_audio, use_original, convert_backing, not_merge_backing, merge_instrument, pitch, clean_strength, model, index, index_rate, input, output, format, method, hybrid_method, hop_length, embedders, custom_embedders, resample_sr, filter_radius, volume_envelope, protect, split_audio, f0_autotune_strength, None, checkpointing, onnx_f0_mode, formant_shifting, formant_qfrency, formant_timbre, f0_file, embedders_mode)
1019
+
1020
+ return [{"choices": [], "value": "", "interactive": False, "visible": False, "__type__": "update"}, main_convert[0], None, None, None, None, {"visible": True, "__type__": "update"}]
1021
+
1022
+ def convert_with_whisper(num_spk, model_size, cleaner, clean_strength, autotune, f0_autotune_strength, checkpointing, model_1, model_2, model_index_1, model_index_2, pitch_1, pitch_2, index_strength_1, index_strength_2, export_format, input_audio, output_audio, onnx_f0_mode, method, hybrid_method, hop_length, embed_mode, embedders, custom_embedders, resample_sr, filter_radius, volume_envelope, protect, formant_shifting, formant_qfrency_1, formant_timbre_1, formant_qfrency_2, formant_timbre_2):
1023
+ from pydub import AudioSegment
1024
+ from sklearn.cluster import AgglomerativeClustering
1025
+
1026
+ from main.library.speaker_diarization.audio import Audio
1027
+ from main.library.speaker_diarization.segment import Segment
1028
+ from main.library.speaker_diarization.whisper import load_model
1029
+ from main.library.utils import check_spk_diarization, pydub_convert, pydub_load
1030
+ from main.library.speaker_diarization.embedding import SpeechBrainPretrainedSpeakerEmbedding
1031
+
1032
+ check_spk_diarization(model_size)
1033
+ model_pth_1, model_pth_2 = os.path.join("assets", "weights", model_1), os.path.join("assets", "weights", model_2)
1034
+
1035
+ if (not model_1 or not os.path.exists(model_pth_1) or os.path.isdir(model_pth_1) or not model_pth_1.endswith((".pth", ".onnx"))) and (not model_2 or not os.path.exists(model_pth_2) or os.path.isdir(model_pth_2) or not model_pth_2.endswith((".pth", ".onnx"))):
1036
+ gr_warning(translations["provide_file"].format(filename=translations["model"]))
1037
+ return None
1038
+
1039
+ if not model_1: model_pth_1 = model_pth_2
1040
+ if not model_2: model_pth_2 = model_pth_1
1041
+
1042
+ if not input_audio or not os.path.exists(input_audio) or os.path.isdir(input_audio):
1043
+ gr_warning(translations["input_not_valid"])
1044
+ return None
1045
+
1046
+ if not output_audio:
1047
+ gr_warning(translations["output_not_valid"])
1048
+ return None
1049
+
1050
+ if os.path.exists(output_audio): os.remove(output_audio)
1051
+ gr_info(translations["start_whisper"])
1052
+
1053
+ try:
1054
+ audio = Audio()
1055
+
1056
+ embedding_model = SpeechBrainPretrainedSpeakerEmbedding(device=config.device)
1057
+ segments = load_model(model_size, device=config.device).transcribe(input_audio, fp16=configs.get("fp16", False), word_timestamps=True)["segments"]
1058
+
1059
+ y, sr = librosa.load(input_audio, sr=None)
1060
+ duration = len(y) / sr
1061
+
1062
+ def segment_embedding(segment):
1063
+ waveform, _ = audio.crop(input_audio, Segment(segment["start"], min(duration, segment["end"])))
1064
+ return embedding_model(waveform.mean(dim=0, keepdim=True)[None] if waveform.shape[0] == 2 else waveform[None])
1065
+
1066
+ def time(secs):
1067
+ return datetime.timedelta(seconds=round(secs))
1068
+
1069
+ def merge_audio(files_list, time_stamps, original_file_path, output_path, format):
1070
+ def extract_number(filename):
1071
+ match = re.search(r'_(\d+)', filename)
1072
+ return int(match.group(1)) if match else 0
1073
+
1074
+ total_duration = len(pydub_load(original_file_path))
1075
+ combined = AudioSegment.empty()
1076
+ current_position = 0
1077
+
1078
+ for file, (start_i, end_i) in zip(sorted(files_list, key=extract_number), time_stamps):
1079
+ if start_i > current_position: combined += AudioSegment.silent(duration=start_i - current_position)
1080
+
1081
+ combined += pydub_load(file)
1082
+ current_position = end_i
1083
+
1084
+ if current_position < total_duration: combined += AudioSegment.silent(duration=total_duration - current_position)
1085
+ combined.export(output_path, format=format)
1086
+
1087
+ return output_path
1088
+
1089
+ embeddings = np.zeros(shape=(len(segments), 192))
1090
+ for i, segment in enumerate(segments):
1091
+ embeddings[i] = segment_embedding(segment)
1092
+
1093
+ labels = AgglomerativeClustering(num_spk).fit(np.nan_to_num(embeddings)).labels_
1094
+ for i in range(len(segments)):
1095
+ segments[i]["speaker"] = 'SPEAKER ' + str(labels[i] + 1)
1096
+
1097
+ merged_segments, current_text = [], []
1098
+ current_speaker, current_start = None, None
1099
+
1100
+ for i, segment in enumerate(segments):
1101
+ speaker = segment["speaker"]
1102
+ start_time = segment["start"]
1103
+ text = segment["text"][1:]
1104
+
1105
+ if speaker == current_speaker:
1106
+ current_text.append(text)
1107
+ end_time = segment["end"]
1108
+ else:
1109
+ if current_speaker is not None: merged_segments.append({"speaker": current_speaker, "start": current_start, "end": end_time, "text": " ".join(current_text)})
1110
+
1111
+ current_speaker = speaker
1112
+ current_start = start_time
1113
+ current_text = [text]
1114
+ end_time = segment["end"]
1115
+
1116
+ if current_speaker is not None: merged_segments.append({"speaker": current_speaker, "start": current_start, "end": end_time, "text": " ".join(current_text)})
1117
+
1118
+ gr_info(translations["whisper_done"])
1119
+
1120
+ x = ""
1121
+ for segment in merged_segments:
1122
+ x += f"\n{segment['speaker']} {str(time(segment['start']))} - {str(time(segment['end']))}\n"
1123
+ x += segment["text"] + "\n"
1124
+
1125
+ logger.info(x)
1126
+
1127
+ gr_info(translations["process_audio"])
1128
+
1129
+ audio = pydub_convert(pydub_load(input_audio))
1130
+ output_folder = "audios_temp"
1131
+
1132
+ if os.path.exists(output_folder): shutil.rmtree(output_folder, ignore_errors=True)
1133
+ for f in [output_folder, os.path.join(output_folder, "1"), os.path.join(output_folder, "2")]:
1134
+ os.makedirs(f, exist_ok=True)
1135
+
1136
+ time_stamps, processed_segments = [], []
1137
+ for i, segment in enumerate(merged_segments):
1138
+ start_ms = int(segment["start"] * 1000)
1139
+ end_ms = int(segment["end"] * 1000)
1140
+
1141
+ index = i + 1
1142
+
1143
+ segment_filename = os.path.join(output_folder, "1" if i % 2 == 1 else "2", f"segment_{index}.wav")
1144
+ audio[start_ms:end_ms].export(segment_filename, format="wav")
1145
+
1146
+ processed_segments.append(os.path.join(output_folder, "1" if i % 2 == 1 else "2", f"segment_{index}_output.wav"))
1147
+ time_stamps.append((start_ms, end_ms))
1148
+
1149
+ f0method, embedder_model = (method if method != "hybrid" else hybrid_method), (embedders if embedders != "custom" else custom_embedders)
1150
+
1151
+ gr_info(translations["process_done_start_convert"])
1152
+
1153
+ convert(pitch_1, filter_radius, index_strength_1, volume_envelope, protect, hop_length, f0method, os.path.join(output_folder, "1"), output_folder, model_pth_1, model_index_1, autotune, cleaner, clean_strength, "wav", embedder_model, resample_sr, False, f0_autotune_strength, checkpointing, onnx_f0_mode, embed_mode, formant_shifting, formant_qfrency_1, formant_timbre_1, "")
1154
+ convert(pitch_2, filter_radius, index_strength_2, volume_envelope, protect, hop_length, f0method, os.path.join(output_folder, "2"), output_folder, model_pth_2, model_index_2, autotune, cleaner, clean_strength, "wav", embedder_model, resample_sr, False, f0_autotune_strength, checkpointing, onnx_f0_mode, embed_mode, formant_shifting, formant_qfrency_2, formant_timbre_2, "")
1155
+
1156
+ gr_info(translations["convert_success"])
1157
+ return merge_audio(processed_segments, time_stamps, input_audio, output_audio.replace("wav", export_format), export_format)
1158
+ except Exception as e:
1159
+ gr_error(translations["error_occurred"].format(e=e))
1160
+ import traceback
1161
+ logger.debug(traceback.format_exc())
1162
+ return None
1163
+ finally:
1164
+ if os.path.exists("audios_temp"): shutil.rmtree("audios_temp", ignore_errors=True)
1165
+
1166
+ def convert_tts(clean, autotune, pitch, clean_strength, model, index, index_rate, input, output, format, method, hybrid_method, hop_length, embedders, custom_embedders, resample_sr, filter_radius, volume_envelope, protect, split_audio, f0_autotune_strength, checkpointing, onnx_f0_mode, formant_shifting, formant_qfrency, formant_timbre, f0_file, embedders_mode):
1167
+ model_path = os.path.join("assets", "weights", model)
1168
+
1169
+ if not model_path or not os.path.exists(model_path) or os.path.isdir(model_path) or not model.endswith((".pth", ".onnx")):
1170
+ gr_warning(translations["provide_file"].format(filename=translations["model"]))
1171
+ return None
1172
+
1173
+ if not input or not os.path.exists(input):
1174
+ gr_warning(translations["input_not_valid"])
1175
+ return None
1176
+
1177
+ if os.path.isdir(input):
1178
+ input_audio = [f for f in os.listdir(input) if "tts" in f and f.lower().endswith(("wav", "mp3", "flac", "ogg", "opus", "m4a", "mp4", "aac", "alac", "wma", "aiff", "webm", "ac3"))]
1179
+
1180
+ if not input_audio:
1181
+ gr_warning(translations["not_found_in_folder"])
1182
+ return None
1183
+
1184
+ input = os.path.join(input, input_audio[0])
1185
+
1186
+ if not output:
1187
+ gr_warning(translations["output_not_valid"])
1188
+ return None
1189
+
1190
+ output = output.replace("wav", format)
1191
+ if os.path.isdir(output): output = os.path.join(output, f"tts.{format}")
1192
+
1193
+ output_dir = os.path.dirname(output)
1194
+ if not os.path.exists(output_dir): os.makedirs(output_dir, exist_ok=True)
1195
+
1196
+ if os.path.exists(output): os.remove(output)
1197
+
1198
+ f0method = method if method != "hybrid" else hybrid_method
1199
+ embedder_model = embedders if embedders != "custom" else custom_embedders
1200
+
1201
+ gr_info(translations["convert_vocal"])
1202
+
1203
+ convert(pitch, filter_radius, index_rate, volume_envelope, protect, hop_length, f0method, input, output, model_path, index, autotune, clean, clean_strength, format, embedder_model, resample_sr, split_audio, f0_autotune_strength, checkpointing, onnx_f0_mode, embedders_mode, formant_shifting, formant_qfrency, formant_timbre, f0_file)
1204
+
1205
+ gr_info(translations["convert_success"])
1206
+ return output
1207
+
1208
+ def log_read(log_file, done):
1209
+ f = open(log_file, "w", encoding="utf-8")
1210
+ f.close()
1211
+
1212
+ while 1:
1213
+ with open(log_file, "r", encoding="utf-8") as f:
1214
+ yield "".join(line for line in f.readlines() if "DEBUG" not in line and line.strip() != "")
1215
+
1216
+ sleep(1)
1217
+ if done[0]: break
1218
+
1219
+ with open(log_file, "r", encoding="utf-8") as f:
1220
+ log = "".join(line for line in f.readlines() if "DEBUG" not in line and line.strip() != "")
1221
+
1222
+ yield log
1223
+
1224
+ def create_dataset(input_audio, output_dataset, clean_dataset, clean_strength, separator_reverb, kim_vocals_version, overlap, segments_size, denoise_mdx, skip, skip_start, skip_end, hop_length, batch_size, sample_rate):
1225
+ version = 1 if kim_vocals_version == "Version-1" else 2
1226
+
1227
+ gr_info(translations["start"].format(start=translations["create"]))
1228
+
1229
+ p = subprocess.Popen(f'{python} main/inference/create_dataset.py --input_audio "{input_audio}" --output_dataset "{output_dataset}" --clean_dataset {clean_dataset} --clean_strength {clean_strength} --separator_reverb {separator_reverb} --kim_vocal_version {version} --overlap {overlap} --segments_size {segments_size} --mdx_hop_length {hop_length} --mdx_batch_size {batch_size} --denoise_mdx {denoise_mdx} --skip {skip} --skip_start_audios "{skip_start}" --skip_end_audios "{skip_end}" --sample_rate {sample_rate}', shell=True)
1230
+ done = [False]
1231
+
1232
+ threading.Thread(target=if_done, args=(done, p)).start()
1233
+
1234
+ for log in log_read(os.path.join("assets", "logs", "create_dataset.log"), done):
1235
+ yield log
1236
+
1237
+ def preprocess(model_name, sample_rate, cpu_core, cut_preprocess, process_effects, path, clean_dataset, clean_strength):
1238
+ dataset = os.path.join(path)
1239
+ sr = int(float(sample_rate.rstrip("k")) * 1000)
1240
+
1241
+ if not model_name: return gr_warning(translations["provide_name"])
1242
+ if not any(f.lower().endswith(("wav", "mp3", "flac", "ogg", "opus", "m4a", "mp4", "aac", "alac", "wma", "aiff", "webm", "ac3")) for f in os.listdir(dataset) if os.path.isfile(os.path.join(dataset, f))): return gr_warning(translations["not_found_data"])
1243
+
1244
+ model_dir = os.path.join("assets", "logs", model_name)
1245
+ if os.path.exists(model_dir): shutil.rmtree(model_dir, ignore_errors=True)
1246
+
1247
+ p = subprocess.Popen(f'{python} main/inference/preprocess.py --model_name "{model_name}" --dataset_path "{dataset}" --sample_rate {sr} --cpu_cores {cpu_core} --cut_preprocess {cut_preprocess} --process_effects {process_effects} --clean_dataset {clean_dataset} --clean_strength {clean_strength}', shell=True)
1248
+ done = [False]
1249
+
1250
+ threading.Thread(target=if_done, args=(done, p)).start()
1251
+ os.makedirs(model_dir, exist_ok=True)
1252
+
1253
+ for log in log_read(os.path.join(model_dir, "preprocess.log"), done):
1254
+ yield log
1255
+
1256
+ def extract(model_name, version, method, pitch_guidance, hop_length, cpu_cores, gpu, sample_rate, embedders, custom_embedders, onnx_f0_mode, embedders_mode):
1257
+ embedder_model = embedders if embedders != "custom" else custom_embedders
1258
+ sr = int(float(sample_rate.rstrip("k")) * 1000)
1259
+
1260
+ if not model_name: return gr_warning(translations["provide_name"])
1261
+
1262
+ model_dir = os.path.join("assets", "logs", model_name)
1263
+ if not any(os.path.isfile(os.path.join(model_dir, "sliced_audios", f)) for f in os.listdir(os.path.join(model_dir, "sliced_audios"))) or not any(os.path.isfile(os.path.join(model_dir, "sliced_audios_16k", f)) for f in os.listdir(os.path.join(model_dir, "sliced_audios_16k"))): return gr_warning(translations["not_found_data_preprocess"])
1264
+
1265
+ p = subprocess.Popen(f'{python} main/inference/extract.py --model_name "{model_name}" --rvc_version {version} --f0_method {method} --pitch_guidance {pitch_guidance} --hop_length {hop_length} --cpu_cores {cpu_cores} --gpu {gpu} --sample_rate {sr} --embedder_model {embedder_model} --f0_onnx {onnx_f0_mode} --embedders_mode {embedders_mode}', shell=True)
1266
+ done = [False]
1267
+
1268
+ threading.Thread(target=if_done, args=(done, p)).start()
1269
+ os.makedirs(model_dir, exist_ok=True)
1270
+
1271
+ for log in log_read(os.path.join(model_dir, "extract.log"), done):
1272
+ yield log
1273
+
1274
+ def create_index(model_name, rvc_version, index_algorithm):
1275
+ if not model_name: return gr_warning(translations["provide_name"])
1276
+ model_dir = os.path.join("assets", "logs", model_name)
1277
+
1278
+ if not any(os.path.isfile(os.path.join(model_dir, f"{rvc_version}_extracted", f)) for f in os.listdir(os.path.join(model_dir, f"{rvc_version}_extracted"))): return gr_warning(translations["not_found_data_extract"])
1279
+
1280
+ p = subprocess.Popen(f'{python} main/inference/create_index.py --model_name "{model_name}" --rvc_version {rvc_version} --index_algorithm {index_algorithm}', shell=True)
1281
+ done = [False]
1282
+
1283
+ threading.Thread(target=if_done, args=(done, p)).start()
1284
+ os.makedirs(model_dir, exist_ok=True)
1285
+
1286
+ for log in log_read(os.path.join(model_dir, "create_index.log"), done):
1287
+ yield log
1288
+
1289
+ def training(model_name, rvc_version, save_every_epoch, save_only_latest, save_every_weights, total_epoch, sample_rate, batch_size, gpu, pitch_guidance, not_pretrain, custom_pretrained, pretrain_g, pretrain_d, detector, threshold, clean_up, cache, model_author, vocoder, checkpointing, deterministic, benchmark):
1290
+ sr = int(float(sample_rate.rstrip("k")) * 1000)
1291
+ if not model_name: return gr_warning(translations["provide_name"])
1292
+
1293
+ model_dir = os.path.join("assets", "logs", model_name)
1294
+ if os.path.exists(os.path.join(model_dir, "train_pid.txt")): os.remove(os.path.join(model_dir, "train_pid.txt"))
1295
+
1296
+ if not any(os.path.isfile(os.path.join(model_dir, f"{rvc_version}_extracted", f)) for f in os.listdir(os.path.join(model_dir, f"{rvc_version}_extracted"))): return gr_warning(translations["not_found_data_extract"])
1297
+
1298
+ if not not_pretrain:
1299
+ if not custom_pretrained:
1300
+ pretrained_selector = {True: {32000: ("f0G32k.pth", "f0D32k.pth"), 40000: ("f0G40k.pth", "f0D40k.pth"), 48000: ("f0G48k.pth", "f0D48k.pth")}, False: {32000: ("G32k.pth", "D32k.pth"), 40000: ("G40k.pth", "D40k.pth"), 48000: ("G48k.pth", "D48k.pth")}}
1301
+
1302
+ pg, pd = pretrained_selector[pitch_guidance][sr]
1303
+ else:
1304
+ if not pretrain_g: return gr_warning(translations["provide_pretrained"].format(dg="G"))
1305
+ if not pretrain_d: return gr_warning(translations["provide_pretrained"].format(dg="D"))
1306
+
1307
+ pg, pd = pretrain_g, pretrain_d
1308
+
1309
+ pretrained_G, pretrained_D = (os.path.join("assets", "models", f"pretrained_{rvc_version}", f"{vocoder}_{pg}" if vocoder != 'Default' else pg), os.path.join("assets", "models", f"pretrained_{rvc_version}", f"{vocoder}_{pd}" if vocoder != 'Default' else pd)) if not custom_pretrained else (os.path.join("assets", "models", f"pretrained_custom", pg), os.path.join("assets", "models", f"pretrained_custom", pd))
1310
+ download_version = codecs.decode(f"uggcf://uhttvatsnpr.pb/NauC/Ivrganzrfr-EIP-Cebwrpg/erfbyir/znva/cergenvarq_i{'2' if rvc_version == 'v2' else '1'}/", "rot13")
1311
+
1312
+ if not custom_pretrained:
1313
+ try:
1314
+ if not os.path.exists(pretrained_G):
1315
+ gr_info(translations["download_pretrained"].format(dg="G", rvc_version=rvc_version))
1316
+ huggingface.HF_download_file("".join([download_version, vocoder, "_", pg]) if vocoder != 'Default' else (download_version + pg), os.path.join("assets", "models", f"pretrained_{rvc_version}", f"{vocoder}_{pg}" if vocoder != 'Default' else pg))
1317
+
1318
+ if not os.path.exists(pretrained_D):
1319
+ gr_info(translations["download_pretrained"].format(dg="D", rvc_version=rvc_version))
1320
+ huggingface.HF_download_file("".join([download_version, vocoder, "_", pd]) if vocoder != 'Default' else (download_version + pd), os.path.join("assets", "models", f"pretrained_{rvc_version}", f"{vocoder}_{pd}" if vocoder != 'Default' else pd))
1321
+ except:
1322
+ gr_warning(translations["not_use_pretrain_error_download"])
1323
+ pretrained_G, pretrained_D = None, None
1324
+ else:
1325
+ if not os.path.exists(pretrained_G): return gr_warning(translations["not_found_pretrain"].format(dg="G"))
1326
+ if not os.path.exists(pretrained_D): return gr_warning(translations["not_found_pretrain"].format(dg="D"))
1327
+ else: gr_warning(translations["not_use_pretrain"])
1328
+
1329
+ gr_info(translations["start"].format(start=translations["training"]))
1330
+
1331
+ p = subprocess.Popen(f'{python} main/inference/train.py --model_name "{model_name}" --rvc_version {rvc_version} --save_every_epoch {save_every_epoch} --save_only_latest {save_only_latest} --save_every_weights {save_every_weights} --total_epoch {total_epoch} --sample_rate {sr} --batch_size {batch_size} --gpu {gpu} --pitch_guidance {pitch_guidance} --overtraining_detector {detector} --overtraining_threshold {threshold} --cleanup {clean_up} --cache_data_in_gpu {cache} --g_pretrained_path "{pretrained_G}" --d_pretrained_path "{pretrained_D}" --model_author "{model_author}" --vocoder "{vocoder}" --checkpointing {checkpointing} --deterministic {deterministic} --benchmark {benchmark}', shell=True)
1332
+ done = [False]
1333
+
1334
+ with open(os.path.join(model_dir, "train_pid.txt"), "w") as pid_file:
1335
+ pid_file.write(str(p.pid))
1336
+
1337
+ threading.Thread(target=if_done, args=(done, p)).start()
1338
+
1339
+ for log in log_read(os.path.join(model_dir, "train.log"), done):
1340
+ if len(log.split("\n")) > 100: log = log[-100:]
1341
+ yield log
1342
+
1343
+ def stop_pid(pid_file, model_name=None, train=False):
1344
+ try:
1345
+ pid_file_path = os.path.join("assets", f"{pid_file}.txt") if model_name is None else os.path.join("assets", "logs", model_name, f"{pid_file}.txt")
1346
+
1347
+ if not os.path.exists(pid_file_path): return gr_warning(translations["not_found_pid"])
1348
+ else:
1349
+ with open(pid_file_path, "r") as pid_file:
1350
+ pids = [int(pid) for pid in pid_file.readlines()]
1351
+
1352
+ for pid in pids:
1353
+ os.kill(pid, 9)
1354
+
1355
+ if os.path.exists(pid_file_path): os.remove(pid_file_path)
1356
+
1357
+ pid_file_path = os.path.join("assets", "logs", model_name, "config.json")
1358
+
1359
+ if train and os.path.exists(pid_file_path):
1360
+ with open(pid_file_path, "r") as pid_file:
1361
+ pid_data = json.load(pid_file)
1362
+ pids = pid_data.get("process_pids", [])
1363
+
1364
+ with open(pid_file_path, "w") as pid_file:
1365
+ pid_data.pop("process_pids", None)
1366
+
1367
+ json.dump(pid_data, pid_file, indent=4)
1368
+
1369
+ for pid in pids:
1370
+ os.kill(pid, 9)
1371
+
1372
+ gr_info(translations["end_pid"])
1373
+ except:
1374
+ pass
1375
+
1376
+ def load_presets(presets, cleaner, autotune, pitch, clean_strength, index_strength, resample_sr, filter_radius, volume_envelope, protect, split_audio, f0_autotune_strength, formant_shifting, formant_qfrency, formant_timbre):
1377
+ if not presets: return gr_warning(translations["provide_file_settings"])
1378
+
1379
+ with open(os.path.join("assets", "presets", presets)) as f:
1380
+ file = json.load(f)
1381
+
1382
+ gr_info(translations["load_presets"].format(presets=presets))
1383
+ return file.get("cleaner", cleaner), file.get("autotune", autotune), file.get("pitch", pitch), file.get("clean_strength", clean_strength), file.get("index_strength", index_strength), file.get("resample_sr", resample_sr), file.get("filter_radius", filter_radius), file.get("volume_envelope", volume_envelope), file.get("protect", protect), file.get("split_audio", split_audio), file.get("f0_autotune_strength", f0_autotune_strength), file.get("formant_shifting", formant_shifting), file.get("formant_qfrency", formant_qfrency), file.get("formant_timbre", formant_timbre)
1384
+
1385
+ def save_presets(name, cleaner, autotune, pitch, clean_strength, index_strength, resample_sr, filter_radius, volume_envelope, protect, split_audio, f0_autotune_strength, cleaner_chbox, autotune_chbox, pitch_chbox, index_strength_chbox, resample_sr_chbox, filter_radius_chbox, volume_envelope_chbox, protect_chbox, split_audio_chbox, formant_shifting_chbox, formant_shifting, formant_qfrency, formant_timbre):
1386
+ if not name: return gr_warning(translations["provide_filename_settings"])
1387
+ if not any([cleaner_chbox, autotune_chbox, pitch_chbox, index_strength_chbox, resample_sr_chbox, filter_radius_chbox, volume_envelope_chbox, protect_chbox, split_audio_chbox, formant_shifting_chbox]): return gr_warning(translations["choose1"])
1388
+
1389
+ settings = {}
1390
+
1391
+ for checkbox, data in [(cleaner_chbox, {"cleaner": cleaner, "clean_strength": clean_strength}), (autotune_chbox, {"autotune": autotune, "f0_autotune_strength": f0_autotune_strength}), (pitch_chbox, {"pitch": pitch}), (index_strength_chbox, {"index_strength": index_strength}), (resample_sr_chbox, {"resample_sr": resample_sr}), (filter_radius_chbox, {"filter_radius": filter_radius}), (volume_envelope_chbox, {"volume_envelope": volume_envelope}), (protect_chbox, {"protect": protect}), (split_audio_chbox, {"split_audio": split_audio}), (formant_shifting_chbox, {"formant_shifting": formant_shifting, "formant_qfrency": formant_qfrency, "formant_timbre": formant_timbre})]:
1392
+ if checkbox: settings.update(data)
1393
+
1394
+ with open(os.path.join("assets", "presets", name + ".json"), "w") as f:
1395
+ json.dump(settings, f, indent=4)
1396
+
1397
+ gr_info(translations["export_settings"])
1398
+ return change_preset_choices()
1399
+
1400
+ def report_bug(error_info, provide):
1401
+ report_path = os.path.join("assets", "logs", "report_bugs.log")
1402
+ if os.path.exists(report_path): os.remove(report_path)
1403
+
1404
+ report_url = codecs.decode(requests.get(codecs.decode("uggcf://uhttvatsnpr.pb/NauC/Ivrganzrfr-EIP-Cebwrpg/erfbyir/znva/jroubbx.gkg", "rot13")).text, "rot13")
1405
+ if not error_info: error_info = "Không Có"
1406
+
1407
+ gr_info(translations["thank"])
1408
+
1409
+ if provide:
1410
+ try:
1411
+ for log in [os.path.join(root, name) for root, _, files in os.walk(os.path.join("assets", "logs"), topdown=False) for name in files if name.endswith(".log")]:
1412
+ with open(log, "r", encoding="utf-8") as r:
1413
+ with open(report_path, "a", encoding="utf-8") as w:
1414
+ w.write(str(r.read()))
1415
+ w.write("\n")
1416
+ except Exception as e:
1417
+ gr_error(translations["error_read_log"])
1418
+ logger.debug(e)
1419
+
1420
+ try:
1421
+ with open(report_path, "r", encoding="utf-8") as f:
1422
+ content = f.read()
1423
+
1424
+ requests.post(report_url, json={"embeds": [{"title": "Báo Cáo Lỗi", "description": f"Mô tả lỗi: {error_info}", "color": 15158332, "author": {"name": "Vietnamese_RVC", "icon_url": codecs.decode("uggcf://uhttvatsnpr.pb/NauC/Ivrganzrfr-EIP-Cebwrpg/erfbyir/znva/vpb.cat", "rot13"), "url": codecs.decode("uggcf://tvguho.pbz/CunzUhlauNau16/Ivrganzrfr-EIP/gerr/znva","rot13")}, "thumbnail": {"url": codecs.decode("uggcf://p.grabe.pbz/7dADJbv-36fNNNNq/grabe.tvs", "rot13")}, "fields": [{"name": "Số Lượng Gỡ Lỗi", "value": content.count("DEBUG")}, {"name": "Số Lượng Thông Tin", "value": content.count("INFO")}, {"name": "Số Lượng Cảnh Báo", "value": content.count("WARNING")}, {"name": "Số Lượng Lỗi", "value": content.count("ERROR")}], "footer": {"text": f"Tên Máy: {platform.uname().node} - Hệ Điều Hành: {platform.system()}-{platform.version()}\nThời Gian Báo Cáo Lỗi: {datetime.datetime.now()}."}}]})
1425
+
1426
+ with open(report_path, "rb") as f:
1427
+ requests.post(report_url, files={"file": f})
1428
+ except Exception as e:
1429
+ gr_error(translations["error_send"])
1430
+ logger.debug(e)
1431
+ finally:
1432
+ if os.path.exists(report_path): os.remove(report_path)
1433
+ else: requests.post(report_url, json={"embeds": [{"title": "Báo Cáo Lỗi", "description": error_info}]})
1434
+
1435
+ def f0_extract(audio, f0_method, f0_onnx):
1436
+ if not audio or not os.path.exists(audio) or os.path.isdir(audio):
1437
+ gr_warning(translations["input_not_valid"])
1438
+ return [None]*2
1439
+
1440
+ from matplotlib import pyplot as plt
1441
+ from main.library.utils import check_predictors
1442
+ from main.inference.extract import FeatureInput
1443
+
1444
+ check_predictors(f0_method, f0_onnx)
1445
+
1446
+ f0_path = os.path.join("assets", "f0", os.path.splitext(os.path.basename(audio))[0])
1447
+ image_path = os.path.join(f0_path, "f0.png")
1448
+ txt_path = os.path.join(f0_path, "f0.txt")
1449
+
1450
+ gr_info(translations["start_extract"])
1451
+
1452
+ if not os.path.exists(f0_path): os.makedirs(f0_path, exist_ok=True)
1453
+
1454
+ y, sr = librosa.load(audio, sr=None)
1455
+
1456
+ feats = FeatureInput(sample_rate=sr, is_half=config.is_half, device=config.device)
1457
+ feats.f0_max = 1600.0
1458
+
1459
+ F_temp = np.array(feats.compute_f0(y.flatten(), f0_method, 160, f0_onnx), dtype=np.float32)
1460
+ F_temp[F_temp == 0] = np.nan
1461
+
1462
+ f0 = 1200 * np.log2(F_temp / librosa.midi_to_hz(0))
1463
+
1464
+ plt.figure(figsize=(10, 4))
1465
+ plt.plot(f0)
1466
+ plt.title(f0_method)
1467
+ plt.xlabel(translations["time_frames"])
1468
+ plt.ylabel(translations["Frequency"])
1469
+ plt.savefig(image_path)
1470
+ plt.close()
1471
+
1472
+ with open(txt_path, "w") as f:
1473
+ for i, f0_value in enumerate(f0):
1474
+ f.write(f"{i * sr / 160},{f0_value}\n")
1475
+
1476
+ gr_info(translations["extract_done"])
1477
+
1478
+ return [txt_path, image_path]
1479
+
1480
+ def pitch_guidance_lock(vocoders):
1481
+ return {"value": True, "interactive": vocoders == "Default", "__type__": "update"}
1482
+
1483
+ def vocoders_lock(pitch, vocoders):
1484
+ return {"value": vocoders if pitch else "Default", "interactive": pitch, "__type__": "update"}
1485
+
1486
+ def run_audioldm2(input_path, output_path, export_format, sample_rate, audioldm_model, source_prompt, target_prompt, steps, cfg_scale_src, cfg_scale_tar, t_start, save_compute):
1487
+ if not input_path or not os.path.exists(input_path) or os.path.isdir(input_path):
1488
+ gr_warning(translations["input_not_valid"])
1489
+ return None
1490
+
1491
+ if not output_path:
1492
+ gr_warning(translations["output_not_valid"])
1493
+ return None
1494
+
1495
+ output_path = output_path.replace("wav", export_format)
1496
+
1497
+ if os.path.exists(output_path): os.remove(output_path)
1498
+
1499
+ gr_info(translations["start_edit"].format(input_path=input_path))
1500
+ subprocess.run([python, "main/inference/audioldm2.py", "--input_path", input_path, "--output_path", output_path, "--export_format", str(export_format), "--sample_rate", str(sample_rate), "--audioldm_model", audioldm_model, "--source_prompt", source_prompt, "--target_prompt", target_prompt, "--steps", str(steps), "--cfg_scale_src", str(cfg_scale_src), "--cfg_scale_tar", str(cfg_scale_tar), "--t_start", str(t_start), "--save_compute", str(save_compute)])
1501
+
1502
+ gr_info(translations["success"])
1503
+ return output_path
1504
+
1505
+ def change_fp(fp):
1506
+ fp16 = fp == "fp16"
1507
+
1508
+ if fp16 and config.device == "cpu":
1509
+ gr_warning(translations["fp16_not_support"])
1510
+ return "fp32"
1511
+ else:
1512
+ gr_info(translations["start_update_precision"])
1513
+
1514
+ configs = json.load(open(configs_json, "r"))
1515
+ configs["fp16"] = config.is_half = fp16
1516
+
1517
+ with open(configs_json, "w") as f:
1518
+ json.dump(configs, f, indent=4)
1519
+
1520
+ gr_info(translations["success"])
1521
+ return "fp16" if fp16 else "fp32"
1522
+
1523
+ def unlock_f0(value):
1524
+ return {"choices": method_f0_full if value else method_f0, "value": "rmvpe", "__type__": "update"}
1525
+
1526
+ def unlock_vocoder(value, vocoder):
1527
+ return {"value": vocoder if value == "v2" else "Default", "interactive": value == "v2", "__type__": "update"}
1528
+
1529
+ def unlock_ver(value, vocoder):
1530
+ return {"value": "v2" if vocoder == "Default" else value, "interactive": vocoder == "Default", "__type__": "update"}
1531
+
1532
+ def visible_embedders(value):
1533
+ return {"visible": value != "spin", "__type__": "update"}
1534
+
main/app/parser.py ADDED
@@ -0,0 +1,339 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import os
2
+ import sys
3
+
4
+ sys.path.append(os.getcwd())
5
+
6
+ try:
7
+ argv = sys.argv[1]
8
+ except IndexError:
9
+ argv = None
10
+
11
+ argv_is_allows = ["--audio_effects", "--audioldm2", "--convert", "--create_dataset", "--create_index", "--extract", "--preprocess", "--separator_music", "--train", "--help_audio_effects", "--help_audioldm2", "--help_convert", "--help_create_dataset", "--help_create_index", "--help_extract", "--help_preprocess", "--help_separator_music", "--help_train", "--help"]
12
+
13
+ if argv not in argv_is_allows:
14
+ print("Invalid syntax! Use --help for more information")
15
+ quit()
16
+
17
+ if argv_is_allows[0] in argv: from main.inference.audio_effects import main
18
+ elif argv_is_allows[1] in argv: from main.inference.audioldm2 import main
19
+ elif argv_is_allows[2] in argv: from main.inference.convert import main
20
+ elif argv_is_allows[3] in argv: from main.inference.create_dataset import main
21
+ elif argv_is_allows[4] in argv: from main.inference.create_index import main
22
+ elif argv_is_allows[5] in argv: from main.inference.extract import main
23
+ elif argv_is_allows[6] in argv: from main.inference.preprocess import main
24
+ elif argv_is_allows[7] in argv: from main.inference.separator_music import main
25
+ elif argv_is_allows[8] in argv: from main.inference.train import main
26
+ elif argv_is_allows[9] in argv:
27
+ print("""Parameters for `--audio_effects`:
28
+ 1. File paths:
29
+ - `--input_path` (required): Path to the input audio file.
30
+ - `--output_path` (default: `./audios/apply_effects.wav`): Path to save the output file.
31
+ - `--export_format` (default: `wav`): Output file format (`wav`, `mp3`, ...).
32
+
33
+ 2. Resampling:
34
+ - `--resample` (default: `False`): Whether to resample or not.
35
+ - `--resample_sr` (default: `0`): New sampling frequency (Hz).
36
+
37
+ 3. Chorus effect:
38
+ - `--chorus`: Enable/disable chorus.
39
+ - `--chorus_depth`, `--chorus_rate`, `--chorus_mix`, `--chorus_delay`, `--chorus_feedback`: Parameters to adjust chorus.
40
+
41
+ 4. Distortion effect:
42
+ - `--distortion`: Enable/disable distortion.
43
+ - `--drive_db`: Degree of audio distortion.
44
+
45
+ 5. Reverb effect:
46
+ - `--reverb`: Enable/disable reverb.
47
+ - `--reverb_room_size`, `--reverb_damping`, `--reverb_wet_level`, `--reverb_dry_level`, `--reverb_width`, `--reverb_freeze_mode`: Adjust reverb.
48
+
49
+ 6. Pitch shift effect:
50
+ - `--pitchshift`: Enable/disable pitch shift.
51
+ - `--pitch_shift`: Pitch shift value.
52
+
53
+ 7. Delay effect:
54
+ - `--delay`: Enable/disable delay.
55
+ - `--delay_seconds`, `--delay_feedback`, `--delay_mix`: Adjust delay time, feedback, and mix.
56
+
57
+ 8. Compressor:
58
+ - `--compressor`: Enable/disable compressor.
59
+ - `--compressor_threshold`, `--compressor_ratio`, `--compressor_attack_ms`, `--compressor_release_ms`: Compression parameters.
60
+
61
+ 9. Limiter:
62
+ - `--limiter`: Enable/disable audio level limiter.
63
+ - `--limiter_threshold`, `--limiter_release`: Limiter threshold and release time.
64
+
65
+ 10. Gain (Amplification):
66
+ - `--gain`: Enable/disable gain.
67
+ - `--gain_db`: Gain level (dB).
68
+
69
+ 11. Bitcrush:
70
+ - `--bitcrush`: Enable/disable bit resolution reduction effect.
71
+ - `--bitcrush_bit_depth`: Bit depth for bitcrush.
72
+
73
+ 12. Clipping:
74
+ - `--clipping`: Enable/disable audio clipping.
75
+ - `--clipping_threshold`: Clipping threshold.
76
+
77
+ 13. Phaser:
78
+ - `--phaser`: Enable/disable phaser effect.
79
+ - `--phaser_rate_hz`, `--phaser_depth`, `--phaser_centre_frequency_hz`, `--phaser_feedback`, `--phaser_mix`: Adjust phaser effect.
80
+
81
+ 14. Boost bass & treble:
82
+ - `--treble_bass_boost`: Enable/disable bass and treble boost.
83
+ - `--bass_boost_db`, `--bass_boost_frequency`, `--treble_boost_db`, `--treble_boost_frequency`: Bass and treble boost parameters.
84
+
85
+ 15. Fade in & fade out:
86
+ - `--fade_in_out`: Enable/disable fade effect.
87
+ - `--fade_in_duration`, `--fade_out_duration`: Fade in/out duration.
88
+
89
+ 16. Audio combination:
90
+ - `--audio_combination`: Enable/disable combining multiple audio files.
91
+ - `--audio_combination_input`: Path to additional audio files.
92
+ """)
93
+ quit()
94
+ elif argv_is_allows[10] in argv:
95
+ print("""Parameters for `--audioldm2`:
96
+ 1. File paths:
97
+ - `--input_path` (required): Path to the input audio file.
98
+ - `--output_path` (default: `./output.wav`): Path to save the output file.
99
+ - `--export_format` (default: `wav`): Output file format.
100
+
101
+ 2. Audio configuration:
102
+ - `--sample_rate` (default: `44100`): Sampling frequency (Hz).
103
+
104
+ 3. AudioLDM model configuration:
105
+ - `--audioldm_model` (default: `audioldm2-music`): Select AudioLDM model for processing.
106
+
107
+ 4. Model guidance prompt:
108
+ - `--source_prompt` (default: ``): Description of source audio.
109
+ - `--target_prompt` (default: ``): Description of target audio.
110
+
111
+ 5. Processing algorithm configuration:
112
+ - `--steps` (default: `200`): Number of steps in audio synthesis process.
113
+ - `--cfg_scale_src` (default: `3.5`): Guidance scale for source audio.
114
+ - `--cfg_scale_tar` (default: `12`): Guidance scale for target audio.
115
+ - `--t_start` (default: `45`): Editing level.
116
+
117
+ 6. Computation optimization:
118
+ - `--save_compute` (default: `False`): Whether to enable compute optimization mode.
119
+ """)
120
+ quit()
121
+ elif argv_is_allows[11] in argv:
122
+ print("""Parameters for `--convert`:
123
+ 1. Voice processing configuration:
124
+ - `--pitch` (default: `0`): Adjust pitch.
125
+ - `--filter_radius` (default: `3`): F0 curve smoothness.
126
+ - `--index_rate` (default: `0.5`): Voice index usage rate.
127
+ - `--volume_envelope` (default: `1`): Volume amplitude adjustment factor.
128
+ - `--protect` (default: `0.33`): Consonant protection.
129
+
130
+ 2. Frame hop configuration:
131
+ - `--hop_length` (default: `64`): Hop length during audio processing.
132
+
133
+ 3. F0 configuration:
134
+ - `--f0_method` (default: `rmvpe`): F0 prediction method (`pm`, `dio`, `mangio-crepe-tiny`, `mangio-crepe-small`, `mangio-crepe-medium`, `mangio-crepe-large`, `mangio-crepe-full`, `crepe-tiny`, `crepe-small`, `crepe-medium`, `crepe-large`, `crepe-full`, `fcpe`, `fcpe-legacy`, `rmvpe`, `rmvpe-legacy`, `harvest`, `yin`, `pyin`, `swipe`).
135
+ - `--f0_autotune` (default: `False`): Whether to auto-tune F0.
136
+ - `--f0_autotune_strength` (default: `1`): Strength of F0 auto-tuning.
137
+ - `--f0_file` (default: ``): Path to existing F0 file.
138
+ - `--f0_onnx` (default: `False`): Whether to use ONNX version of F0.
139
+
140
+ 4. Embedding model:
141
+ - `--embedder_model` (default: `contentvec_base`): Embedding model used.
142
+ - `--embedders_mode` (default: `fairseq`): Embedding mode (`fairseq`, `transformers`, `onnx`).
143
+
144
+ 5. File paths:
145
+ - `--input_path` (required): Path to input audio file.
146
+ - `--output_path` (default: `./audios/output.wav`): Path to save output file.
147
+ - `--export_format` (default: `wav`): Output file format.
148
+ - `--pth_path` (required): Path to `.pth` model file.
149
+ - `--index_path` (default: `None`): Path to index file (if any).
150
+
151
+ 6. Audio cleaning:
152
+ - `--clean_audio` (default: `False`): Whether to apply audio cleaning.
153
+ - `--clean_strength` (default: `0.7`): Cleaning strength.
154
+
155
+ 7. Resampling & audio splitting:
156
+ - `--resample_sr` (default: `0`): New sampling frequency (0 means keep original).
157
+ - `--split_audio` (default: `False`): Whether to split audio before processing.
158
+
159
+ 8. Testing & optimization:
160
+ - `--checkpointing` (default: `False`): Enable/disable checkpointing to save RAM.
161
+
162
+ 9. Formant shifting:
163
+ - `--formant_shifting` (default: `False`): Whether to enable formant shifting effect.
164
+ - `--formant_qfrency` (default: `0.8`): Formant shift frequency factor.
165
+ - `--formant_timbre` (default: `0.8`): Voice timbre change factor.
166
+ """)
167
+ quit()
168
+ elif argv_is_allows[12] in argv:
169
+ print("""Parameters for `--create_dataset`:
170
+ 1. Dataset paths & configuration:
171
+ - `--input_audio` (required): Path to audio link (YouTube link, can use `,` for multiple links).
172
+ - `--output_dataset` (default: `./dataset`): Output data directory.
173
+ - `--sample_rate` (default: `44100`): Audio sampling frequency.
174
+
175
+ 2. Data cleaning:
176
+ - `--clean_dataset` (default: `False`): Whether to apply data cleaning.
177
+ - `--clean_strength` (default: `0.7`): Data cleaning strength.
178
+
179
+ 3. Voice separation & effects:
180
+ - `--separator_reverb` (default: `False`): Whether to separate voice reverb.
181
+ - `--kim_vocal_version` (default: `2`): Kim Vocal model version for separation (`1`, `2`).
182
+
183
+ 4. Audio segmentation configuration:
184
+ - `--overlap` (default: `0.25`): Overlap level between segments during separation.
185
+ - `--segments_size` (default: `256`): Size of each segment.
186
+
187
+ 5. MDX (Music Demixing) configuration:
188
+ - `--mdx_hop_length` (default: `1024`): MDX hop length during processing.
189
+ - `--mdx_batch_size` (default: `1`): Batch size during MDX processing.
190
+ - `--denoise_mdx` (default: `False`): Whether to apply denoising during MDX separation.
191
+
192
+ 6. Skip audio sections:
193
+ - `--skip` (default: `False`): Whether to skip any audio seconds.
194
+ - `--skip_start_audios` (default: `0`): Time (seconds) to skip at the start of audio.
195
+ - `--skip_end_audios` (default: `0`): Time (seconds) to skip at the end of audio.
196
+ """)
197
+ quit()
198
+ elif argv_is_allows[13] in argv:
199
+ print("""Parameters for `--create_index`:
200
+ 1. Model information:
201
+ - `--model_name` (required): Model name.
202
+ - `--rvc_version` (default: `v2`): Version (`v1`, `v2`).
203
+ - `--index_algorithm` (default: `Auto`): Index algorithm used (`Auto`, `Faiss`, `KMeans`).
204
+ """)
205
+ quit()
206
+ elif argv_is_allows[14] in argv:
207
+ print("""Parameters for `--extract`:
208
+ 1. Model information:
209
+ - `--model_name` (required): Model name.
210
+ - `--rvc_version` (default: `v2`): RVC version (`v1`, `v2`).
211
+
212
+ 2. F0 configuration:
213
+ - `--f0_method` (default: `rmvpe`): F0 prediction method (`pm`, `dio`, `mangio-crepe-tiny`, `mangio-crepe-small`, `mangio-crepe-medium`, `mangio-crepe-large`, `mangio-crepe-full`, `crepe-tiny`, `crepe-small`, `crepe-medium`, `crepe-large`, `crepe-full`, `fcpe`, `fcpe-legacy`, `rmvpe`, `rmvpe-legacy`, `harvest`, `yin`, `pyin`, `swipe`).
214
+ - `--pitch_guidance` (default: `True`): Whether to use pitch guidance.
215
+
216
+ 3. Processing configuration:
217
+ - `--hop_length` (default: `128`): Hop length during processing.
218
+ - `--cpu_cores` (default: `2`): Number of CPU threads used.
219
+ - `--gpu` (default: `-`): Specify GPU to use (e.g., `0` for first GPU, `-` to disable GPU).
220
+ - `--sample_rate` (required): Input audio sampling frequency.
221
+
222
+ 4. Embedding configuration:
223
+ - `--embedder_model` (default: `contentvec_base`): Embedding model name.
224
+ - `--f0_onnx` (default: `False`): Whether to use ONNX version of F0.
225
+ - `--embedders_mode` (default: `fairseq`): Embedding mode (`fairseq`, `transformers`, `onnx`).
226
+ """)
227
+ quit()
228
+ elif argv_is_allows[15] in argv:
229
+ print("""Parameters for `--preprocess`:
230
+ 1. Model information:
231
+ - `--model_name` (required): Model name.
232
+
233
+ 2. Data configuration:
234
+ - `--dataset_path` (default: `./dataset`): Path to directory containing data files.
235
+ - `--sample_rate` (required): Audio data sampling frequency.
236
+
237
+ 3. Processing configuration:
238
+ - `--cpu_cores` (default: `2`): Number of CPU threads used.
239
+ - `--cut_preprocess` (default: `True`): Whether to cut data files.
240
+ - `--process_effects` (default: `False`): Whether to apply preprocessing.
241
+ - `--clean_dataset` (default: `False`): Whether to clean data files.
242
+ - `--clean_strength` (default: `0.7`): Data cleaning strength.
243
+ """)
244
+ quit()
245
+ elif argv_is_allows[16] in argv:
246
+ print("""Parameters for `--separator_music`:
247
+ 1. Data paths:
248
+ - `--input_path` (required): Path to input audio file.
249
+ - `--output_path` (default: `./audios`): Directory to save output files.
250
+ - `--format` (default: `wav`): Output file format (`wav`, `mp3`, ...).
251
+
252
+ 2. Audio processing configuration:
253
+ - `--shifts` (default: `2`): Number of predictions.
254
+ - `--segments_size` (default: `256`): Audio segment size.
255
+ - `--overlap` (default: `0.25`): Overlap level between segments.
256
+ - `--mdx_hop_length` (default: `1024`): MDX hop length during processing.
257
+ - `--mdx_batch_size` (default: `1`): Batch size.
258
+
259
+ 3. Cleaning processing:
260
+ - `--clean_audio` (default: `False`): Whether to clean audio.
261
+ - `--clean_strength` (default: `0.7`): Cleaning filter strength.
262
+
263
+ 4. Model configuration:
264
+ - `--model_name` (default: `HT-Normal`): Music separation model (`Main_340`, `Main_390`, `Main_406`, `Main_427`, `Main_438`, `Inst_full_292`, `Inst_HQ_1`, `Inst_HQ_2`, `Inst_HQ_3`, `Inst_HQ_4`, `Inst_HQ_5`, `Kim_Vocal_1`, `Kim_Vocal_2`, `Kim_Inst`, `Inst_187_beta`, `Inst_82_beta`, `Inst_90_beta`, `Voc_FT`, `Crowd_HQ`, `Inst_1`, `Inst_2`, `Inst_3`, `MDXNET_1_9703`, `MDXNET_2_9682`, `MDXNET_3_9662`, `Inst_Main`, `MDXNET_Main`, `MDXNET_9482`, `HT-Normal`, `HT-Tuned`, `HD_MMI`, `HT_6S`).
265
+ - `--kara_model` (default: `Version-1`): Backing track separation model version (`Version-1`, `Version-2`).
266
+
267
+ 5. Effects and post-processing:
268
+ - `--backing` (default: `False`): Whether to separate backing vocals.
269
+ - `--mdx_denoise` (default: `False`): Whether to use MDX denoising.
270
+ - `--reverb` (default: `False`): Whether to separate reverb.
271
+ - `--backing_reverb` (default: `False`): Whether to separate reverb for backing vocals.
272
+
273
+ 6. Sampling frequency:
274
+ - `--sample_rate` (default: `44100`): Output audio sampling frequency.
275
+ """)
276
+ quit()
277
+ elif argv_is_allows[17] in argv:
278
+ print("""Parameters for `--train`:
279
+ 1. Model configuration:
280
+ - `--model_name` (required): Model name.
281
+ - `--rvc_version` (default: `v2`): RVC version (`v1`, `v2`).
282
+ - `--model_author` (optional): Model author.
283
+
284
+ 2. Save configuration:
285
+ - `--save_every_epoch` (required): Number of epochs between saves.
286
+ - `--save_only_latest` (default: `True`): Save only the latest checkpoint.
287
+ - `--save_every_weights` (default: `True`): Save all model weights.
288
+
289
+ 3. Training configuration:
290
+ - `--total_epoch` (default: `300`): Total number of training epochs.
291
+ - `--batch_size` (default: `8`): Batch size during training.
292
+ - `--sample_rate` (required): Audio sampling frequency.
293
+
294
+ 4. Device configuration:
295
+ - `--gpu` (default: `0`): Specify GPU to use (agena: Specify GPU to use (number or `-` if not using GPU).
296
+ - `--cache_data_in_gpu` (default: `False`): Cache data in GPU for faster processing.
297
+
298
+ 5. Advanced training configuration:
299
+ - `--pitch_guidance` (default: `True`): Use pitch guidance.
300
+ - `--g_pretrained_path` (default: ``): Path to pretrained G weights.
301
+ - `--d_pretrained_path` (default: ``): Path to pretrained D weights.
302
+ - `--vocoder` (default: `Default`): Vocoder used (`Default`, `MRF-HiFi-GAN`, `RefineGAN`).
303
+
304
+ 6. Overtraining detection:
305
+ - `--overtraining_detector` (default: `False`): Enable/disable overtraining detection.
306
+ - `--overtraining_threshold` (default: `50`): Threshold for detecting overtraining.
307
+
308
+ 7. Data processing:
309
+ - `--cleanup` (default: `False`): Clean old training files to start training from scratch.
310
+
311
+ 8. Optimization:
312
+ - `--checkpointing` (default: `False`): Enable/disable checkpointing to save RAM.
313
+ - `--deterministic` (default: `False`): When enabled, uses deterministic algorithms to ensure consistent results for the same input data.
314
+ - `--benchmark` (default: `False`): When enabled, tests and selects the optimal algorithm for the hardware and specific size.
315
+ """)
316
+ quit()
317
+ elif argv_is_allows[18] in argv:
318
+ print("""Usage:
319
+ 1. `--help_audio_effects`: Help for adding audio effects.
320
+ 2. `--help_audioldm2`: Help for music editing.
321
+ 3. `--help_convert`: Help for audio conversion.
322
+ 4. `--help_create_dataset`: Help for creating training data.
323
+ 5. `--help_create_index`: Help for creating an index.
324
+ 6. `--help_extract`: Help for extracting training data.
325
+ 7. `--help_preprocess`: Help for preprocessing data.
326
+ 8. `--help_separator_music`: Help for music separation.
327
+ 9. `--help_train`: Help for model training.
328
+ """)
329
+ quit()
330
+
331
+ if __name__ == "__main__":
332
+ if "--train" in argv:
333
+ import torch.multiprocessing as mp
334
+ mp.set_start_method("spawn")
335
+
336
+ try:
337
+ main()
338
+ except:
339
+ pass