import gradio as gr import numpy as np from scipy.io.wavfile import write import tempfile def simulate_amber_alert_vibration(file): # Sampling parameters sample_rate = 44100 # Standard audio sample rate (44.1 kHz) burst_frequency = 50 # Low frequency (50 Hz) for vibration-like sound burst_duration = 0.5 # Duration of each burst in seconds silence_duration = 0.5 # Silence between bursts in seconds num_bursts = 5 # Number of vibration bursts # Generate a single burst of low-frequency sound t_burst = np.linspace(0, burst_duration, int(sample_rate * burst_duration), endpoint=False) burst_wave = 0.5 * np.sin(2 * np.pi * burst_frequency * t_burst) # 50 Hz sine wave # Generate silence t_silence = np.linspace(0, silence_duration, int(sample_rate * silence_duration), endpoint=False) silence_wave = np.zeros_like(t_silence) # Combine bursts and silence to simulate vibration pattern vibration_wave = np.concatenate([np.concatenate([burst_wave, silence_wave]) for _ in range(num_bursts)]) # Normalize to 16-bit PCM format vibration_wave = (vibration_wave * 32767).astype(np.int16) # Save to a temporary WAV file temp_file = tempfile.NamedTemporaryFile(delete=False, suffix=".wav") write(temp_file.name, sample_rate, vibration_wave) return temp_file.name # Gradio Interface interface = gr.Interface( fn=simulate_amber_alert_vibration, inputs=gr.Audio(label="Upload a WAV file (optional)", type="filepath"), outputs=gr.Audio(label="Simulated Amber Alert Vibration"), title="Amber Alert Vibration Simulation", description="Simulate an Amber Alert-style vibration using low-frequency audio. Play the generated audio to feel the effect." ) interface.launch()