File size: 2,171 Bytes
d4757ae
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
# interface.py

import gradio as gr
import sounddevice as sd
from scipy.io.wavfile import write
import tempfile
import shutil
import os

# Rutas de video y audio con absolutas para evitar errores de acceso
AUDIO_COPY_PATH = os.path.abspath(os.path.join("..", "miwav2lipv6","assets", "audio", "grabacion_gradio.wav"))
#VIDEO_PATH = os.path.abspath("../miwav2lipv6/assets/video/data_video_sun_5s.mp4")
VIDEO_PATH = os.path.abspath("../miwav2lipv6/assets/video/data_video_sun.mp4")

# Verificar la existencia del video
if not os.path.exists(VIDEO_PATH):
    print(f"Advertencia: El archivo de video no se encontró en la ruta {VIDEO_PATH}")

# Función para grabar audio
def grabar_audio(duration=8, sample_rate=44100):
    print("Grabando...")
    audio_data = sd.rec(int(duration * sample_rate), samplerate=sample_rate, channels=1)
    sd.wait()  # Espera a que la grabación termine

    # Guardar archivo temporal de audio
    temp_audio = tempfile.NamedTemporaryFile(delete=False, suffix=".wav")
    write(temp_audio.name, sample_rate, audio_data)
    print("Grabación completada. Archivo temporal guardado en:", temp_audio.name)

    # Verificar y crear `assets/audio` si no existe
    os.makedirs(os.path.dirname(AUDIO_COPY_PATH), exist_ok=True)

    # Copiar a `assets/audio`
    shutil.copy(temp_audio.name, AUDIO_COPY_PATH)
    print(f"Copia de la grabación guardada en: {AUDIO_COPY_PATH}")

    return AUDIO_COPY_PATH

# Función principal para la interfaz de Gradio
def interfaz():
    with gr.Blocks() as demo:
        gr.Video(VIDEO_PATH, loop=True, autoplay=True, height=300, width=500)
        
        # Crear un botón de grabación
        with gr.Row():
            grabar_button = gr.Button("Iniciar Grabación")
        
        # Mostrar el audio grabado a la derecha
        output_audio = gr.Audio(label="Grabación de Audio", type="filepath")

        # Asignar la función al botón
        grabar_button.click(grabar_audio, outputs=output_audio)
    
    return demo

# Ejecuta la interfaz con la ruta absoluta en allowed_paths
if __name__ == "__main__":
    demo = interfaz()
    demo.launch(allowed_paths=[os.path.dirname(AUDIO_COPY_PATH)])