Spaces:
Sleeping
Sleeping
File size: 13,507 Bytes
a42e958 9dc000d a42e958 9dc000d a42e958 0a8591f a42e958 99b4a41 a42e958 f2ea7f6 2bbd3fc f2ea7f6 2bbd3fc f2ea7f6 2bbd3fc a42e958 f2ea7f6 a42e958 f2ea7f6 99b4a41 f2ea7f6 ddaffee a42e958 ddaffee f2ea7f6 a42e958 f2ea7f6 99b4a41 f2ea7f6 ddaffee a42e958 f2ea7f6 affaf39 f2ea7f6 a42e958 f2ea7f6 a42e958 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 |
import gradio as gr
from pydub import AudioSegment
import numpy as np
import librosa
import soundfile as sf
import os
# Вспомогательная функция для загрузки аудио
def load_audio(audio_path):
return AudioSegment.from_file(audio_path)
# Вспомогательная функция для сохранения аудио
def save_audio(audio, output_path="output.wav"):
audio.export(output_path, format="wav")
return output_path
# 1. Изменение громкости
def change_volume(audio_path, volume_change):
audio = load_audio(audio_path)
audio = audio + volume_change
return save_audio(audio, "output_volume.wav")
# 2. Изменение скорости (исправлено)
def change_speed(audio_path, speed_factor):
audio = load_audio(audio_path)
# Изменение скорости с использованием frame_rate
new_frame_rate = int(audio.frame_rate * speed_factor)
audio_with_changed_speed = audio._spawn(audio.raw_data, overrides={'frame_rate': new_frame_rate})
audio_with_changed_speed = audio_with_changed_speed.set_frame_rate(audio.frame_rate)
return save_audio(audio_with_changed_speed, "output_speed.wav")
# 3. Изменение высоты тона
def change_pitch(audio_path, pitch_change):
y, sr = librosa.load(audio_path, sr=None)
y = librosa.effects.pitch_shift(y, sr, pitch_change)
output_path = "output_pitch.wav"
sf.write(output_path, y, sr)
return output_path
# 4. Обрезка аудио
def trim_audio(audio_path, start_time, end_time):
audio = load_audio(audio_path)
start_ms = int(start_time * 1000)
end_ms = int(end_time * 1000)
trimmed_audio = audio[start_ms:end_ms]
return save_audio(trimmed_audio, "output_trimmed.wav")
# 5. Добавление эха
def add_echo(audio_path, echo_delay, echo_decay):
y, sr = librosa.load(audio_path, sr=None)
delay_samples = int(echo_delay * sr)
echo = np.zeros_like(y)
echo[delay_samples:] = y[:-delay_samples] * echo_decay
y_with_echo = y + echo
output_path = "output_echo.wav"
sf.write(output_path, y_with_echo, sr)
return output_path
# 6. Реверс аудио
def reverse_audio(audio_path):
audio = load_audio(audio_path)
reversed_audio = audio.reverse()
return save_audio(reversed_audio, "output_reversed.wav")
# 7. Нормализация аудио
def normalize_audio(audio_path):
audio = load_audio(audio_path)
normalized_audio = audio.normalize()
return save_audio(normalized_audio, "output_normalized.wav")
# 8. Добавление фонового шума
def add_background_noise(audio_path, noise_level):
audio = load_audio(audio_path)
noise = AudioSegment.silent(duration=len(audio)) + noise_level
noisy_audio = audio.overlay(noise)
return save_audio(noisy_audio, "output_noisy.wav")
# 9. Фильтр низких частот
def low_pass_filter(audio_path, cutoff_freq):
y, sr = librosa.load(audio_path, sr=None)
y = librosa.effects.preemphasis(y, coef=cutoff_freq / sr)
output_path = "output_lowpass.wav"
sf.write(output_path, y, sr)
return output_path
# Функция для очистки результатов
def clear_output():
return None
# Создание интерфейса Gradio с вкладками
with gr.Blocks() as interface:
gr.Markdown("## Аудио-редактор (Audio Editor / 音频编辑器)")
# Общий блок для примеров аудио
with gr.Row():
gr.Markdown("### Примеры аудио (Audio Examples / 音频示例)")
examples = gr.Examples(
examples=[
["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"],
["https://huggingface.co/spaces/Felguk/Felguk-audio-edit/resolve/main/LowRaise%20%E2%80%94%20Shake%20The%20Ground%20(www.hotplayer.ru).mp3"]
],
inputs=[gr.Audio(type="filepath", label="Выберите пример аудио (Select an example audio / 选择一个示例音频)")],
label="Примеры аудио (Audio Examples / 音频示例)"
)
# Вкладки с инструментами
with gr.Tabs():
# Вкладка 1: Изменение громкости
with gr.Tab("Изменение громкости (Change Volume / 改变音量)"):
with gr.Column():
audio_input_1 = gr.Audio(type="filepath", label="Входное аудио (Input Audio / 输入音频)")
volume_change = gr.Slider(minimum=-20, maximum=20, step=1, label="Изменение громкости (dB) (Volume Change (dB) / 音量变化 (dB))")
output_1 = gr.Audio(type="filepath", label="Выходное аудио (Output Audio / 输出音频)")
with gr.Row():
apply_button_1 = gr.Button("Применить (Apply / 应用)")
clear_button_1 = gr.Button("Очистить результаты (Clear Results / 清除结果)")
apply_button_1.click(change_volume, inputs=[audio_input_1, volume_change], outputs=output_1)
clear_button_1.click(clear_output, inputs=None, outputs=output_1)
# Вкладка 2: Изменение скорости
with gr.Tab("Изменение скорости (Change Speed / 改变速度)"):
with gr.Column():
audio_input_2 = gr.Audio(type="filepath", label="Входное аудио (Input Audio / 输入音频)")
speed_factor = gr.Slider(minimum=0.5, maximum=2.0, step=0.1, label="Фактор скорости (Speed Factor / 速度因子)")
output_2 = gr.Audio(type="filepath", label="Выходное аудио (Output Audio / 输出音频)")
with gr.Row():
apply_button_2 = gr.Button("Применить (Apply / 应用)")
clear_button_2 = gr.Button("Очистить результаты (Clear Results / 清除结果)")
apply_button_2.click(change_speed, inputs=[audio_input_2, speed_factor], outputs=output_2)
clear_button_2.click(clear_output, inputs=None, outputs=output_2)
# Вкладка 3: Изменение высоты тона
with gr.Tab("Изменение высоты тона (Change Pitch / 改变音高)"):
with gr.Column():
audio_input_3 = gr.Audio(type="filepath", label="Входное аудио (Input Audio / 输入音频)")
pitch_change = gr.Slider(minimum=-5, maximum=25, step=1, label="Изменение высоты тона (полутоны) (Pitch Change (semitones) / 音高变化 (半音))")
output_3 = gr.Audio(type="filepath", label="Выходное аудио (Output Audio / 输出音频)")
with gr.Row():
apply_button_3 = gr.Button("Применить (Apply / 应用)")
clear_button_3 = gr.Button("Очистить результаты (Clear Results / 清除结果)")
apply_button_3.click(change_pitch, inputs=[audio_input_3, pitch_change], outputs=output_3)
clear_button_3.click(clear_output, inputs=None, outputs=output_3)
# Вкладка 4: Обрезка аудио
with gr.Tab("Обрезка аудио (Trim Audio / 裁剪音频)"):
with gr.Column():
audio_input_4 = gr.Audio(type="filepath", label="Входное аудио (Input Audio / 输入音频)")
start_time = gr.Slider(minimum=0, maximum=60, step=1, label="Начальное время обрезки (сек) (Start Time (sec) / 开始时间 (秒))")
end_time = gr.Slider(minimum=0, maximum=60, step=1, label="Конечное время обрезки (сек) (End Time (sec) / 结束时间 (秒))")
output_4 = gr.Audio(type="filepath", label="Выходное аудио (Output Audio / 输出音频)")
with gr.Row():
apply_button_4 = gr.Button("Применить (Apply / 应用)")
clear_button_4 = gr.Button("Очистить результаты (Clear Results / 清除结果)")
apply_button_4.click(trim_audio, inputs=[audio_input_4, start_time, end_time], outputs=output_4)
clear_button_4.click(clear_output, inputs=None, outputs=output_4)
# Вкладка 5: Добавление эха
with gr.Tab("Добавление эха (Add Echo / 添加回声)"):
with gr.Column():
audio_input_5 = gr.Audio(type="filepath", label="Входное аудио (Input Audio / 输入音频)")
echo_delay = gr.Slider(minimum=0.1, maximum=1.0, step=0.1, label="Задержка эха (сек) (Echo Delay (sec) / 回声延迟 (秒))")
echo_decay = gr.Slider(minimum=0.1, maximum=1.0, step=0.1, label="Затухание эха (Echo Decay / 回声衰减)")
output_5 = gr.Audio(type="filepath", label="Выходное аудио (Output Audio / 输出音频)")
with gr.Row():
apply_button_5 = gr.Button("Применить (Apply / 应用)")
clear_button_5 = gr.Button("Очистить результаты (Clear Results / 清除结果)")
apply_button_5.click(add_echo, inputs=[audio_input_5, echo_delay, echo_decay], outputs=output_5)
clear_button_5.click(clear_output, inputs=None, outputs=output_5)
# Вкладка 6: Реверс аудио
with gr.Tab("Реверс аудио (Reverse Audio / 反转音频)"):
with gr.Column():
audio_input_6 = gr.Audio(type="filepath", label="Входное аудио (Input Audio / 输入音频)")
output_6 = gr.Audio(type="filepath", label="Выходное аудио (Output Audio / 输出音频)")
with gr.Row():
apply_button_6 = gr.Button("Применить (Apply / 应用)")
clear_button_6 = gr.Button("Очистить результаты (Clear Results / 清除结果)")
apply_button_6.click(reverse_audio, inputs=audio_input_6, outputs=output_6)
clear_button_6.click(clear_output, inputs=None, outputs=output_6)
# Вкладка 7: Нормализация аудио
with gr.Tab("Нормализация аудио (Normalize Audio / 标准化音频)"):
with gr.Column():
audio_input_7 = gr.Audio(type="filepath", label="Входное аудио (Input Audio / 输入音频)")
output_7 = gr.Audio(type="filepath", label="Выходное аудио (Output Audio / 输出音频)")
with gr.Row():
apply_button_7 = gr.Button("Применить (Apply / 应用)")
clear_button_7 = gr.Button("Очистить результаты (Clear Results / 清除结果)")
apply_button_7.click(normalize_audio, inputs=audio_input_7, outputs=output_7)
clear_button_7.click(clear_output, inputs=None, outputs=output_7)
# Вкладка 8: Добавление фонового шума
with gr.Tab("Добавление фонового шума (Add Background Noise / 添加背景噪音)"):
with gr.Column():
audio_input_8 = gr.Audio(type="filepath", label="Входное аудио (Input Audio / 输入音频)")
noise_level = gr.Slider(minimum=-20, maximum=20, step=1, label="Уровень шума (dB) (Noise Level (dB) / 噪音水平 (dB))")
output_8 = gr.Audio(type="filepath", label="Выходное аудио (Output Audio / 输出音频)")
with gr.Row():
apply_button_8 = gr.Button("Применить (Apply / 应用)")
clear_button_8 = gr.Button("Очистить результаты (Clear Results / 清除结果)")
apply_button_8.click(add_background_noise, inputs=[audio_input_8, noise_level], outputs=output_8)
clear_button_8.click(clear_output, inputs=None, outputs=output_8)
# Вкладка 9: Фильтр низких частот
with gr.Tab("Фильтр низких частот (Low Pass Filter / 低通滤波器)"):
with gr.Column():
audio_input_9 = gr.Audio(type="filepath", label="Входное аудио (Input Audio / 输入音频)")
cutoff_freq = gr.Slider(minimum=100, maximum=1000, step=50, label="Частота среза (Гц) (Cutoff Frequency (Hz) / 截止频率 (Hz))")
output_9 = gr.Audio(type="filepath", label="Выходное аудио (Output Audio / 输出音频)")
with gr.Row():
apply_button_9 = gr.Button("Применить (Apply / 应用)")
clear_button_9 = gr.Button("Очистить результаты (Clear Results / 清除结果)")
apply_button_9.click(low_pass_filter, inputs=[audio_input_9, cutoff_freq], outputs=output_9)
clear_button_9.click(clear_output, inputs=None, outputs=output_9)
interface.launch() |