Pydub-preview / app.py
Doubleupai's picture
Update app.py
cfb22fa verified
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()