import oil import wave import pickle from array import array import struct import sys def dv(v, d): if v < 0: return -(-v / d) else: return v / d def aorn(pm, v): if pm < 0 and v > 0: return v + 1 elif pm > 0 and v < 0: return v - 1 else: return v def moritsukeru(l): print "moritsuke-ing" l_len = len(l) a_thang = 50000 a_point = l_len - a_thang okay = 1 dr = 1 cr = 0 oe = 0 astereo = [0, 0] for f in range(2, l_len): oe = f % 2 cv = astereo[oe] + l[f] if cv < -32768 or cv > 32767: if okay == 0: cv = astereo[oe] + aorn(astereo[oe], dv(l[f], dr)) if okay == 1 or cv < -32768 or cv > 32767: if l[f] < 0: cr = -32768 - astereo[oe] else: cr = 32767 - astereo[oe] if cr == 0: l[f] = astereo[oe] else: dr = 1 + l[f] / cr if (astereo[oe] < 0 and l[f] < 0) or (astereo[oe] > 0 and l[f] > 0): dr = dr + 1 + l[f] % 3 l[f] = astereo[oe] + aorn(astereo[oe], dv(l[f], dr)) else: l[f] = cv okay = 0 else: l[f] = cv okay = 1 if f > a_point: l[f] = dv(l[f] * ((a_thang - 1) - (f - a_point)), (a_thang - 1)) astereo[oe] = l[f] if astereo[oe] < -32768 or astereo[oe] > 32767: print "somethang es wrong", astereo def l2h(thang): h_thang = array('h') l_thang = len(thang) for gas in range(l_thang): h_thang.append(thang[gas]) # h_thang.append(thang[gas] - 32768) return h_thang def squeeze(v): m = v / 65536 if m % 2 == 0: v = v % 65536 else: v = 65535 - (v % 65536) return v def incasefart(n, m, lr): m_len = len(m) c = lr % m_len if n[m[c]].i_is == "fart": print "it es a fart" n[m[c]].reincarnate(lr) def memchange(n, m, cs, r, l): n_len = len(n) m_len = len(m) w = r % m_len c = (w + 1 + l % (n_len - 1)) % n_len ok = 1 for i in m: if i == c: ok = 0 print "not changing" break if ok == 1: if w == 1: # if n[m[w]].i_is == "fart" and n[c].i_is == "nuclear": # cs[0] = 0 # elif n[m[w]].i_is == "nuclear" and n[c].i_is == "fart": # cs[0] = 1 # else: # cs[0] = 2 if cs[0] == 3 and n[c].i_is == "nuclear": cs[0] = 0 elif cs[0] == 1: cs[0] = 2 m[w] = c print "member", w, "became", c def sex(n, m, r, l): m_len = len(m) mn = r % m_len wn = (mn + 1 + l % (m_len - 1)) % m_len print mn, "fuck", wn n[m[mn]].fuck(n[m[wn]]) # universe = [entrance, exit] def will_it_exist(l, u): if l[1] < u[0] or l[1] + l[2] > u[1]: print "no en este universe" return "" else: return "i"+str(l[0]) + " " + "%12.6f" % l[1] + " " + "%12.6f" % l[2] + " " + "%12.6f" % l[3] + " " + "%12.6f" % l[4] + "\n" def cs(s, d, c, l, m, w): sd = s + d m.fuck(w) start = s for i in range(c): w.fuck(m) sm = m.sing() for p in sm[1]: tstrt = start + p[0] # if tstrt < sd: if tstrt < sd and (tstrt + p[1]) < sd: l.append([sm[0], tstrt, p[1], p[2] / c, p[3]]) start = start + sm[1][0][0] # line = [inst, start, dur, amp, freq] track = [] sco = "" how_many_samples = 44100 * 120 #how_many_samples = 44100 * 60 #nuc = [ nuc = [ oil.Fart(), #nuc = [ pickle.load(open("sa")), # pickle.load(open("sa")), pickle.load(open("ri")), pickle.load(open("ga")), # pickle.load(open("ma")), # pickle.load(open("pa")), # pickle.load(open("da")), # pickle.load(open("ni")), #nuc = [ oil.Nuclear0(), oil.Nuclear0(), oil.Nuclear1(), oil.Nuclear2(), oil.Nuclear3(), oil.Nuclear4(), oil.Nuclear5(), oil.Nuclear6(), oil.Nuclear7(), oil.Nuclear8(), oil.Nuclear9()] # ] n_len = len(nuc) man = oil.Oil() woman = oil.Oil() members = [0, 1, 2] mixer = [[50,20], [30,30], [20,50]] pls = 0 mns = 1 lorr = 0 csounder = [0, 0, 0] # [0=nuc 1=fart(make sco) 2=done, start, dur] silence = [0, [77777, 333333], [7000, 77777], 0] # [onoff silent=1 , [shortest0, longest0], [shortest1, longest1], count] lines = [] filter = 35753 filter2 = 111111 if nuc[members[1]].i_is == "nuclear": csounder[0] = 0 csounder[1] = 0.0 else: csounder[0] = 2 for f in range(how_many_samples): n0 = nuc[members[0]].sing() if nuc[members[1]].i_is == "fart" or f % 2 == 0: n1 = nuc[members[1]].sing() n2 = nuc[members[2]].sing() right = (mixer[0][0] * n0 + mixer[1][0] * n1 + mixer[2][0] * n2) / 100 left = (mixer[0][1] * n0 + mixer[1][1] * n1 + mixer[2][1] * n2) / 100 if silence[0] == 1: track.append(0) track.append(0) else: track.append(right) track.append(left) silence[3] = silence[3] + 1 fr = f + right fl = f + left flr = fr + fl chz = flr % filter2 if (chz == 55 and silence[0] == 1 and silence[3] > silence[2][0]) or (silence[0] == 1 and silence[3] > silence[2][1]) or (chz == 77 and silence[0] == 0 and silence[3] > silence[1][0]) or (silence[0] == 0 and silence[3] > silence[1][1]): silence[0] = (silence[0] + 1) % 2 silence[3] = 0 if silence[0] == 1: print "goin silent" else: print "goin active" if fr % filter == 212: memchange(nuc, members, csounder, fr, fl) elif fl % filter == 213: memchange(nuc, members, csounder, fl, fr) elif fr % filter == 214: incasefart(nuc, members, fr) elif fl % filter == 215: incasefart(nuc, members, fl) elif fr % filter == 5434: sex(nuc, members, fr, fl) elif fl % filter == 7434: sex(nuc, members, fl, fr) pls = (right + left) % 3 mns = (pls + 1 + right % 2) % 3 lorr = left % 2 if mixer[mns][lorr] > 0: mixer[mns][lorr] = mixer[mns][lorr] - 1 mixer[pls][lorr] = mixer[pls][lorr] + 1 if csounder[0] == 0: csounder[1] = f / 44100.0 csounder[0] = 1 elif csounder[0] == 2: csounder[2] = (f / 44100.0) - csounder[1] if csounder[2] < 0.1: print "too short por csound", csounder nuc[members[1]].fuck(woman) man.fuck(nuc[members[0]]) man.fuck(nuc[members[2]]) elif csounder[2] < 1.7: print "short csound", csounder lines = [] sw = woman.sing() for p in sw[1]: lines.append([sw[0], csounder[1], csounder[2], p[2], p[3]]) for line in lines: sco = sco + will_it_exist(line, [csounder[1], csounder[1] + csounder[2]]) else: print "long csound", csounder lines = [] cs(csounder[1], csounder[2], 5, lines, man, woman) for line in lines: sco = sco + will_it_exist(line, [csounder[1], csounder[1] + csounder[2]]) csounder[0] = 3 if f % 44100 == 0: print f, "/", how_many_samples, mixer moritsukeru(track) track_thang = l2h(track) a_thang = wave.open("noiz.wav", "w") a_thang.setnchannels(2) a_thang.setsampwidth(2) a_thang.setframerate(44100) a_thang.writeframes(track_thang.tostring()) a_thang.close() sco = sco + "e" + "\n" f = open("oil.sco","w") f.writelines(sco) f.close() #print "dumping newone" #pickle.dump(nuc[0],open("newone","w")) #print "dumping sa" #pickle.dump(sa,open("sa","w")) #print "dumping ri" #pickle.dump(ri,open("ri","w")) #print "dumping ga" #pickle.dump(ga,open("ga","w")) #print "dumping ma" #pickle.dump(ma,open("ma","w")) #print "dumping pa" #pickle.dump(pa,open("pa","w")) #print "dumping da" #pickle.dump(da,open("da","w")) #print "dumping ni" #pickle.dump(ni,open("ni","w")) print "done"