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)
def percusstion_test(): bass_base = Subtraction(SineWaveOscillator(frequency=40.0), Amplifier(source=SquareWaveOscillator(frequency=80.0, duty=0.125), gain=1, attenuate=0.075)) bass_drum = Multiplication(bass_base, LFO(oscillator_class=SawWaveOscillator, frequency=1.0, duty=0.5)) snare_drum = Multiplication(NoiseGenerator(frequency=6000.0), LFO(oscillator_class=SawWaveOscillator, frequency=1.0, duty=0.25)) hihat = Multiplication(NoiseGenerator(frequency=44100.0), LFO(oscillator_class=SawWaveOscillator, frequency=4.0, duty=0.25)) mixer = Mixer() mixer.add_track(0, "bus_drum", bass_drum) mixer.add_track(1, "snare_drum", snare_drum) mixer.add_track(2, "hihat", hihat) amplifire = Amplifier(source=mixer, gain=Config.ValueRange[0], attenuate=1.0) sink = WaveFileSink(output_file_name="output.wav") clock = Clock(end=Config.SampleRate * 3) renderer = Renderer(clock=clock, source=amplifire, sink=sink) renderer.do_rendering()
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)
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 chorus_test(): osc1 = SquareWaveOscillator(frequency=440.0) osc2 = Inverter(source=FrequencyModulator(source=osc1, delta=Multiplication( ConstantValueGenerator(2.0), LFO(oscillator_class=SineWaveOscillator, frequency=3.0)))) mixer = Mixer() mixer.add_track(0, "base_tone", Gate(source=osc1, state=(True, False))) mixer.add_track(1, "detuned_tone", Gate(source=osc2, state=(True, True))) amplifire = Amplifier(source=mixer, gain=Config.MaxGain, attenuate=0.75) sink = WaveFileSink(output_file_name="output.wav") clock = Clock(end=Config.SampleRate) renderer = Renderer(clock=clock, source=amplifire, sink=sink) renderer.do_rendering()
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)
def __init__(self): self.tracks = dict() self.sequences = dict() self.mixer = Mixer()
if __name__ == "__main__": # print docstring print(__doc__) # make network object net1 = Network() # feed to reactor i1outlets = {'i1': StreamGen(H2=60, CO2=20)} net1.add_component('I1', Feed(i1outlets)) # mixer for recycle and feed mix1inlets = { 'i1': StreamGen(H2=60, CO2=20), 's11': StreamGen(H2=60, CO2=20, CO=5) } mix1outlets = {'m11': StreamGen()} net1.add_component('M1', Mixer(mix1inlets, mix1outlets)) # methanol reactor TEMP_MEOH = 673 PRESS_MEOH = 37500 r1inlets = {'m11': StreamGen(H2=100, CO2=35, MEOH=5, H2O=5, CO=5)} r1outlets = {'r11': StreamGen()} net1.add_component( 'R1', Reactor(TEMP_MEOH, PRESS_MEOH, r1inlets, r1outlets, MethanolReactor)) # splitter for recycle s1inlets = {'f11': StreamGen(CO2=20, H2=60, CO=5)} s1outlets = {'s11': StreamGen(), 's12': StreamGen()} net1.add_component('S1', Splitter(s1inlets, s1outlets, 0.98, 's11')) # purge outlet purge1inlets = {'s12': StreamGen(CO2=1, CO=1, H2=1)} net1.add_component('Purge1', Removal(purge1inlets))