class Sequencer(object): def __init__(self): self.tracks = dict() self.sequences = dict() self.mixer = Mixer() def add_track(self, track_id, track_name, input_component, output_component): output_component = Amplifier(source=output_component, gain=Config.MaxGain, attenuate=0.5) self.tracks[track_id] = (track_name, input_component, output_component) self.mixer.add_track(track_id, track_name, output_component) self.sequences[track_id] = list() def add_sequence(self, track_id, sequence_data): self.sequences[track_id].extend(sequence_data) def get_value(self, tick): for (track_id, sequence_data) in self.sequences.items(): if tick > sequence_data[0][2]: del sequence_data[0] if len(sequence_data) == 0: return None (attenuate, frequency, off_tick) = sequence_data[0] (track_name, input_component, output_component) = self.tracks[track_id] input_component.frequency = frequency output_component.attenuate = attenuate return self.mixer.get_value(tick)
class Tone(object): def __init__(self): self.osc1 = SquareWaveOscillator() self.osc2 = SquareWaveOscillator() self.mixer = Mixer() self.mixer.add_track(0, "base_tone", Gate(source=self.osc1, state=(True, False))) self.mixer.add_track(1, "detuned_tone", Gate(Inverter( source=FrequencyModulator( source=self.osc2, delta=ConstantValueGenerator(2))), state=(False, True))) def get_value(self, tick): return self.mixer.get_value(tick) def get_frequency(self): return self.osc1.frequency def set_frequency(self, value): self.osc1.frequency = value self.osc2.frequency = value frequency = property(get_frequency, set_frequency)
class Sequencer(object): def __init__(self): self.tracks = dict() self.sequences = dict() self.mixer = Mixer() def add_track(self, track_id, track_name, input_component, output_component): output_component = Amplifeir(source=output_component, gain=Config.MaxGain, attenuate=0.5) self.tracks[track_id] = (track_name, input_component, output_component) self.mixer.add_track(track_id, track_name, output_component) self.sequences[track_id] = list() def add_sequence(self, track_id, sequence_data): self.sequences[track_id].extend(sequence_data) #print "Track: " + str(self.sequences[track_id]) def get_value(self, tick): #print "@get_value: " + str(self.sequences) for (track_id, sequence_data) in self.sequences.items(): if tick > sequence_data[0][2]: del sequence_data[0] if len(sequence_data) == 0: return None (attenuate, frequency, off_tick) = sequence_data[0] ##print "@get_value: sequence = " + str(frequency) (track_name, input_component, output_component) = self.tracks[track_id] input_component.frequency = frequency output_component.attenuate = attenuate return self.mixer.get_value(tick) #def debug_args(self): #print "tracks = " + str(self.tracks) #print "sequences = " + str(self.sequences) ##print "mixer = " + str(mixer)
class Tone(object): # ステレオコーラス def __setattr__(self, name, value): if name == "frequency": self.osc1.frequency = value self.osc2.frequency = value else: object.__setattr__(self, name, value) def __init__(self): self.osc1 = SquareWaveOscillator() self.osc2 = SquareWaveOscillator() mod_osc2 = Inverter(source=FrequencyModulator(source=self.osc2, delta=ConstantValueGenerator(2.0))) self.mixer = Mixer() self.mixer.add_track(0, "base_tone", Gate(source=self.osc1, state=(True, False))) self.mixer.add_track(1, "detuned_tone", Gate(source=mod_osc2, state=(False, True))) def get_value(self, tick): return self.mixer.get_value(tick)