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 # Adicionar o CSS 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; } /* Pode adicionar estilos específicos para outros elementos conforme necessário */ """ iface = gr.Interface( fn=processar_audio, inputs=[ gr.File(label="Trilha"), gr.Slider(0, 100, 27, label="Volume da Trilha"), gr.File(label="Faixa de Narração"), gr.Slider(-12, 12, 0, label="Tonalidade da Narração (em semitons)") ], outputs=gr.Audio(label="Resultado"), css=interface_css )