import random class PianoString: def __init__(self, s, note, i): self.s = s self.basefreq = self.s.note(note) self.primary_gain = 0.4 self.mod = self.s.node() self.node = self.s.node() self.node.setpos(0, -10.0+i, 0, 0) self.node.setbasefreq(0, self.basefreq) self.node.setgain(0, self.primary_gain) self.mod.setbasefreq(0, 10) self.mod.setgain(0, 0.8) self.node.fmsetup(0, self.basefreq, 0.009) self.node.setskew(0, 0.3) self.node.setadsrgain(0, 1) self.node.setadsrsustain(0, 0.2) self.s.wire(self.mod, self.node) self.s.air(self.node, [self.s.left, self.s.right]) def gain(self, starttick, gain): self.node.setgain(starttick, gain) def play(self, starttick, endtick): keyhold_endtick = endtick endtick += self.s.sec(0.3) self.node.adsr(starttick, endtick, self.s.sec(0.03), self.s.sec(0.03), self.s.sec(0.36), keyhold_endtick - starttick, keyhold_endtick - starttick + self.s.sec(0.3)) #self.mod.sine(starttick, endtick) #self.node.fm(starttick, endtick) self.node.sine(starttick, endtick, 0.2) self.node.skewsine(starttick, endtick, 0.3) self.node.square(starttick, endtick, 0.04) self.node.adsr(starttick, endtick, self.s.sec(0.067), self.s.sec(0.07), self.s.sec(0.09), self.s.sec(0.1), self.s.sec(0.2)) self.node.whitenoise(starttick, endtick, 0.01) self.node.triangle(starttick, endtick, 0.2) def playsec(self, start, end): self.play(self.s.sec(start), self.s.sec(end)) notes = 'CDEFGAB' octaves = '345' gamma = [] for o in octaves: for n in notes: gamma.append(n+o) s.setup(s.sec(60)) for i in range(0, len(gamma)): note = gamma[i] S = PianoString(s, note, i) S.playsec(i, i+1.4)