Politrees commited on
Commit
c73191a
1 Parent(s): d2f2216

Update src/covergen.py

Browse files
Files changed (1) hide show
  1. src/covergen.py +77 -78
src/covergen.py CHANGED
@@ -16,139 +16,138 @@ BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
16
  rvc_models_dir = os.path.join(BASE_DIR, 'rvc_models')
17
  output_dir = os.path.join(BASE_DIR, 'song_output')
18
 
19
-
20
  if __name__ == '__main__':
21
  voice_models = ignore_files(rvc_models_dir)
22
 
23
  with gr.Blocks(title='CoverGen Lite - Politrees (v0.2)', theme=gr.themes.Soft(primary_hue="green", secondary_hue="green", neutral_hue="neutral", spacing_size="sm", radius_size="lg")) as app:
24
- with gr.Tab("Велком/Контакты"):
25
- gr.HTML("<center><h1>Добро пожаловать в CoverGen Lite - Politrees (v0.2)</h1></center>")
26
  with gr.Row():
27
  with gr.Column(variant='panel'):
28
- gr.HTML("<center><h2><a href='https://t.me/Politrees2'>Telegram ЛС</a></h2></center>")
29
- gr.HTML("<center><h2><a href='https://vk.com/artem__bebroy'>ВКонтакте</a></h2></center>")
30
  with gr.Column(variant='panel'):
31
- gr.HTML("<center><h2><a href='https://t.me/pol1trees'>Telegram Канал</a></h2></center>")
32
- gr.HTML("<center><h2><a href='https://t.me/+GMTP7hZqY0E4OGRi'>Telegram Чат</a></h2></center>")
33
  with gr.Column(variant='panel'):
34
  gr.HTML("<center><h2><a href='https://www.youtube.com/channel/UCHb3fZEVxUisnqLqCrEM8ZA'>YouTube</a></h2></center>")
35
  gr.HTML("<center><h2><a href='https://github.com/Bebra777228'>GitHub</a></h2></center>")
36
 
37
- with gr.Tab("Преобразование голоса"):
38
  with gr.Row(equal_height=False):
39
  with gr.Column(scale=1, variant='panel'):
40
  with gr.Group():
41
- rvc_model = gr.Dropdown(voice_models, label='Модели голоса')
42
- ref_btn = gr.Button('Обновить список моделей', variant='primary')
43
  with gr.Group():
44
- pitch = gr.Slider(-24, 24, value=0, step=0.5, label='Изменение тона голоса', info='-24 - мужской голос || 24 - женский голос')
45
 
46
  with gr.Column(scale=2, variant='panel'):
47
  with gr.Group():
48
- local_file = gr.Audio(label='Аудио-файл', interactive=False, show_download_button=False, show_share_button=False)
49
- uploaded_file = gr.UploadButton(label='Загрузить аудио-файл', file_types=['audio'], variant='primary')
50
  uploaded_file.upload(process_file_upload, inputs=[uploaded_file], outputs=[local_file])
51
  uploaded_file.upload(update_button_text, outputs=[uploaded_file])
52
 
53
  with gr.Group():
54
  with gr.Row(variant='panel'):
55
- generate_btn = gr.Button("Генерировать", variant='primary', scale=1)
56
- converted_voice = gr.Audio(label='Преобразованный голос', scale=5, show_share_button=False)
57
- output_format = gr.Dropdown(['mp3', 'flac', 'wav'], value='mp3', label='Формат файла', scale=0.1, allow_custom_value=False, filterable=False)
58
 
59
- with gr.Accordion('Настройки преобразования голоса', open=False):
60
  with gr.Group():
61
  with gr.Column(variant='panel'):
62
- use_hybrid_methods = gr.Checkbox(label="Использовать гибридные методы", value=False)
63
- f0_method = gr.Dropdown(['rmvpe+', 'fcpe', 'rmvpe', 'mangio-crepe', 'crepe'], value='rmvpe+', label='Метод выделения тона', allow_custom_value=False, filterable=False)
64
  use_hybrid_methods.change(update_f0_method, inputs=use_hybrid_methods, outputs=f0_method)
65
- crepe_hop_length = gr.Slider(8, 512, value=128, step=8, visible=False, label='Длина шага Crepe')
66
  f0_method.change(show_hop_slider, inputs=f0_method, outputs=crepe_hop_length)
67
  with gr.Column(variant='panel'):
68
- index_rate = gr.Slider(0, 1, value=0, label='Влияние индекса', info='Контролирует степень влияния индексного файла на результат анализа. Более высокое значение увеличивает влияние индексного файла, но может усилить артефакты в аудио. Выбор более низкого значения может помочь снизить артефакты.')
69
- filter_radius = gr.Slider(0, 7, value=3, step=1, label='Радиус фильтра', info='Управляет радиусом фильтрации результатов анализа тона. Если значение фильтрации равняется или превышает три, применяется медианная фильтрация для уменьшения шума дыхания в аудиозаписи.')
70
- rms_mix_rate = gr.Slider(0, 1, value=0.25, step=0.01, label='Скорость смешивания RMS', info='Контролирует степень смешивания выходного сигнала с его оболочкой громкости. Значение близкое к 1 увеличивает использование оболочки громкости выходного сигнала, что может улучшить качество звука.')
71
- protect = gr.Slider(0, 0.5, value=0.33, step=0.01, label='Защита согласных', info='Контролирует степень защиты отдельных согласных и звуков дыхания от электроакустических разрывов и других артефактов. Максимальное значение 0,5 обеспечивает наибольшую защиту, но может увеличить эффект индексирования, который может негативно влиять на качество звука. Уменьшение значения может уменьшить степень защиты, но снизить эффект индексирования.')
72
 
73
  ref_btn.click(update_models_list, None, outputs=rvc_model)
74
  generate_btn.click(song_cover_pipeline,
75
  inputs=[uploaded_file, rvc_model, pitch, index_rate, filter_radius, rms_mix_rate, f0_method, crepe_hop_length, protect, output_format],
76
  outputs=[converted_voice])
77
 
78
- with gr.Tab('Объединение/Обработка'):
79
  with gr.Row(equal_height=False):
80
  with gr.Column(variant='panel'):
81
  with gr.Group():
82
- vocal_audio = gr.Audio(label='Вокал', interactive=False, show_download_button=False, show_share_button=False)
83
- upload_vocal_audio = gr.UploadButton(label='Загрузить вокал', file_types=['audio'], variant='primary')
84
  upload_vocal_audio.upload(process_file_upload, inputs=[upload_vocal_audio], outputs=[vocal_audio])
85
  upload_vocal_audio.upload(update_button_text_voc, outputs=[upload_vocal_audio])
86
 
87
  with gr.Column(variant='panel'):
88
  with gr.Group():
89
- instrumental_audio = gr.Audio(label='Инструментал', interactive=False, show_download_button=False, show_share_button=False)
90
- upload_instrumental_audio = gr.UploadButton(label='Загрузить инструментал', file_types=['audio'], variant='primary')
91
  upload_instrumental_audio.upload(process_file_upload, inputs=[upload_instrumental_audio], outputs=[instrumental_audio])
92
  upload_instrumental_audio.upload(update_button_text_inst, outputs=[upload_instrumental_audio])
93
 
94
  with gr.Group():
95
  with gr.Row(variant='panel'):
96
- process_btn = gr.Button("Обработать", variant='primary', scale=1)
97
- ai_cover = gr.Audio(label='Ai-Cover', scale=5, show_share_button=False)
98
- output_format = gr.Dropdown(['mp3', 'flac', 'wav'], value='mp3', label='Формат файла', scale=0.1, allow_custom_value=False, filterable=False)
99
 
100
- with gr.Accordion('Настройки сведения аудио', open=False):
101
- gr.HTML('<center><h2>Изменение громкости</h2></center>')
102
  with gr.Row(variant='panel'):
103
- vocal_gain = gr.Slider(-10, 10, value=0, step=1, label='Вокал', scale=1)
104
- instrumental_gain = gr.Slider(-10, 10, value=0, step=1, label='Инструментал', scale=1)
105
- clear_btn = gr.Button("Сбросить все эффекты", scale=0.1)
106
 
107
- with gr.Accordion('Эффекты', open=False):
108
- with gr.Accordion('Реверберация', open=False):
109
  with gr.Group():
110
  with gr.Column(variant='panel'):
111
  with gr.Row():
112
- reverb_rm_size = gr.Slider(0, 1, value=0.15, label='Размер комнаты', info='Этот параметр отвечает за размер виртуального помещения, в котором будет звучать реверберация. Большее значение означает больший размер комнаты и более длительное звучание реверберации.')
113
- reverb_width = gr.Slider(0, 1, value=1.0, label='Ширина реверберации', info='Этот параметр отвечает за ширину звучания реверберации. Чем выше значение, тем шире будет звучание реверберации.')
114
  with gr.Row():
115
- reverb_wet = gr.Slider(0, 1, value=0.1, label='Уровень влажности', info='Этот параметр отвечает за уровень реверберации. Чем выше значение, тем сильнее будет слышен эффект реверберации и тем дольше будет звучать «хвост».')
116
- reverb_dry = gr.Slider(0, 1, value=0.8, label='Уровень сухости', info='Этот параметр отвечает за уровень исходного звука без реверберации. Чем меньше значение, тем тише звук ai вокала. Если значение будет на 0, то исходный звук полностью исчезнет.')
117
  with gr.Row():
118
- reverb_damping = gr.Slider(0, 1, value=0.7, label='Уровень демпфирования', info='Этот параметр отвечает за поглощение высоких частот в реверберации. Чем выше его значение, тем сильнее будет поглощение частот и тем менее будет «яркий» звук реверберации.')
119
 
120
- with gr.Accordion('Хорус', open=False):
121
  with gr.Group():
122
  with gr.Column(variant='panel'):
123
  with gr.Row():
124
- chorus_rate_hz = gr.Slider(0.1, 10, value=0, label='Скорость хоруса', info='Этот параметр отвечает за скорость колебаний эффекта хоруса в герцах. Чем выше значение, тем быстрее будут колебаться звуки.')
125
- chorus_depth = gr.Slider(0, 1, value=0, label='Глубина хоруса', info='Этот параметр отвечает за глубину эффекта хоруса. Чем выше значение, тем сильнее будет эффект хоруса.')
126
  with gr.Row():
127
- chorus_centre_delay_ms = gr.Slider(0, 50, value=0, label='Задержка центра (мс)', info='Этот параметр отвечает за задержку центрального сигнала эффекта хоруса в миллисекундах. Чем выше значение, тем дольше будет задержка.')
128
- chorus_feedback = gr.Slider(0, 1, value=0, label='Обратная связь', info='Этот параметр отвечает за уровень обратной связи эффекта хоруса. Чем выше значение, тем сильнее будет эффект обратной связи.')
129
  with gr.Row():
130
- chorus_mix = gr.Slider(0, 1, value=0, label='Смешение', info='Этот параметр отвечает за уровень смешивания оригинального сигнала и эффекта хоруса. Чем выше значение, тем сильнее будет эффект хоруса.')
131
 
132
- with gr.Accordion('Обработка', open=False):
133
- with gr.Accordion('Компрессор', open=False):
134
  with gr.Row(variant='panel'):
135
- compressor_ratio = gr.Slider(1, 20, value=4, label='Соотношение', info='Этот параметр контролирует количество применяемого сжатия аудио. Большее значение означает большее сжатие, которое уменьшает динамический диапазон аудио, делая громкие части более тихими и тихие части более громкими.')
136
- compressor_threshold = gr.Slider(-60, 0, value=-16, label='Порог', info='Этот параметр устанавливает порог, при превышении которого начинает действовать компрессор. Компрессор сжимает громкие звуки, чтобы сделать звук более ровным. Чем ниже порог, тем большее количество звуков будет подвергнуто компрессии.')
137
 
138
- with gr.Accordion('Фильтры', open=False):
139
  with gr.Row(variant='panel'):
140
- low_shelf_gain = gr.Slider(-20, 20, value=0, label='Фильтр нижних частот', info='Этот параметр контролирует усиление (громкость) низких частот. Положительное значение усиливает низкие частоты, делая звук более басским. Отрицательное значение ослабляет низкие частоты, делая звук более тонким.')
141
- high_shelf_gain = gr.Slider(-20, 20, value=0, label='Фильтр высоких частот', info='Этот параметр контролирует усиление высоких частот. Положительное значение усиливает высокие частоты, делая звук более ярким. Отрицательное значение ослабляет высокие частоты, делая звук более тусклым.')
142
 
143
- with gr.Accordion('Подавление шума', open=False):
144
  with gr.Group():
145
  with gr.Column(variant='panel'):
146
  with gr.Row():
147
- noise_gate_threshold = gr.Slider(-60, 0, value=-30, label='Порог', info='Этот параметр устанавливает порого��ое значение в децибелах, ниже которого сигнал считается шумом. Когда сигнал опускается ниже этого порога, шумовой шлюз активируется и уменьшает громкость сигнала.')
148
- noise_gate_ratio = gr.Slider(1, 20, value=6, label='Соотношение', info='Этот параметр устанавливает уровень подавления шума. Большее значение означает более сильное подавление шума.')
149
  with gr.Row():
150
- noise_gate_attack = gr.Slider(0, 100, value=10, label='Время атаки (мс)', info='Этот параметр контролирует скорость, с которой шумовой шлюз открывается, когда звук становится достаточно громким. Большее значение означает, что шлюз открывается медленнее.')
151
- noise_gate_release = gr.Slider(0, 1000, value=100, label='Время спада (мс)', info='Этот параметр контролирует скорость, с которой шумовой шлюз закрывается, когда звук становится достаточно тихим. Большее значение означает, что шлюз закрывается медленнее.')
152
 
153
  process_btn.click(add_audio_effects,
154
  inputs=[upload_vocal_audio, upload_instrumental_audio, reverb_rm_size, reverb_wet, reverb_dry, reverb_damping,
@@ -165,33 +164,33 @@ if __name__ == '__main__':
165
  compressor_ratio, compressor_threshold, low_shelf_gain, high_shelf_gain, noise_gate_threshold,
166
  noise_gate_ratio, noise_gate_attack, noise_gate_release])
167
 
168
- with gr.Tab('Загрузка модели'):
169
- with gr.Tab('Загрузить по ссылке'):
170
  with gr.Row():
171
  with gr.Column(variant='panel'):
172
- gr.HTML("<center><h3>Вставьте в поле ниже ссылку от <a href='https://huggingface.co/' target='_blank'>HuggingFace</a>, <a href='https://pixeldrain.com/' target='_blank'>Pixeldrain</a> или <a href='https://drive.google.com/' target='_blank'>Google Drive</a></h3></center>")
173
- model_zip_link = gr.Text(label='Ссылка на загрузку модели')
174
  with gr.Column(variant='panel'):
175
  with gr.Group():
176
- model_name = gr.Text(label='Имя модели', info='Дайте вашей загружаемой модели уникальное имя, отличное от других голосовых моделей.')
177
- download_btn = gr.Button('Загрузить модель', variant='primary')
178
 
179
- dl_output_message = gr.Text(label='Сообщение вывода', interactive=False)
180
  download_btn.click(download_from_url, inputs=[model_zip_link, model_name], outputs=dl_output_message)
181
 
182
- with gr.Tab('Загрузить локально'):
183
  with gr.Row(equal_height=False):
184
  with gr.Column(variant='panel'):
185
- zip_file = gr.File(label='Zip-файл', file_types=['.zip'], file_count='single')
186
  with gr.Column(variant='panel'):
187
- gr.HTML("<h3>1. Найдите и скачайте файлы: .pth и необязательный файл .index</h3>")
188
- gr.HTML("<h3>2. Закиньте файл() в ZIP-архив и поместите его в область загрузки</h3>")
189
- gr.HTML('<h3>3. Дождитесь полной загрузки ZIP-архива в интерфейс</h3>')
190
  with gr.Group():
191
- local_model_name = gr.Text(label='Имя модели', info='Дайте вашей загружаемой модели уникальное имя, отличное от других голосовых моделей.')
192
- model_upload_button = gr.Button('Загрузить модель', variant='primary')
193
 
194
- local_upload_output_message = gr.Text(label='Сообщение вывода', interactive=False)
195
  model_upload_button.click(upload_zip_model, inputs=[zip_file, local_model_name], outputs=local_upload_output_message)
196
 
197
- app.launch(max_threads=512, quiet=True, show_error=True, show_api=False).queue(max_size=1022, default_concurrency_limit=1, api_open=False)
 
16
  rvc_models_dir = os.path.join(BASE_DIR, 'rvc_models')
17
  output_dir = os.path.join(BASE_DIR, 'song_output')
18
 
 
19
  if __name__ == '__main__':
20
  voice_models = ignore_files(rvc_models_dir)
21
 
22
  with gr.Blocks(title='CoverGen Lite - Politrees (v0.2)', theme=gr.themes.Soft(primary_hue="green", secondary_hue="green", neutral_hue="neutral", spacing_size="sm", radius_size="lg")) as app:
23
+ with gr.Tab("Welcome/Contacts"):
24
+ gr.HTML("<center><h1>Welcome to CoverGen Lite - Politrees (v0.2)</h1></center>")
25
  with gr.Row():
26
  with gr.Column(variant='panel'):
27
+ gr.HTML("<center><h2><a href='https://t.me/Politrees2'>Telegram</a></h2></center>")
28
+ gr.HTML("<center><h2><a href='https://vk.com/artem__bebroy'>VKontakte</a></h2></center>")
29
  with gr.Column(variant='panel'):
30
+ gr.HTML("<center><h2><a href='https://t.me/pol1trees'>Telegram Channel</a></h2></center>")
31
+ gr.HTML("<center><h2><a href='https://t.me/+GMTP7hZqY0E4OGRi'>Telegram Chat</a></h2></center>")
32
  with gr.Column(variant='panel'):
33
  gr.HTML("<center><h2><a href='https://www.youtube.com/channel/UCHb3fZEVxUisnqLqCrEM8ZA'>YouTube</a></h2></center>")
34
  gr.HTML("<center><h2><a href='https://github.com/Bebra777228'>GitHub</a></h2></center>")
35
 
36
+ with gr.Tab("Voice Conversion"):
37
  with gr.Row(equal_height=False):
38
  with gr.Column(scale=1, variant='panel'):
39
  with gr.Group():
40
+ rvc_model = gr.Dropdown(voice_models, label='Voice Models')
41
+ ref_btn = gr.Button('Refresh Models List', variant='primary')
42
  with gr.Group():
43
+ pitch = gr.Slider(-24, 24, value=0, step=0.5, label='Pitch Adjustment', info='-24 - male voice || 24 - female voice')
44
 
45
  with gr.Column(scale=2, variant='panel'):
46
  with gr.Group():
47
+ local_file = gr.Audio(label='Audio File', interactive=False, show_download_button=False, show_share_button=False)
48
+ uploaded_file = gr.UploadButton(label='Upload Audio File', file_types=['audio'], variant='primary')
49
  uploaded_file.upload(process_file_upload, inputs=[uploaded_file], outputs=[local_file])
50
  uploaded_file.upload(update_button_text, outputs=[uploaded_file])
51
 
52
  with gr.Group():
53
  with gr.Row(variant='panel'):
54
+ generate_btn = gr.Button("Generate", variant='primary', scale=1)
55
+ converted_voice = gr.Audio(label='Converted Voice', scale=5, show_share_button=False)
56
+ output_format = gr.Dropdown(['mp3', 'flac', 'wav'], value='mp3', label='File Format', scale=0.1, allow_custom_value=False, filterable=False)
57
 
58
+ with gr.Accordion('Voice Conversion Settings', open=False):
59
  with gr.Group():
60
  with gr.Column(variant='panel'):
61
+ use_hybrid_methods = gr.Checkbox(label="Use Hybrid Methods", value=False)
62
+ f0_method = gr.Dropdown(['rmvpe+', 'fcpe', 'rmvpe', 'mangio-crepe', 'crepe'], value='rmvpe+', label='F0 Method', allow_custom_value=False, filterable=False)
63
  use_hybrid_methods.change(update_f0_method, inputs=use_hybrid_methods, outputs=f0_method)
64
+ crepe_hop_length = gr.Slider(8, 512, value=128, step=8, visible=False, label='Crepe Hop Length')
65
  f0_method.change(show_hop_slider, inputs=f0_method, outputs=crepe_hop_length)
66
  with gr.Column(variant='panel'):
67
+ index_rate = gr.Slider(0, 1, value=0, label='Index Rate', info='Controls the extent to which the index file influences the analysis results. A higher value increases the influence of the index file, but may amplify breathing artifacts in the audio. Choosing a lower value may help reduce artifacts.')
68
+ filter_radius = gr.Slider(0, 7, value=3, step=1, label='Filter Radius', info='Manages the radius of filtering the pitch analysis results. If the filtering value is three or higher, median filtering is applied to reduce breathing noise in the audio recording.')
69
+ rms_mix_rate = gr.Slider(0, 1, value=0.25, step=0.01, label='RMS Mix Rate', info='Controls the extent to which the output signal is mixed with its envelope. A value close to 1 increases the use of the envelope of the output signal, which may improve sound quality.')
70
+ protect = gr.Slider(0, 0.5, value=0.33, step=0.01, label='Consonant Protection', info='Controls the extent to which individual consonants and breathing sounds are protected from electroacoustic breaks and other artifacts. A maximum value of 0.5 provides the most protection, but may increase the indexing effect, which may negatively impact sound quality. Reducing the value may decrease the extent of protection, but reduce the indexing effect.')
71
 
72
  ref_btn.click(update_models_list, None, outputs=rvc_model)
73
  generate_btn.click(song_cover_pipeline,
74
  inputs=[uploaded_file, rvc_model, pitch, index_rate, filter_radius, rms_mix_rate, f0_method, crepe_hop_length, protect, output_format],
75
  outputs=[converted_voice])
76
 
77
+ with gr.Tab('Merge/Process'):
78
  with gr.Row(equal_height=False):
79
  with gr.Column(variant='panel'):
80
  with gr.Group():
81
+ vocal_audio = gr.Audio(label='Vocals', interactive=False, show_download_button=False, show_share_button=False)
82
+ upload_vocal_audio = gr.UploadButton(label='Upload Vocals', file_types=['audio'], variant='primary')
83
  upload_vocal_audio.upload(process_file_upload, inputs=[upload_vocal_audio], outputs=[vocal_audio])
84
  upload_vocal_audio.upload(update_button_text_voc, outputs=[upload_vocal_audio])
85
 
86
  with gr.Column(variant='panel'):
87
  with gr.Group():
88
+ instrumental_audio = gr.Audio(label='Instrumental', interactive=False, show_download_button=False, show_share_button=False)
89
+ upload_instrumental_audio = gr.UploadButton(label='Upload Instrumental', file_types=['audio'], variant='primary')
90
  upload_instrumental_audio.upload(process_file_upload, inputs=[upload_instrumental_audio], outputs=[instrumental_audio])
91
  upload_instrumental_audio.upload(update_button_text_inst, outputs=[upload_instrumental_audio])
92
 
93
  with gr.Group():
94
  with gr.Row(variant='panel'):
95
+ process_btn = gr.Button("Process", variant='primary', scale=1)
96
+ ai_cover = gr.Audio(label='AI-Cover', scale=5, show_share_button=False)
97
+ output_format = gr.Dropdown(['mp3', 'flac', 'wav'], value='mp3', label='File Format', scale=0.1, allow_custom_value=False, filterable=False)
98
 
99
+ with gr.Accordion('Audio Mixing Settings', open=False):
100
+ gr.HTML('<center><h2>Volume Adjustment</h2></center>')
101
  with gr.Row(variant='panel'):
102
+ vocal_gain = gr.Slider(-10, 10, value=0, step=1, label='Vocals', scale=1)
103
+ instrumental_gain = gr.Slider(-10, 10, value=0, step=1, label='Instrumental', scale=1)
104
+ clear_btn = gr.Button("Clear All Effects", scale=0.1)
105
 
106
+ with gr.Accordion('Effects', open=False):
107
+ with gr.Accordion('Reverb', open=False):
108
  with gr.Group():
109
  with gr.Column(variant='panel'):
110
  with gr.Row():
111
+ reverb_rm_size = gr.Slider(0, 1, value=0.15, label='Room Size', info='This parameter determines the size of the virtual room in which the reverb will sound. A higher value means a larger room and a longer reverb tail.')
112
+ reverb_width = gr.Slider(0, 1, value=1.0, label='Reverb Width', info='This parameter determines the width of the reverb sound. The higher the value, the wider the reverb sound.')
113
  with gr.Row():
114
+ reverb_wet = gr.Slider(0, 1, value=0.1, label='Wet Level', info='This parameter determines the level of reverb. The higher the value, the stronger the reverb effect and the longer the "tail".')
115
+ reverb_dry = gr.Slider(0, 1, value=0.8, label='Dry Level', info='This parameter determines the level of the original sound without reverb. The lower the value, the quieter the AI voice. If the value is 0, the original sound will disappear completely.')
116
  with gr.Row():
117
+ reverb_damping = gr.Slider(0, 1, value=0.7, label='Damping Level', info='This parameter determines the absorption of high frequencies in the reverb. The higher the value, the stronger the absorption of frequencies and the less "bright" the reverb sound.')
118
 
119
+ with gr.Accordion('Chorus', open=False):
120
  with gr.Group():
121
  with gr.Column(variant='panel'):
122
  with gr.Row():
123
+ chorus_rate_hz = gr.Slider(0.1, 10, value=0, label='Chorus Rate', info='This parameter determines the speed of the chorus effect in hertz. The higher the value, the faster the sounds will oscillate.')
124
+ chorus_depth = gr.Slider(0, 1, value=0, label='Chorus Depth', info='This parameter determines the depth of the chorus effect. The higher the value, the stronger the chorus effect.')
125
  with gr.Row():
126
+ chorus_centre_delay_ms = gr.Slider(0, 50, value=0, label='Centre Delay (ms)', info='This parameter determines the delay of the central signal of the chorus effect in milliseconds. The higher the value, the longer the delay.')
127
+ chorus_feedback = gr.Slider(0, 1, value=0, label='Feedback', info='This parameter determines the level of feedback of the chorus effect. The higher the value, the stronger the feedback effect.')
128
  with gr.Row():
129
+ chorus_mix = gr.Slider(0, 1, value=0, label='Mix', info='This parameter determines the level of mixing the original signal and the chorus effect. The higher the value, the stronger the chorus effect.')
130
 
131
+ with gr.Accordion('Processing', open=False):
132
+ with gr.Accordion('Compressor', open=False):
133
  with gr.Row(variant='panel'):
134
+ compressor_ratio = gr.Slider(1, 20, value=4, label='Ratio', info='This parameter controls the amount of compression applied to the audio. A higher value means more compression, which reduces the dynamic range of the audio, making loud parts quieter and quiet parts louder.')
135
+ compressor_threshold = gr.Slider(-60, 0, value=-16, label='Threshold', info='This parameter sets the threshold level in decibels below which the compressor begins to operate. The compressor compresses loud sounds to make the sound more even. The lower the threshold, the more sounds will be subject to compression.')
136
 
137
+ with gr.Accordion('Filters', open=False):
138
  with gr.Row(variant='panel'):
139
+ low_shelf_gain = gr.Slider(-20, 20, value=0, label='Low Shelf Filter', info='This parameter controls the gain (volume) of low frequencies. A positive value boosts low frequencies, making the sound bassier. A negative value cuts low frequencies, making the sound brighter.')
140
+ high_shelf_gain = gr.Slider(-20, 20, value=0, label='High Shelf Filter', info='This parameter controls the gain of high frequencies. A positive value boosts high frequencies, making the sound brighter. A negative value cuts high frequencies, making the sound duller.')
141
 
142
+ with gr.Accordion('Noise Gate', open=False):
143
  with gr.Group():
144
  with gr.Column(variant='panel'):
145
  with gr.Row():
146
+ noise_gate_threshold = gr.Slider(-60, 0, value=-30, label='Threshold', info='This parameter sets the threshold level in decibels below which the signal is considered noise. When the signal drops below this threshold, the noise gate activates and reduces the signal level.')
147
+ noise_gate_ratio = gr.Slider(1, 20, value=6, label='Ratio', info='This parameter sets the level of noise reduction. A higher value means more noise reduction.')
148
  with gr.Row():
149
+ noise_gate_attack = gr.Slider(0, 100, value=10, label='Attack Time (ms)', info='This parameter controls the speed at which the noise gate opens when the sound becomes loud enough. A higher value means the gate opens slower.')
150
+ noise_gate_release = gr.Slider(0, 1000, value=100, label='Release Time (ms)', info='This parameter controls the speed at which the noise gate closes when the sound becomes quiet enough. A higher value means the gate closes slower.')
151
 
152
  process_btn.click(add_audio_effects,
153
  inputs=[upload_vocal_audio, upload_instrumental_audio, reverb_rm_size, reverb_wet, reverb_dry, reverb_damping,
 
164
  compressor_ratio, compressor_threshold, low_shelf_gain, high_shelf_gain, noise_gate_threshold,
165
  noise_gate_ratio, noise_gate_attack, noise_gate_release])
166
 
167
+ with gr.Tab('Model Upload'):
168
+ with gr.Tab('Upload from Link'):
169
  with gr.Row():
170
  with gr.Column(variant='panel'):
171
+ gr.HTML("<center><h3>Paste the link from <a href='https://huggingface.co/' target='_blank'>HuggingFace</a>, <a href='https://pixeldrain.com/' target='_blank'>Pixeldrain</a>, <a href='https://drive.google.com/' target='_blank'>Google Drive</a> or <a href='https://mega.nz/' target='_blank'>Mega</a> into the field below</h3></center>")
172
+ model_zip_link = gr.Text(label='Model Download Link')
173
  with gr.Column(variant='panel'):
174
  with gr.Group():
175
+ model_name = gr.Text(label='Model Name', info='Give your uploaded model a unique name, different from other voice models.')
176
+ download_btn = gr.Button('Download Model', variant='primary')
177
 
178
+ dl_output_message = gr.Text(label='Output Message', interactive=False)
179
  download_btn.click(download_from_url, inputs=[model_zip_link, model_name], outputs=dl_output_message)
180
 
181
+ with gr.Tab('Upload Locally'):
182
  with gr.Row(equal_height=False):
183
  with gr.Column(variant='panel'):
184
+ zip_file = gr.File(label='Zip File', file_types=['.zip'], file_count='single')
185
  with gr.Column(variant='panel'):
186
+ gr.HTML("<h3>1. Find and download the files: .pth and optional .index file</h3>")
187
+ gr.HTML("<h3>2. Put the file(s) into a ZIP archive and place it in the upload area</h3>")
188
+ gr.HTML('<h3>3. Wait for the ZIP archive to fully upload to the interface</h3>')
189
  with gr.Group():
190
+ local_model_name = gr.Text(label='Model Name', info='Give your uploaded model a unique name, different from other voice models.')
191
+ model_upload_button = gr.Button('Upload Model', variant='primary')
192
 
193
+ local_upload_output_message = gr.Text(label='Output Message', interactive=False)
194
  model_upload_button.click(upload_zip_model, inputs=[zip_file, local_model_name], outputs=local_upload_output_message)
195
 
196
+ app.launch(max_threads=512, quiet=True, show_error=True, show_api=False).queue(max_size=1022, default_concurrency_limit=1, api_open=False)