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)
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()
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 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)