atsushieee's picture
Upload folder using huggingface_hub
448b42a verified
raw
history blame
1.51 kB
"""Web-based piece practice view.
This module provides a web interface using Gradio for visualizing
and interacting with piece practice sessions.
"""
from abc import ABC, abstractmethod
from typing import Any, Callable, Tuple
import gradio as gr
import numpy as np
class WebPracticeView(ABC):
"""Handles the user interface for all practice applications."""
def __init__(
self,
on_generate_melody: Callable[..., Tuple[Any, ...]],
on_end_practice: Callable[[], Tuple[Any, ...]],
on_audio_input: Callable[[Tuple[int, np.ndarray]], Tuple[Any, ...]],
):
"""Initialize the UI with callback functions.
Args:
on_generate_melody: Function to call when start button is clicked
on_end_practice: Function to call when stop button is clicked
on_audio_input: Function to process audio input
"""
self.on_generate_melody = on_generate_melody
self.on_end_practice = on_end_practice
self.on_audio_input = on_audio_input
def launch(self, **kwargs):
"""Launch the Gradio application.
Args:
**kwargs: Additional keyword arguments for the launch method.
"""
app = self._build_interface()
app.queue()
app.launch(**kwargs)
@abstractmethod
def _build_interface(self) -> gr.Blocks:
"""Create and configure the Gradio interface.
Returns:
gr.Blocks: The Gradio interface.
"""
pass