import wave
import math

# Parameters
duration_sec = 65
sample_rate = 44100
num_samples = duration_sec * sample_rate
amplitude = 32767

# Output WAV setup
output_filename = 'F2F_Battle_Track_Clean.wav'
wav_file = wave.open(output_filename, 'w')
wav_file.setnchannels(1)  # Mono
wav_file.setsampwidth(2)  # 2 bytes per sample
wav_file.setframerate(sample_rate)

# Generate and write small chunks to avoid memory issues
chunk_size = 1024  # Samples per write

for i in range(0, num_samples, chunk_size):
    frames = bytearray()
    for j in range(chunk_size):
        idx = i + j
        if idx >= num_samples:
            break
        # Pink noise (approximate) + 63 Hz sine wave
        pink_noise = (math.sin(2 * math.pi * (idx / sample_rate) * (math.sin(idx / 441.0) * 50 + 70)) + 1) / 2
        tone = 0.3 * math.sin(2 * math.pi * 63 * (idx / sample_rate))
        sample_value = amplitude * (0.7 * pink_noise + tone)
        sample_value = max(min(int(sample_value), 32767), -32768)  # Clip
        frames += sample_value.to_bytes(2, byteorder='little', signed=True)
    wav_file.writeframes(frames)

wav_file.close()

print("\n✅ Successfully generated F2F_Battle_Track_Clean.wav without memory issues!")