#!/usr/bin/env python3 """Gera os tres efeitos sonoros do OpenSSN do fredygames.com (explosao, ping de sonar, lancamento de torpedo). Os tres .ogg do pacote original nao tem origem registrada, entao o build os tira e usa estes, sintetizados aqui (ruido filtrado e senoides, semente fixa: a saida e sempre a mesma). Dedicados ao dominio publico (CC0 1.0), como as imagens e os dados do jogo. Uso: python3 -I make-sounds.py """ import math import random import struct import sys import wave RATE = 22050 def write(path, samples): peak = max(abs(x) for x in samples) or 1.0 with wave.open(path, "wb") as w: w.setnchannels(1) w.setsampwidth(2) w.setframerate(RATE) w.writeframes(b"".join(struct.pack("= 0: s += gain * math.sin(2 * math.pi * 1250 * u) * math.exp(-u * 9) * min(1.0, u * 300) out.append(s) return out def torpedo_launch(): rng = random.Random(3) n = int(RATE * 1.6) noise = [rng.uniform(-1, 1) for _ in range(n)] out = [] y = 0.0 for i in range(n): t = i / RATE k = 0.04 + 0.30 * min(1.0, t / 0.5) * math.exp(-max(0.0, t - 0.5) * 1.5) y += k * (noise[i] - y) env = min(1.0, t * 60) * math.exp(-max(0.0, t - 0.35) * 2.2) thump = math.sin(2 * math.pi * 70 * t) * math.exp(-t * 14) * 1.2 out.append(y * 3.0 * env + thump) return out if __name__ == "__main__": d = sys.argv[1] write(d + "/explosion.wav", explosion()) write(d + "/sonar-ping.wav", sonar_ping()) write(d + "/torpedo-launch.wav", torpedo_launch())