Psst.. new poll here.
Psst.. new forums here.
Microsoft is blocking us again (TY IP Reputation!) so dont bother with any of their useless mail servers here and just use oauth login instead. Thank the nice Russians for causing that. :)
Paste
Pasted as Python by blober ( 14 years ago )
# -*- coding: utf-8 -*-
# _o_o_ oOo _o_o_ @ CiDTL @ juntaDados.org @ LabMacambira.sf.net
# 2010, 2012, o0o0o
# Nao tem dependencia nenhuma. apenas rode:
# $ python minimum-fi-music.py
# e ouça o sequencia.wav
import math, random, wave, struct
###################################
###################################
######### Lookup table ############
def lookup(table, dur, freq):
"""X Hz Y segundos ---- Y*44100 amostras X senoides
X*T*n.arange(Y*44100)/(Y*44100)"""
T=len(table)
SI= freq * T / 44100
ap=0
samples=[]
for i in xrange(int(dur*44100)): # n_de_amostras = dur * 44100
samples.append(table[int(ap)])
ap = (SI + ap)%T
return samples
#########################################
##### alterador de timbres ###
# multiplicador de funções
def lookupcruz(func, func2, dur, freq):
"""X Hz Y segundos ---- Y*44100 amostras X senoides
X*T*n.arange(Y*44100)/(Y*44100)"""
T=len(func)
SI= freq * T / 44100
ap=0
samples=[]
for i in xrange(int(dur*44100)): # n_de_amostras = dur * 44100
samples.append(func[int(ap)]*func2[int(ap)])
ap = (SI + ap)%T
return samples
################
#### fazendo o som: ####
# sequencia inicializada:
def fazSequencia(notas, f0, fator, dur_nota, dur_silencio, funcao1, funcao2=0):
#seq=1.5*fazSequencia(nt, f, fator, d, s, senoide, dente)
"""Retorna sequência de notas especificada por uma lista
de valores em proporção (usualmente de semitons), a fequencia fundamental, o fator
de proporção, a duração sonora da nota, a duração silenciosa da nota,
e as funções ara síntese de timbre.
Ex:
>>> import numpy as n, scikits.audiolab as a
>>> senoide=n.sin(n.linspace(0,2*n.pi,T,endpoint=False))
>>> dente=n.linspace(-1,1,T,endpoint=False)
>>> fazSequencia([0,4,7,4,0,4,7,12,7,4,0], 440, 2**(1/12.), .3, .4, senoide, dente)
>>> a.wavwrite(seq,"sequencia.wav",44100)
"""
seq=[]
for nota in notas:
freq=f0*fator**nota
if funcao2:
amostras=lookupcruz(funcao1,funcao2,dur_nota,freq)
else:
amostras=lookup(funcao1,dur_nota,freq)
amostras += [0]*int(44100*dur_silencio)
seq += amostras
smin=min(seq); smax=max(seq)
seq= [(-.5+(i-smin)/(smax-smin)) for i in seq]
return seq
def fazAcorde(notas, f0, fator, dur_nota, dur_silencio, funcao1, funcao2=0):
"""Retorna um acorde, funcionamento inspirado no fazSequencia."""
seq=[]
for nota in notas:
freq=f0*fator**nota
if funcao2:
amostras=lookupcruz(funcao1,funcao2,dur_nota,freq)
else:
amostras=lookup(funcao1,dur_nota,freq)
#seq=amostras+[0]*(dur_silencio)*44100 # versao fiel ao que estava
amostras=amostras+[0]*int(dur_silencio*44100)
seq=somador(seq,amostras)
smin=min(seq); smax=max(seq)
seq= [(-.5+(i-smin)/(smax-smin)) for i in seq]
return seq
############
def somador(seq1,seq2):
diff=len(seq1)-len(seq2)
if diff > 0:
seq2+=[0]*diff
elif diff< 0:
seq1+=[0]*-diff
seq=[(i+j) for i,j in zip(seq1,seq2)]
return seq
####### funções
T=2048
l=range(T+1)
l= [i/float(T) for i in l] # l E [0,1]
l=l[:-1] # len(l) = 2048, endpoint=false para o ciclo
l=[i*2*math.pi for i in l] # l E [0,2*pi)
senoide=[math.sin(i) for i in l] # sin eh um ciclo de senoide E [-1,1]
l=range(2048)
l=[i/2048. for i in l] # l[i] E [0,1]
dente=[i*2-1 for i in l] # l[i] E [-1,1]
##################################
##################################
# banco de séries
# escalas simétricas:
escala_1=range(12) # cromática ascendente sem inclusão da oitava
escala_2=range(0,12,2) # tons inteiros
escala_3=range(0,12,3) # diminutão
escala_4=range(0,12,4) # terças maiores
escala_6=range(0,12,6) # trítonos
# acordes
maior=[0,4,7]
menor=[0,3,7]
# randomico:
randomico=[random.randint(0,11) for i in xrange(16)]
#############
# series pensadas:
# bases:
b1=[0]*4
b2=[0]*7+[7]
b3= [0,7,0,1]
b3_2=[0,7,8,7]
b4=[0,7,7,7]
b5=[0,7]
b6=[0,19,7,12]
b7=[0,-1,0,-1]
b8=[0,-1,7,-1]
b9=[0,1,0,-1]
b10=[0,7,6,7]
# frequencia de base (hz):
f0=80
# fator de multiplicação por semitom
fator=2.**(1/12.)
# duração das notas (s):
dur=.3*.5
# silêncio entre notas:
sil=.1
# volume Peak:
vol=0.2
print range(10)
#### Abertura
f=f0; d=dur*10; s=sil
nt=b10
seq=[1.5*i for i in fazSequencia(nt, f, fator, d, s, senoide, dente)]
print "000000000000" # TTM
#### Impacto 1
f=f0; d=dur; s=sil
nt=b2*2
seq2=fazSequencia(nt, f, fator, d, s, senoide, dente)
nt=b10*4
seq2=[(i+j) for i,j in zip(seq2,fazSequencia(nt, f, fator, d, s, senoide, dente))]
nt=b2*2
f=f0*4
seq2=[i+j for i,j in zip(seq2,fazSequencia(nt, f, fator, d, s, dente))]
seq+=seq2
#### retorno 1
f=f0*2; d=dur; s=sil
nt=b10*4
seq2=[1.5*i for i in fazSequencia(nt, f, fator, d, s, senoide, dente)]
seq+=seq2
#### Impacto 2 (==1)
f=f0; d=dur; s=sil
nt=b2*2
seq2=fazSequencia(nt, f, fator, d, s, senoide, dente)
nt=b10*4
seq2=[(i+j) for i,j in zip(seq2,fazSequencia(nt, f, fator, d, s, senoide, dente))]
nt=b2*2
f=f0*4
seq2=[(i+j) for i,j in zip(seq2,fazSequencia(nt, f, fator, d, s, dente))]
seq+=seq2
#### Continuação do impacto 2
print "11111111111" # TTM
f=f0; d=dur; s=sil
nt=b2*2
seq2=fazSequencia(nt, f, fator, d, s, senoide, dente)
nt=b10*4
seq2=[(i+j) for i,j in zip(seq2,fazSequencia(nt, f, fator, d, s, senoide, dente))]
nt=b2*2
f=f0*4
seq2=[(i+j) for i,j in zip(seq2,fazSequencia(nt, f, fator, d, s, dente, senoide))]
nt=b1*4
f=f0/2
seq2=[(i+j) for i,j in zip(seq2,fazSequencia(nt, f, fator, d, s, dente, senoide))]
#seq+=seq2 # NAO TINHA NO ORIGINAL< PERDIA O PEDACO
#### Continuação da continuação do impacto 2
f=f0; d=dur; s=sil
nt=b2*2
seq2=fazSequencia(nt, f, fator, d, s, senoide, dente)
nt=b10*4
seq2=[(i+j) for i,j in zip(seq2,fazSequencia(nt, f, fator, d, s, senoide, dente))]
nt=b2*2
f=f0*4
seq2=[(i+j) for i,j in zip(seq2,fazSequencia(nt, f, fator, d, s, dente, senoide))]
nt=b1*4
f=f0/2
seq2=[(i+j) for i,j in zip(seq2,fazSequencia(nt, f, fator, d, s, dente, senoide))]
nt=b3*4
f=f0*8
seq2=[(i+j) for i,j in zip(seq2,fazSequencia(nt, f, fator, d, s, dente))]
seq2*=2
seq+=seq2
#### retorno 2
f=f0/2; d=dur*2; s=sil*2
nt=b1*2
seq2=[5*i for i in fazSequencia(nt, f, fator, d, s, senoide, dente)]
seq+=seq2
#### acumulo 1 em retorno 2, (16 tempos, 4 compassos)
f=f0/2; d=dur*2; s=sil*2
nt=b1*2*2
seq2=[5*i for i in fazSequencia(nt, f, fator, d, s, senoide, dente)]
f=f0*8; d=dur; s=sil
nt=[random.randint(0,-1+len(escala_2)) for i in xrange(16*2)]
seq3=fazSequencia(nt, f, fator, d, s, dente)
seq2=somador(seq3,seq2)
f=f0*16; d=dur; s=sil
nt=[random.randint(0,-1+len(escala_4)) for i in xrange(16*2)]
seq3=fazSequencia(nt, f, fator, d, s, dente)
seq2=somador(seq3,seq2)
seq+=seq2
#### acumulo 2 em retorno 2, (16 tempos, 4 compassos)
print '2222222222222222222222' # TTM
f=f0/2; d=dur*2; s=sil*2
nt=b1*2*2
seq2=fazSequencia(nt, f, fator, d, s, senoide, dente)
f=f0; d=dur*2; s=sil*2
nt=b3*2*2
seq2=[(i+j) for i,j in zip(seq2,fazSequencia(nt, f, fator, d, s, senoide, dente))]
f=f0*8; d=dur; s=sil
nt=[random.randint(0,-1+len(escala_2)) for i in xrange(16*2)]
seq3=fazSequencia(nt, f, fator, d, s, dente)
seq2=somador(seq3,seq2)
f=f0*16; d=dur; s=sil
nt=[random.randint(0,-1+len(escala_4)) for i in xrange(16*2)]
seq3=fazSequencia(nt, f, fator, d, s, dente)
seq2=somador(seq3,seq2)
seq+=seq2
#### acumulo 3 em retorno 2, (16 tempos, 4 compassos)
f=f0/2; d=dur*2; s=sil*2
nt=b1*2*2
seq2=[1.3*i for i in fazSequencia(nt, f, fator, d, s, senoide, dente)]
f=f0*fator**7; d=dur*2; s=sil*2
nt=b7*2*2
seq2=somador(seq2,fazSequencia(nt, f, fator, d, s, senoide, dente))
f=f0; d=dur*2; s=sil*2
nt=b3*2*2
seq2=somador(seq2,fazSequencia(nt, f, fator, d, s, senoide, dente))
f=f0*8; d=dur; s=sil
nt=[random.randint(0,-1+len(escala_2)) for i in xrange(16*2)]
seq3=fazSequencia(nt, f, fator, d, s, dente)
seq2=somador(seq3,seq2)
f=f0*16; d=dur; s=sil
nt=[random.randint(0,-1+len(escala_4)) for i in xrange(16*2)]
seq3=fazSequencia(nt, f, fator, d, s, dente)
seq2=somador(seq3,seq2)
seq+=seq2
#### acumulo 4 em retorno 2, (16 tempos, 4 compassos)
f=f0/2; d=dur*2; s=sil*2
nt=b1*2*2
seq2=[1.3*i for i in fazSequencia(nt, f, fator, d, s, senoide, dente)]
f=f0*fator**7; d=dur*2; s=sil*2
nt=b7*2*2
seq2=somador(seq2,fazSequencia(nt, f, fator, d, s, senoide, dente))
f=f0; d=dur*2; s=sil*2
nt=b3*2*2
seq2=somador(seq2,fazSequencia(nt, f, fator, d, s, senoide, dente))
f=f0*8; d=dur; s=sil
nt=[random.randint(0,-1+len(escala_2)) for i in xrange(16*2)]
seq3=fazSequencia(nt, f, fator, d, s, dente)
seq2=somador(seq3,seq2)
f=f0*16; d=dur; s=sil
nt=[random.randint(0,-1+len(escala_4)) for i in xrange(16*2)]
seq3=fazSequencia(nt, f, fator, d, s, dente)
seq2=somador(seq3,seq2)
f=f0/2; d=dur*2; s=sil*2
nt=b1*2*2
ac=[]
for i in xrange(8): # a cada 2 tempos
ac+=fazAcorde([0,7,14,21,28,35,42,49,56,63,70,77,84], f, fator, d, s, senoide, dente)
ac+=[0]*int((d+s)*44100)
seq2=somador(ac,seq2)
seq+=seq2
#### transformação final do acumulo 4 em retorno 2, (16 tempos, 4 compassos)
f=f0/2; d=dur*2; s=sil*2
nt=b1*2*2
seq2=[1.3*i for i in fazSequencia(nt, f, fator, d, s, senoide, dente)]
f=f0*fator**7; d=dur*2; s=sil*2
nt=[escala_3[i] for i in [random.randint(0,-1+len(escala_3)) for j in xrange(16)]]
seq2=somador(seq2,fazSequencia(nt, f, fator, d, s, senoide, dente))
f=f0; d=dur*2; s=sil*2
nt=[escala_3[i] for i in [random.randint(0,-1+len(escala_3)) for j in xrange(16)]]
seq2=somador(seq2,fazSequencia(nt, f, fator, d, s, senoide, dente))
f=f0*8; d=dur; s=sil
nt=[escala_3[i] for i in [random.randint(0,-1+len(escala_3)) for j in xrange(16*2)]]
seq3=fazSequencia(nt, f, fator, d, s, dente)
seq2=somador(seq3,seq2)
f=f0*16; d=dur; s=sil
nt=[escala_3[i] for i in [random.randint(0,-1+len(escala_3)) for j in xrange(16*2)]]
seq3=fazSequencia(nt, f, fator, d, s, dente)
seq2=somador(seq3,seq2)
f=f0/2; d=dur*2; s=sil*2
nt=b1*2*2
ac=[]
for i in xrange(8): # a cada 2 tempos
ac+=fazAcorde([0,7,14,21,28,35,42,49,56,63,70,77,84], f, fator, d, s, senoide, dente)
ac+=[0]*int((d+s)*44100)
seq2=somador(seq2,ac)
seq+=seq2
#### parte 2 da transformação final do acumulo 4 em retorno 2, (16 tempos, 4 compassos)
f=f0/2; d=dur*2; s=sil*2
nt=b1*2*2
seq2=[1.3*i for i in fazSequencia(nt, f, fator, d, s, senoide, dente)]
f=f0*fator**7; d=dur*2; s=sil*2
nt=[escala_4[i] for i in [random.randint(0,-1+len(escala_4)) for j in xrange(16)]]
seq2=somador(seq2,fazSequencia(nt, f, fator, d, s, senoide, dente))
f=f0; d=dur*2; s=sil*2
nt=[escala_4[i] for i in [random.randint(0,-1+len(escala_4)) for j in xrange(16)]]
seq2=somador(seq2,fazSequencia(nt, f, fator, d, s, senoide, dente))
f=f0*8; d=dur; s=sil
nt=[escala_4[i] for i in [random.randint(0,-1+len(escala_4)) for j in xrange(16*2)]]
seq3=fazSequencia(nt, f, fator, d, s, dente)
seq2=somador(seq3,seq2)
f=f0*16; d=dur; s=sil
nt=[escala_4[i] for i in [random.randint(0,-1+len(escala_4)) for j in xrange(16*2)]]
seq3=fazSequencia(nt, f, fator, d, s, dente)
seq2=somador(seq3,seq2)
f=f0/2; d=dur*2; s=sil*2
nt=b1*2*2
ac=[]
for i in xrange(8): # a cada 2 tempos
ac+=fazAcorde([0,7,14,21,28,35,42,49,56,63,70,77,84], f, fator, d, s, senoide, dente)
ac+=[0]*int((d+s)*44100)
seq2=somador(seq2,ac)
seq+=seq2
#### parte 2 da transformação final do acumulo 4 em retorno 2, (16 tempos, 4 compassos)
f=f0/2; d=dur*2; s=sil*2
nt=b1*2*2
seq2=[1.3*i for i in fazSequencia(nt, f, fator, d, s, senoide, dente)]
f=f0*fator**7; d=dur*2; s=sil*2
nt=[escala_6[i] for i in [random.randint(0,-1+len(escala_6)) for j in xrange(16)]]
seq2=somador(seq2,fazSequencia(nt, f, fator, d, s, senoide))
f=f0; d=dur*2; s=sil*2
nt=[escala_6[i] for i in [random.randint(0,-1+len(escala_6)) for j in xrange(16)]]
seq2=somador(seq2,fazSequencia(nt, f, fator, d, s, senoide))
f=f0*8; d=dur; s=sil
nt=[escala_6[i] for i in [random.randint(0,-1+len(escala_6)) for j in xrange(16*2)]]
seq3=fazSequencia(nt, f, fator, d, s, senoide)
seq2=somador(seq3,seq2)
f=f0*16; d=dur; s=sil
nt=[escala_6[i] for i in [random.randint(0,-1+len(escala_6)) for j in xrange(16*2)]]
seq3=fazSequencia(nt, f, fator, d, s, senoide)
seq2=somador(seq3,seq2)
f=f0/2; d=dur*2; s=sil*2
nt=b1*2*2
ac=[]
for i in xrange(8): # a cada 2 tempos
ac+=fazAcorde([0,7,14,21,28,35,42,49,56,63,70,77,84], f, fator, d, s, senoide, dente)
ac+=[0]*int((d+s)*44100)
seq2=somador(seq2,ac)
seq+=seq2
#### parte 3 da transformação final do acumulo 4 em retorno 2, (16 tempos, 4 compassos)
f0=f0*fator**7
f=f0/2; d=dur*2; s=sil*2
nt=b1*2*2
seq2=[1.3*i for i in fazSequencia(nt, f, fator, d, s, senoide, dente)]
f=f0*fator**7; d=dur*2; s=sil*2
nt=[escala_4[i] for i in [random.randint(0,-1+len(escala_4)) for j in xrange(16)]]
seq2=somador(seq2,fazSequencia(nt, f, fator, d, s, dente))
f=f0; d=dur*2; s=sil*2
nt=[escala_4[i] for i in [random.randint(0,-1+len(escala_4)) for j in xrange(16)]]
seq2=somador(seq2,fazSequencia(nt, f, fator, d, s, dente))
f=f0*8; d=dur; s=sil
nt=[escala_4[i] for i in [random.randint(0,-1+len(escala_4)) for j in xrange(16*2)]]
seq3=fazSequencia(nt, f, fator, d, s, dente)
seq2=somador(seq3,seq2)
f=f0*16; d=dur; s=sil
nt=[escala_4[i] for i in [random.randint(0,-1+len(escala_4)) for j in xrange(16*2)]]
seq3=fazSequencia(nt, f, fator, d, s, dente)
seq2=somador(seq3,seq2)
f=f0/2; d=dur*2; s=sil*2
nt=b1*2*2
ac=[]
for i in xrange(8): # a cada 2 tempos
ac+=fazAcorde([0,7,14,21,28,35,42,49,56,63,70,77,84], f, fator, d, s, senoide, dente)
ac+=[0]*int((d+s)*44100)
seq2=somador(seq2,ac)
seq+=seq2
#### parte 3 da transformação final do acumulo 4 em retorno 2, (16 tempos, 4 compassos)
f0=f0*fator**-5
f=f0/2; d=dur*2; s=sil*2
nt=b1*2
seq2=[1.3*i for i in fazSequencia(nt, f, fator, d, s, senoide, dente)]
f=f0*fator**7; d=dur*2; s=sil*2
nt=[escala_4[i] for i in [random.randint(0,-1+len(escala_4)) for j in xrange(8)]]
seq2=somador(seq2,fazSequencia(nt, f, fator, d, s, dente))
f=f0; d=dur*2; s=sil*2
nt=[escala_4[i] for i in [random.randint(0,-1+len(escala_4)) for j in xrange(8)]]
seq2=somador(seq2,fazSequencia(nt, f, fator, d, s, dente))
f=f0*8; d=dur; s=sil
nt=[escala_4[i] for i in [random.randint(0,-1+len(escala_4)) for j in xrange(16)]]
seq3=fazSequencia(nt, f, fator, d, s, dente)
seq2=somador(seq3,seq2)
f=f0*16; d=dur; s=sil
nt=[escala_4[i] for i in [random.randint(0,-1+len(escala_4)) for j in xrange(16)]]
seq3=fazSequencia(nt, f, fator, d, s, dente)
seq2=somador(seq3,seq2)
f=f0/2; d=dur*2; s=sil*2
nt=b1*2*2
ac=[]
for i in xrange(4): # a cada 2 tempos
ac+=fazAcorde([0,7,14,21,28,35,42,49,56,63,70,77,84], f, fator, d, s, senoide, dente)
ac+=[0]*int((d+s)*44100)
seq2=somador(seq2,ac)
seq+=seq2
#### Dominante para terminar da transformação final do acumulo 4 em retorno 2, (16 tempos, 4 compassos)
f0=f0*fator**5
f=f0/2; d=dur*2; s=sil*2
nt=b1*2
seq2=[1.3*i for i in fazSequencia(nt, f, fator, d, s, dente)]
f=f0*fator**7; d=dur*2; s=sil*2
nt=[escala_3[i] for i in [random.randint(0,-1+len(escala_3)) for j in xrange(8)]]
seq2=somador(seq2,fazSequencia(nt, f, fator, d, s, dente))
f=f0; d=dur*2; s=sil*2
nt=[escala_3[i] for i in [random.randint(0,-1+len(escala_3)) for j in xrange(8)]]
seq2=somador(seq2,fazSequencia(nt, f, fator, d, s, dente))
f=f0*8; d=dur; s=sil
nt=[escala_3[i] for i in [random.randint(0,-1+len(escala_3)) for j in xrange(16)]]
seq3=fazSequencia(nt, f, fator, d, s, dente)
seq2=somador(seq3,seq2)
f=f0*16; d=dur; s=sil
nt=[escala_3[i] for i in [random.randint(0,-1+len(escala_3)) for j in xrange(16)]]
seq3=fazSequencia(nt, f, fator, d, s, dente)
seq2=somador(seq3,seq2)
f=f0/2; d=dur*2; s=sil*2
nt=b1*2*2
ac=[]
for i in xrange(4): # a cada 2 tempos
ac+=fazAcorde([0,7,14,21,28,35,42,49,56,63,70,77,84], f, fator, d, s, senoide, dente)
ac+=[0]*int((d+s)*44100)
seq2=somador(seq2,ac)
seq+=seq2
#### tonica em senóide para terminar da transformação final do acumulo 4 em retorno 2, (16 tempos, 4 compassos)
f0=f0*fator**-4
f=f0/2; d=dur*2; s=sil*2
nt=b1*2*2
seq2=[1.3*i for i in fazSequencia(nt, f, fator, d, s, senoide)]
f=f0*fator**7; d=dur*2; s=sil*2
nt=[escala_6[i] for i in [random.randint(0,-1+len(escala_6)) for j in xrange(16)]]
seq2=somador(seq2,fazSequencia(nt, f, fator, d, s, senoide))
f=f0; d=dur*2; s=sil*2
nt=[escala_6[i] for i in [random.randint(0,-1+len(escala_6)) for j in xrange(16)]]
seq2=somador(seq2,fazSequencia(nt, f, fator, d, s, senoide))
f=f0*8; d=dur; s=sil
nt=[escala_6[i] for i in [random.randint(0,-1+len(escala_6)) for j in xrange(16*2)]]
seq3=fazSequencia(nt, f, fator, d, s, senoide)
seq2=somador(seq3,seq2)
f=f0*16; d=dur; s=sil
nt=[escala_6[i] for i in [random.randint(0,-1+len(escala_6)) for j in xrange(16*2)]]
seq3=fazSequencia(nt, f, fator, d, s, senoide)
seq2=somador(seq3,seq2)
f=f0/2; d=dur*2; s=sil*2
nt=b1*2*2
ac=[]
for i in xrange(8): # a cada 2 tempos
ac+=fazAcorde([0,7,14,21,28,35,42,49,56,63,70,77,84], f, fator, d, s, senoide)
ac+=[0]*int((d+s)*44100)
seq2=somador(seq2,ac)
seq+=seq2
#### acorde final
f=f0/2; d=dur*2*5; s=sil*2
nt=[0]
seq2=[1.3*i for i in fazSequencia(nt, f, fator, d, s, senoide)]
f=f0*fator**7; d=dur*2*5; s=sil*2
nt=[escala_6[random.randint(0,-1+len(escala_6))]]
seq2=somador(seq2,fazSequencia(nt, f, fator, d, s, senoide))
f=f0; d=dur*2*5; s=sil*2
nt=[escala_6[random.randint(0,-1+len(escala_6))]]
seq2=somador(seq2,fazSequencia(nt, f, fator, d, s, senoide))
f=f0*8; d=dur*5; s=sil
nt=[escala_6[random.randint(0,-1+len(escala_6))]]
seq3=fazSequencia(nt, f, fator, d, s, senoide)
seq2=somador(seq3,seq2)
f=f0*16; d=dur*5; s=sil
nt=[escala_6[random.randint(0,-1+len(escala_6))]]
seq3=fazSequencia(nt, f, fator, d, s, senoide)
seq2=somador(seq3,seq2)
f=f0/2; d=dur*2*5; s=sil*2
nt=b1*2*2
ac=[]
for i in xrange(1): # a cada 2 tempos
ac+=fazAcorde([0,7,14,21,28,35,42,49,56,63,70,77,84], f, fator, d, s, senoide)
ac+=[0]*int((d+s)*44100)
seq2=somador(seq2,ac)
seq+=seq2
################
#### Gravando em disco
smin=min(seq); smax=max(seq)
seq= [(-.5+(i-smin)/(smax-smin)) for i in seq] # normalizando
sound = wave.open('musica.wav','w')
sound.setframerate(44100)
sound.setsampwidth(2) # Always 16bit/sample (2 bytes)
sound.setnchannels(1) # Mono
sonic_vector=[i*(2**15-1) for i in seq] #signed 16 bit
sound.writeframes(struct.pack('h'*len(sonic_vector),*[int(i) for i in sonic_vector]))
sound.close()
print "arquivo musica.wav gravado"
# TODO
# implementar sequencia de durações e sequencia de intensidades
# implementar envelope
##########################################
Revise this Paste