Spaces:
Sleeping
Sleeping
| import spaces | |
| import gradio as gr | |
| import torch | |
| from pyharp import ModelCard, build_endpoint, LabelList, AudioLabel, OutputLabel | |
| from skey.key_detection import detect_key | |
| # Check for GPU availability | |
| DEVICE = "cuda" if torch.cuda.is_available() else "cpu" | |
| # Create a ModelCard | |
| model_card = ModelCard( | |
| name="S-KEY Detection", | |
| description="Major/Minor Key detection from audio using Self-supervised Key Detection.", | |
| author="Deezer Research", | |
| tags=["key detection", "mir"], | |
| ) | |
| # Define the process function | |
| def process_fn(input_audio_path): | |
| try: | |
| ext = input_audio_path.split(".")[-1].lower() | |
| detected_keys = detect_key( | |
| input_audio_path, | |
| extension=ext, | |
| device=DEVICE, | |
| cli=False | |
| ) | |
| print("Raw output:", detected_keys) | |
| if not detected_keys: | |
| raise ValueError("No key detected") | |
| detected_key = detected_keys[0] # because function returns list[str] | |
| labels = LabelList() | |
| labels.labels.append( | |
| AudioLabel( | |
| t=0.0, | |
| duration=5.0, | |
| label=detected_key, | |
| amplitude=0.8, | |
| description="Detected by S-KEY", | |
| color=OutputLabel.rgb_color_to_int(255, 100, 100, 0.8), | |
| ) | |
| ) | |
| return input_audio_path, labels | |
| except Exception as e: | |
| print("Error:", e) | |
| raise e | |
| # Build Gradio Endpoint | |
| with gr.Blocks() as demo: | |
| input_audio = gr.Audio(label="Input Audio", type="filepath").harp_required(True) | |
| # output_text = gr.Textbox(label="Detected Key") | |
| output_audio = gr.Audio(label="Output Audio", type="filepath") | |
| output_labels = gr.JSON(label="Analysis Labels") | |
| build_endpoint( | |
| model_card=model_card, | |
| process_fn=process_fn, | |
| input_components=[input_audio], | |
| output_components=[output_audio, output_labels], | |
| ) | |
| if __name__ == "__main__": | |
| demo.queue().launch() | |