q=0#=;$p=q(q=0#=;$p=q(%s);$d=q(%s);printf$p,$p,$d,10;%c);$d=q(

# generates a cover of Popcorn when ran as Python
# is a quine when ran as Perl

from math import tau,sin
import struct,wave
seq_a = [2, 0, 2, -3, -7, -3, -10]
seq_ap= [2, 0, 2, -2, -7, -2, -10]
seq_b = [2, 4, 5, 4, 5, 2, 4, 2, 4, 0, 2, 0]
notes = (seq_a * 2 + seq_b + [2, -3, 2] +
         seq_a * 2 + seq_b + [2,  4, 5] +
        [x+7 for x in seq_ap*2 + seq_b + [2, -3, 2]
                    + seq_a*2  + seq_b + [-3, 0, 2]])
lengths = (([1]*6 + [2])*2 + [1]*14 + [2])*4
out = [0]*1269040
for i,x in zip(lengths,notes):
    for st in range(662):
        t=st/44100
        tft=tau*880*2**(x/12)*t
        samp=sin(tft+.75*sin(2*tft)+sin(tft)/4)
        gain=t/.01 if t<.01 else 1-(t-.01)/.005
        out[q*10023+st]=int(samp*gain*32767*.4)
    q+=i
f=wave.open("tinypop.wav", 'wb')
f.setparams((1,2,44100,0,'NONE',''))
f.writeframes(b''.join(struct.pack('<h',x)for x in out))
f.close()
#);printf$p,$p,$d,10;
