File size: 3,439 Bytes
732933e
 
 
 
 
cfb22fa
732933e
 
cfb22fa
732933e
cfb22fa
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
732933e
 
 
 
cfb22fa
 
 
 
 
 
 
732933e
 
cfb22fa
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
732933e
 
cfb22fa
 
 
 
 
 
 
 
 
 
732933e
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
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()