Welcome, guest! Login / Register - Why register?
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

Your Name: Code Language: