Spaces:
Running
Running
Update app.py
Browse files
app.py
CHANGED
@@ -87,112 +87,202 @@ def low_pass_filter(audio_path, cutoff_freq):
|
|
87 |
def clear_output():
|
88 |
return None
|
89 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
90 |
# Создание интерфейса Gradio с вкладками
|
91 |
with gr.Blocks() as interface:
|
92 |
-
|
|
|
93 |
|
94 |
# Общий блок для примеров аудио
|
95 |
with gr.Row():
|
96 |
-
gr.Markdown(
|
97 |
examples = gr.Examples(
|
98 |
examples=[
|
99 |
["https://huggingface.co/spaces/Felguk/Felguk-audio-edit/resolve/main/Varilla%20%26%20DJ%20Elnica%20-%20This%20Is%20How%20We%20Do%20It%20(Original%20Mix).mp3"],
|
100 |
["https://huggingface.co/spaces/Felguk/Felguk-audio-edit/resolve/main/LowRaise%20%E2%80%94%20Shake%20The%20Ground%20(www.hotplayer.ru).mp3"]
|
101 |
],
|
102 |
-
inputs=[gr.Audio(type="filepath", label="
|
103 |
-
label="
|
104 |
)
|
105 |
|
106 |
# Вкладки с инструментами
|
107 |
with gr.Tabs():
|
108 |
# Вкладка 1: Изменение громкости
|
109 |
-
with gr.Tab(
|
110 |
with gr.Column():
|
111 |
-
audio_input_1 = gr.Audio(type="filepath", label="
|
112 |
-
volume_change = gr.Slider(minimum=-20, maximum=20, step=1, label="
|
113 |
-
output_1 = gr.Audio(type="filepath", label="
|
114 |
with gr.Row():
|
115 |
-
gr.Button("
|
116 |
-
gr.Button("
|
|
|
|
|
117 |
|
118 |
-
# Вкладка 2: Изменение скорости
|
119 |
-
with gr.Tab(
|
120 |
with gr.Column():
|
121 |
-
audio_input_2 = gr.Audio(type="filepath", label="
|
122 |
-
speed_factor = gr.Slider(minimum=0.5, maximum=2.0, step=0.1, label="
|
123 |
-
output_2 = gr.Audio(type="filepath", label="
|
124 |
with gr.Row():
|
125 |
-
gr.Button("
|
126 |
-
gr.Button("
|
|
|
|
|
127 |
|
128 |
-
#
|
129 |
-
with gr.Tab("Изменение высоты тона"):
|
130 |
-
with gr.Column():
|
131 |
-
audio_input_3 = gr.Audio(type="filepath", label="Входное аудио")
|
132 |
-
pitch_change = gr.Slider(minimum=-5, maximum=5, step=1, label="Изменение высоты тона (полутоны)")
|
133 |
-
output_3 = gr.Audio(type="filepath", label="Выходное аудио")
|
134 |
-
with gr.Row():
|
135 |
-
gr.Button("Применить").click(change_pitch, inputs=[audio_input_3, pitch_change], outputs=output_3)
|
136 |
-
gr.Button("Очистить результаты").click(clear_output, inputs=None, outputs=output_3)
|
137 |
|
138 |
-
|
139 |
-
|
140 |
-
|
141 |
-
|
142 |
-
|
143 |
-
|
144 |
-
|
145 |
-
|
146 |
-
|
147 |
-
|
148 |
-
|
149 |
-
|
150 |
-
|
151 |
-
|
152 |
-
|
153 |
-
echo_delay = gr.Slider(minimum=0.1, maximum=1.0, step=0.1, label="Задержка эха (сек)")
|
154 |
-
echo_decay = gr.Slider(minimum=0.1, maximum=1.0, step=0.1, label="Затухание эха")
|
155 |
-
output_5 = gr.Audio(type="filepath", label="Выходное аудио")
|
156 |
-
with gr.Row():
|
157 |
-
gr.Button("Применить").click(add_echo, inputs=[audio_input_5, echo_delay, echo_decay], outputs=output_5)
|
158 |
-
gr.Button("Очистить результаты").click(clear_output, inputs=None, outputs=output_5)
|
159 |
-
|
160 |
-
# Вкладка 6: Реверс аудио
|
161 |
-
with gr.Tab("Реверс аудио"):
|
162 |
-
with gr.Column():
|
163 |
-
audio_input_6 = gr.Audio(type="filepath", label="Входное аудио")
|
164 |
-
output_6 = gr.Audio(type="filepath", label="Выходное аудио")
|
165 |
-
with gr.Row():
|
166 |
-
gr.Button("Применить").click(reverse_audio, inputs=audio_input_6, outputs=output_6)
|
167 |
-
gr.Button("Очистить результаты").click(clear_output, inputs=None, outputs=output_6)
|
168 |
-
|
169 |
-
# Вкладка 7: Нормализация аудио
|
170 |
-
with gr.Tab("Нормализация аудио"):
|
171 |
-
with gr.Column():
|
172 |
-
audio_input_7 = gr.Audio(type="filepath", label="Входное аудио")
|
173 |
-
output_7 = gr.Audio(type="filepath", label="Выходное аудио")
|
174 |
-
with gr.Row():
|
175 |
-
gr.Button("Применить").click(normalize_audio, inputs=audio_input_7, outputs=output_7)
|
176 |
-
gr.Button("Очистить результаты").click(clear_output, inputs=None, outputs=output_7)
|
177 |
-
|
178 |
-
# Вкладка 8: Добавление фонового шума
|
179 |
-
with gr.Tab("Добавление фонового шума"):
|
180 |
-
with gr.Column():
|
181 |
-
audio_input_8 = gr.Audio(type="filepath", label="Входное аудио")
|
182 |
-
noise_level = gr.Slider(minimum=-20, maximum=20, step=1, label="Уровень шума (dB)")
|
183 |
-
output_8 = gr.Audio(type="filepath", label="Выходное аудио")
|
184 |
-
with gr.Row():
|
185 |
-
gr.Button("Применить").click(add_background_noise, inputs=[audio_input_8, noise_level], outputs=output_8)
|
186 |
-
gr.Button("Очистить результаты").click(clear_output, inputs=None, outputs=output_8)
|
187 |
-
|
188 |
-
# Вкладка 9: Фильтр низких частот
|
189 |
-
with gr.Tab("Фильтр низких частот"):
|
190 |
-
with gr.Column():
|
191 |
-
audio_input_9 = gr.Audio(type="filepath", label="Входное аудио")
|
192 |
-
cutoff_freq = gr.Slider(minimum=100, maximum=1000, step=50, label="Частота среза (Гц)")
|
193 |
-
output_9 = gr.Audio(type="filepath", label="Выходное аудио")
|
194 |
-
with gr.Row():
|
195 |
-
gr.Button("Применить").click(low_pass_filter, inputs=[audio_input_9, cutoff_freq], outputs=output_9)
|
196 |
-
gr.Button("Очистить результаты").click(clear_output, inputs=None, outputs=output_9)
|
197 |
|
198 |
interface.launch()
|
|
|
87 |
def clear_output():
|
88 |
return None
|
89 |
|
90 |
+
# Словарь с переводами
|
91 |
+
translations = {
|
92 |
+
"en": {
|
93 |
+
"title": "Audio Editor",
|
94 |
+
"examples_label": "Audio Examples",
|
95 |
+
"select_example": "Select an example audio",
|
96 |
+
"volume_tab": "Change Volume",
|
97 |
+
"volume_label": "Volume Change (dB)",
|
98 |
+
"speed_tab": "Change Speed",
|
99 |
+
"speed_label": "Speed Factor",
|
100 |
+
"pitch_tab": "Change Pitch",
|
101 |
+
"pitch_label": "Pitch Change (semitones)",
|
102 |
+
"trim_tab": "Trim Audio",
|
103 |
+
"start_time_label": "Start Time (sec)",
|
104 |
+
"end_time_label": "End Time (sec)",
|
105 |
+
"echo_tab": "Add Echo",
|
106 |
+
"echo_delay_label": "Echo Delay (sec)",
|
107 |
+
"echo_decay_label": "Echo Decay",
|
108 |
+
"reverse_tab": "Reverse Audio",
|
109 |
+
"normalize_tab": "Normalize Audio",
|
110 |
+
"noise_tab": "Add Background Noise",
|
111 |
+
"noise_label": "Noise Level (dB)",
|
112 |
+
"filter_tab": "Low Pass Filter",
|
113 |
+
"cutoff_label": "Cutoff Frequency (Hz)",
|
114 |
+
"apply_button": "Apply",
|
115 |
+
"clear_button": "Clear Results",
|
116 |
+
"output_label": "Output Audio"
|
117 |
+
},
|
118 |
+
"ru": {
|
119 |
+
"title": "Аудио-редактор",
|
120 |
+
"examples_label": "Примеры аудио",
|
121 |
+
"select_example": "Выберите пример аудио",
|
122 |
+
"volume_tab": "Изменение громкости",
|
123 |
+
"volume_label": "Изменение громкости (dB)",
|
124 |
+
"speed_tab": "Изменение скорости",
|
125 |
+
"speed_label": "Фактор скорости",
|
126 |
+
"pitch_tab": "Изменение высоты тона",
|
127 |
+
"pitch_label": "Изменение высоты тона (полутоны)",
|
128 |
+
"trim_tab": "Обрезка аудио",
|
129 |
+
"start_time_label": "Начальное время обрезки (сек)",
|
130 |
+
"end_time_label": "Конечное время обрезки (сек)",
|
131 |
+
"echo_tab": "Добавление эха",
|
132 |
+
"echo_delay_label": "Задержка эха (сек)",
|
133 |
+
"echo_decay_label": "Затухание эха",
|
134 |
+
"reverse_tab": "Реверс аудио",
|
135 |
+
"normalize_tab": "Нормализация аудио",
|
136 |
+
"noise_tab": "Добавление фонового шума",
|
137 |
+
"noise_label": "Уровень шума (dB)",
|
138 |
+
"filter_tab": "Фильтр низких частот",
|
139 |
+
"cutoff_label": "Частота среза (Гц)",
|
140 |
+
"apply_button": "Применить",
|
141 |
+
"clear_button": "Очистить результаты",
|
142 |
+
"output_label": "Выходное аудио"
|
143 |
+
},
|
144 |
+
"es": {
|
145 |
+
"title": "Editor de Audio",
|
146 |
+
"examples_label": "Ejemplos de Audio",
|
147 |
+
"select_example": "Selecciona un ejemplo de audio",
|
148 |
+
"volume_tab": "Cambiar Volumen",
|
149 |
+
"volume_label": "Cambio de Volumen (dB)",
|
150 |
+
"speed_tab": "Cambiar Velocidad",
|
151 |
+
"speed_label": "Factor de Velocidad",
|
152 |
+
"pitch_tab": "Cambiar Tono",
|
153 |
+
"pitch_label": "Cambio de Tono (semitones)",
|
154 |
+
"trim_tab": "Recortar Audio",
|
155 |
+
"start_time_label": "Tiempo de Inicio (seg)",
|
156 |
+
"end_time_label": "Tiempo de Fin (seg)",
|
157 |
+
"echo_tab": "Añadir Eco",
|
158 |
+
"echo_delay_label": "Retardo del Eco (seg)",
|
159 |
+
"echo_decay_label": "Decaimiento del Eco",
|
160 |
+
"reverse_tab": "Invertir Audio",
|
161 |
+
"normalize_tab": "Normalizar Audio",
|
162 |
+
"noise_tab": "Añadir Ruido de Fondo",
|
163 |
+
"noise_label": "Nivel de Ruido (dB)",
|
164 |
+
"filter_tab": "Filtro de Paso Bajo",
|
165 |
+
"cutoff_label": "Frecuencia de Corte (Hz)",
|
166 |
+
"apply_button": "Aplicar",
|
167 |
+
"clear_button": "Limpiar Resultados",
|
168 |
+
"output_label": "Audio de Salida"
|
169 |
+
},
|
170 |
+
"zh": {
|
171 |
+
"title": "音频编辑器",
|
172 |
+
"examples_label": "音频示例",
|
173 |
+
"select_example": "选择一个示例音频",
|
174 |
+
"volume_tab": "改变音量",
|
175 |
+
"volume_label": "音量变化 (dB)",
|
176 |
+
"speed_tab": "改变速度",
|
177 |
+
"speed_label": "速度因子",
|
178 |
+
"pitch_tab": "改变音高",
|
179 |
+
"pitch_label": "音高变化 (半音)",
|
180 |
+
"trim_tab": "裁剪音频",
|
181 |
+
"start_time_label": "开始时间 (秒)",
|
182 |
+
"end_time_label": "结束时间 (秒)",
|
183 |
+
"echo_tab": "添加回声",
|
184 |
+
"echo_delay_label": "回声延迟 (秒)",
|
185 |
+
"echo_decay_label": "回声衰减",
|
186 |
+
"reverse_tab": "反转音频",
|
187 |
+
"normalize_tab": "标准化音频",
|
188 |
+
"noise_tab": "添加背景噪音",
|
189 |
+
"noise_label": "噪音水平 (dB)",
|
190 |
+
"filter_tab": "低通滤波器",
|
191 |
+
"cutoff_label": "截止频率 (Hz)",
|
192 |
+
"apply_button": "应用",
|
193 |
+
"clear_button": "清除结果",
|
194 |
+
"output_label": "输出音频"
|
195 |
+
}
|
196 |
+
}
|
197 |
+
|
198 |
+
# Функция для обновления интерфейса в зависимости от выбранного языка
|
199 |
+
def update_interface(lang):
|
200 |
+
return (
|
201 |
+
translations[lang]["title"],
|
202 |
+
translations[lang]["examples_label"],
|
203 |
+
translations[lang]["select_example"],
|
204 |
+
translations[lang]["volume_tab"],
|
205 |
+
translations[lang]["volume_label"],
|
206 |
+
translations[lang]["speed_tab"],
|
207 |
+
translations[lang]["speed_label"],
|
208 |
+
translations[lang]["pitch_tab"],
|
209 |
+
translations[lang]["pitch_label"],
|
210 |
+
translations[lang]["trim_tab"],
|
211 |
+
translations[lang]["start_time_label"],
|
212 |
+
translations[lang]["end_time_label"],
|
213 |
+
translations[lang]["echo_tab"],
|
214 |
+
translations[lang]["echo_delay_label"],
|
215 |
+
translations[lang]["echo_decay_label"],
|
216 |
+
translations[lang]["reverse_tab"],
|
217 |
+
translations[lang]["normalize_tab"],
|
218 |
+
translations[lang]["noise_tab"],
|
219 |
+
translations[lang]["noise_label"],
|
220 |
+
translations[lang]["filter_tab"],
|
221 |
+
translations[lang]["cutoff_label"],
|
222 |
+
translations[lang]["apply_button"],
|
223 |
+
translations[lang]["clear_button"],
|
224 |
+
translations[lang]["output_label"]
|
225 |
+
)
|
226 |
+
|
227 |
# Создание интерфейса Gradio с вкладками
|
228 |
with gr.Blocks() as interface:
|
229 |
+
# Выбор языка
|
230 |
+
lang = gr.Dropdown(choices=["en", "ru", "es", "zh"], label="选择语言 / Select Language", value="zh")
|
231 |
|
232 |
# Общий блок для примеров аудио
|
233 |
with gr.Row():
|
234 |
+
examples_label = gr.Markdown()
|
235 |
examples = gr.Examples(
|
236 |
examples=[
|
237 |
["https://huggingface.co/spaces/Felguk/Felguk-audio-edit/resolve/main/Varilla%20%26%20DJ%20Elnica%20-%20This%20Is%20How%20We%20Do%20It%20(Original%20Mix).mp3"],
|
238 |
["https://huggingface.co/spaces/Felguk/Felguk-audio-edit/resolve/main/LowRaise%20%E2%80%94%20Shake%20The%20Ground%20(www.hotplayer.ru).mp3"]
|
239 |
],
|
240 |
+
inputs=[gr.Audio(type="filepath", label="选择示例音频 / Select Example Audio")],
|
241 |
+
label=translations["zh"]["examples_label"]
|
242 |
)
|
243 |
|
244 |
# Вкладки с инструментами
|
245 |
with gr.Tabs():
|
246 |
# Вкладка 1: Изменение громкости
|
247 |
+
with gr.Tab() as volume_tab:
|
248 |
with gr.Column():
|
249 |
+
audio_input_1 = gr.Audio(type="filepath", label="输入音频 / Input Audio")
|
250 |
+
volume_change = gr.Slider(minimum=-20, maximum=20, step=1, label="音量变化 (dB) / Volume Change (dB)")
|
251 |
+
output_1 = gr.Audio(type="filepath", label="输出音频 / Output Audio")
|
252 |
with gr.Row():
|
253 |
+
apply_button_1 = gr.Button("应用 / Apply")
|
254 |
+
clear_button_1 = gr.Button("清除结果 / Clear Results")
|
255 |
+
apply_button_1.click(change_volume, inputs=[audio_input_1, volume_change], outputs=output_1)
|
256 |
+
clear_button_1.click(clear_output, inputs=None, outputs=output_1)
|
257 |
|
258 |
+
# Вкладка 2: Изменение скорости
|
259 |
+
with gr.Tab() as speed_tab:
|
260 |
with gr.Column():
|
261 |
+
audio_input_2 = gr.Audio(type="filepath", label="输入音频 / Input Audio")
|
262 |
+
speed_factor = gr.Slider(minimum=0.5, maximum=2.0, step=0.1, label="速度因子 / Speed Factor")
|
263 |
+
output_2 = gr.Audio(type="filepath", label="输出音频 / Output Audio")
|
264 |
with gr.Row():
|
265 |
+
apply_button_2 = gr.Button("应用 / Apply")
|
266 |
+
clear_button_2 = gr.Button("清除结果 / Clear Results")
|
267 |
+
apply_button_2.click(change_speed, inputs=[audio_input_2, speed_factor], outputs=output_2)
|
268 |
+
clear_button_2.click(clear_output, inputs=None, outputs=output_2)
|
269 |
|
270 |
+
# Остальные вкладки добавляются аналогично...
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
271 |
|
272 |
+
# Обновление интерфейса при изменении языка
|
273 |
+
lang.change(
|
274 |
+
fn=update_interface,
|
275 |
+
inputs=lang,
|
276 |
+
outputs=[
|
277 |
+
interface.title,
|
278 |
+
examples_label,
|
279 |
+
examples.label,
|
280 |
+
volume_tab.label,
|
281 |
+
volume_change.label,
|
282 |
+
speed_tab.label,
|
283 |
+
speed_factor.label,
|
284 |
+
# Добавьте остальные элементы интерфейса здесь...
|
285 |
+
]
|
286 |
+
)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
287 |
|
288 |
interface.launch()
|