import gradio as gr from pydub import AudioSegment import os def change_volume(audio_file, volume_change): """Изменение громкости аудио""" audio = AudioSegment.from_file(audio_file) audio = audio + volume_change output_file = "output_volume.mp3" audio.export(output_file, format="mp3") return output_file def trim_audio(audio_file, start_time, end_time): """Обрезка аудио""" audio = AudioSegment.from_file(audio_file) trimmed_audio = audio[start_time * 1000:end_time * 1000] # Переводим секунды в миллисекунды output_file = "output_trimmed.mp3" trimmed_audio.export(output_file, format="mp3") return output_file def change_speed(audio_file, speed): """Изменение скорости аудио""" audio = AudioSegment.from_file(audio_file) speeded_audio = audio.speedup(playback_speed=speed) output_file = "output_speed.mp3" speeded_audio.export(output_file, format="mp3") return output_file def convert_format(audio_file, output_format): """Конвертация аудио в другой формат""" audio = AudioSegment.from_file(audio_file) output_file = f"output_converted.{output_format}" audio.export(output_file, format=output_format) return output_file # Создаем интерфейс Gradio iface = gr.Interface( fn=lambda audio_file, tool, volume_change, start_time, end_time, speed, output_format: ( change_volume(audio_file, volume_change) if tool == "volume" else trim_audio(audio_file, start_time, end_time) if tool == "trim" else change_speed(audio_file, speed) if tool == "speed" else convert_format(audio_file, output_format) if tool == "convert" else None ), inputs=[ gr.Audio(type="filepath", label="Загрузите аудиофайл"), gr.Radio( choices=["volume", "trim", "speed", "convert"], label="Выберите инструмент", value="volume" ), gr.Slider(minimum=-20, maximum=20, step=1, label="Изменение громкости (dB)", visible=True), gr.Slider(minimum=0, maximum=100, step=1, label="Начало обрезки (секунды)", visible=False), gr.Slider(minimum=0, maximum=100, step=1, label="Конец обрезки (секунды)", visible=False), gr.Slider(minimum=0.5, maximum=2.0, step=0.1, label="Скорость воспроизведения", visible=False), gr.Dropdown( choices=["mp3", "wav", "ogg", "flac"], label="Выберите формат для конвертации", visible=False ) ], outputs=gr.Audio(label="Результат"), title="Аудио инструменты с Pydub", description="Используйте инструменты для изменения громкости, обрезки, изменения скорости или конвертации аудио." ) # Динамическое отображение элементов интерфейса def update_interface(tool): return [ gr.Slider(visible=tool == "volume"), gr.Slider(visible=tool == "trim"), gr.Slider(visible=tool == "trim"), gr.Slider(visible=tool == "speed"), gr.Dropdown(visible=tool == "convert") ] iface.launch()