import math from pathlib import Path import struct import wave import gradio as gr DEFAULT_MAX_SECONDS = 300 GROUNDING = "Temporal grounding (when?)" DETECTION = "Event detection (does it occur?)" def create_fake_examples() -> list[list[str]]: """Create short synthetic clips so the UI examples work without model data.""" example_dir = Path("/tmp/spotsound_fake_examples") example_dir.mkdir(parents=True, exist_ok=True) specs = [ ("fake_hair_dryer.wav", "hair dryer drying", (900, 1250)), ("fake_ambulance_siren.wav", "ambulance siren", (520, 690)), ("fake_train_horn.wav", "train horning", (180, 240)), ("fake_police_siren.wav", "police car siren", (600, 850)), ] examples: list[list[str]] = [] sample_rate = 16_000 duration = 2 for filename, query, frequencies in specs: path = example_dir / filename with wave.open(str(path), "wb") as wav: wav.setnchannels(1) wav.setsampwidth(2) wav.setframerate(sample_rate) frames = bytearray() for index in range(sample_rate * duration): time = index / sample_rate frequency = frequencies[int(time * 3) % len(frequencies)] signal = 0.16 * math.sin(2 * math.pi * frequency * time) signal += 0.04 * math.sin(2 * math.pi * frequency * 1.5 * time) frames.extend(struct.pack("