def __init__(self, release_time=0.1, release_order=0.75, duration=None): Generator.__init__(self) self.release_time = t2f(release_time) self.release_order = release_order self.release_frame = float('inf') self.allow_release = (duration is None) if duration: self.release_frame = t2f(duration) - self.release_time
def sample(self, start, duration, loop=False, speed=1.0): start_frame = t2f(start) num_frames = t2f(duration) if (start_frame, num_frames) not in self.data_cache: self.wave_reader.set_pos(start_frame) self.data_cache[(start, num_frames)] = self.wave_reader.read(num_frames) data = self.data_cache[(start_frame, num_frames)] return Sampler.Sample(data, self.num_channels, loop, speed)
def add(self, gen, time=None): if time is None: frame = self.frame else: frame = t2f(time) self._length_cache = max(self._length_cache, gen.length() + frame) if self.num_gens < self.max_size or self.max_size == 0: self.num_gens += 1 self._append_gen(frame, gen)
def _generate(self, frame_count): domain = np.arange(self.frame, self.frame + frame_count, dtype=np.float32) conditions = [] functions = [] init = self.initial start = 0 for (dest, dur, order) in self.steps: dur = t2f(dur) conditions.append((domain >= start) * (domain < start + dur)) functions.append(self.create_exp(init, dest, start, dur, order)) start += dur init = dest conditions.append(domain >= start) functions.append(lambda x: init) return np.piecewise(domain, conditions, functions)
def set_duration(self, duration): self.release_frame = t2f(duration)
def __init__(self, duration): Generator.__init__(self) self.duration = t2f(duration)
def _append_gen(self, frame, gen): try: self._generators.put((t2f(frame), gen), False) except Full: print 'Too many generators to append another' return