File size: 2,576 Bytes
0dec623
 
 
6fad061
0dec623
 
 
 
 
 
 
 
 
 
6fad061
0dec623
 
 
 
 
 
6fad061
 
0dec623
 
 
 
 
 
 
 
 
 
6fad061
 
0dec623
 
 
6fad061
 
 
 
4f96a7d
 
0dec623
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
6fad061
 
 
 
 
 
 
 
 
 
 
 
4f96a7d
0dec623
 
 
 
 
 
 
 
 
 
 
 
 
 
6fad061
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
import gradio as gr
from pydub import AudioSegment
import tempfile
import os

def processar_audio(trilha, faixa2, volume_trilha, tonalidade_narracao):
    trilha = AudioSegment.from_file(trilha.name)
    faixa2 = AudioSegment.from_file(faixa2.name)

    # Ajustar a tonalidade da narração
    faixa2_tonalidade_ajustada = faixa2._spawn(faixa2.raw_data, overrides={
        "frame_rate": int(faixa2.frame_rate * (2 ** (tonalidade_narracao / 12.0)))
    })


    # Ajustar o volume da trilha
    trilha_com_volume = trilha - volume_trilha

    # Obter a duração total das faixas
    duracao_total = max(len(trilha_com_volume), len(faixa2_tonalidade_ajustada))

    print(f'Duração total: {duracao_total}')

    # Ajustar o tamanho das faixas para a duração total
    trilha_com_volume = trilha_com_volume[:duracao_total]
    faixa2_tonalidade_ajustada = faixa2_tonalidade_ajustada[:duracao_total]

    # Sobrepor as duas faixas
    trilha_mesclada = trilha_com_volume.overlay(faixa2_tonalidade_ajustada, position=0)

    # Determinar o ponto de corte (após o final da faixa 2)
    ponto_de_corte = len(faixa2_tonalidade_ajustada)

    print(f'Ponto de corte: {ponto_de_corte}')

    # Cortar a trilha após o ponto de corte
    trilha_cortada = trilha_mesclada[:ponto_de_corte]

    # Criar um arquivo temporário para salvar a trilha cortada
    _, temp_path = tempfile.mkstemp(suffix=".mp3")
    trilha_cortada.export(temp_path, format="mp3")
    return temp_path

interface_css = """
.dark {
    --body-background-fill: #232735;
    --background-fill-secondary: #232735
    --body-text-color: var(--neutral-100);
    --border-color-primary: #576274;
    --block-border-color: #576274;
    --block-background-fill: #2E3342;
    --input-background-fill: #2E3342
    /* ... (adicionar todas as outras variáveis) ... */
}
body {
    background-color: var(--body-background-fill);
    color: var(--body-text-color);
    
}
.left-align-textbox {
    text-align: left;
}

/* Ajustes para colocar os inputs na mesma linha */
.gr-form-group {
    display: flex;
    justify-content: space-between;
}

/* Ajustes para a largura dos sliders */
.gr-slider {
    width: 45%;
}

"""

iface = gr.Interface(
    fn=processar_audio, 
    inputs=[
        gr.File(label="Trilha"), 
        gr.File(label="Faixa de Narração"), 
        gr.Slider(0, 100, 27, label="Volume da Trilha"),
        gr.Slider(-12, 12, 0, label="Tonalidade da Narração (em semitons)")
    ], 
    outputs=gr.Audio(label="Resultado"),
    css=interface_css
)

if __name__ == "__main__":
    iface.launch()