#!/usr/bin/env python3 # Gera o som de "passo" do Simon Says (pedra arrastada) que substitui o sons/move.ogg original (ZapSplat, cuja licenca # nao permite redistribuir o arquivo). Som sintetizado aqui do zero (ruido filtrado com envelope), dedicado ao dominio # publico (CC0) pelo FredyGames. Saida: PCM s16 mono 32000 Hz em stdout (o encode-ogg.c o grava em Ogg Vorbis). import math, random, struct, sys SR, DUR = 32000, 0.8 rnd = random.Random(20261111) n = int(SR * DUR) out = [] lp1 = lp2 = 0.0 grain = 0.0 for i in range(n): t = i / SR # envelope: ataque curto, sustentacao irregular (o arrasto), queda suave env = min(1.0, t / 0.03) * math.exp(-max(0.0, t - 0.35) * 7.0) if rnd.random() < 0.004: # pequenos trancos da pedra grain = 1.0 grain *= 0.995 x = rnd.uniform(-1, 1) lp1 += 0.18 * (x - lp1) # passa-baixa: chiado de areia lp2 += 0.04 * (lp1 - lp2) # segundo polo: ronco grave s = (0.55 * lp1 + 1.6 * lp2) * env * (0.6 + 0.5 * grain) out.append(max(-32767, min(32767, int(s * 26000)))) sys.stdout.buffer.write(struct.pack('<%dh' % len(out), *out))