from scipy.io.wavfile import write
import numpy as np

# Parameters
sample_rate = 44100  # Sample rate in Hz
duration = 16  # Total duration of the countdown in seconds
base_frequency = 440  # Base frequency for the first beep in Hz
final_frequency = 880  # Final frequency for the beep before the end tone in Hz
end_tone_frequency = 1760  # Frequency for the final tone
volume = 0.5  # Volume, from 0 to 1
beep_duration = 0.3  # Duration of each beep in seconds
beep_interval = 1  # Interval between beeps in seconds, decrease towards the end
end_tone_duration = 1.5  # Duration of the final tone in seconds

# Time array
t = np.linspace(0, duration, int(sample_rate * duration), False)

# Generate silent audio
audio = np.zeros_like(t)

# Generate beeps
for i in range(int(duration / beep_interval)):
    # Calculate beep frequency to increase over time
    freq = np.linspace(base_frequency, final_frequency, int(duration / beep_interval))[i]
    # Calculate start and end samples for the current beep
    start_sample = int(i * beep_interval * sample_rate)
    end_sample = int(start_sample + beep_duration * sample_rate)
    # Generate beep
    beep = np.sin(2 * np.pi * freq * t[start_sample:end_sample]) * volume
    # Insert beep into the audio signal
    audio[start_sample:end_sample] += beep

# Generate the final tone
start_sample = int(duration * sample_rate - end_tone_duration * sample_rate)
end_sample = int(duration * sample_rate)
end_tone = np.sin(2 * np.pi * end_tone_frequency * t[start_sample:end_sample]) * volume
audio[start_sample:end_sample] += end_tone

# Ensure audio is in 16-bit format
audio = np.int16(audio / np.max(np.abs(audio)) * 32767)

# Save to file
wav_file = '/mnt/data/countdown_timer_tone.wav'
write(wav_file, sample_rate, audio)

wav_file
