Synthetics's picture
Update app.py
6fad061
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()