def synthwave_offbeat_bass(): bar_number = Metronome().bar_number % 4 notes = [sp.C1, sp.C1, sp.Ds1, sp.As0] Metronome().beat_sleep(wait_len=1 / 4) for _ in range(3): sp.use_synth(sp.TB303) octave_notes = [notes[bar_number - 1], notes[bar_number - 1] + 12] sp.play(octave_notes, sustain=0.1, release=0.1, amp=0.9, cutoff=110) Metronome().beat_sleep(wait_len=1 / 4)
def simple_four_chords(): bar_number = Metronome().bar_number % 4 chords = [ sp.chord(sp.C3, sp.MINOR), sp.chord(sp.C3, sp.MINOR), sp.chord(sp.Ds3, sp.MAJOR), sp.chord(sp.As2, sp.MAJOR), ] sp.use_synth(sp.TB303) sp.play(chords[bar_number - 1], amp=1.4, release=1.2) Metronome().beat_sleep(wait_len=4)
def play_clip(self): Metronome().wait_for_tick() Metronome().beat_sleep(self.clip.beat_offset) if self.id == "perform": while True: while not callable(self.clip.func): Metronome().wait_for_tick() self.clip.func() self.clip.func = None else: while self.enabled: if callable(self.clip.func): self.clip.func()
def whimsical_melody_lead(): notes = [ # bar 1 (None, 1), (sp.Ds4, 1), (sp.C4, 1), (sp.As4, 1 / 4), (sp.C4, 3 / 4), # bar 2 (sp.C4, 1), (sp.Ds4, 1), (sp.C4, 1), (None, 1), # bar 3 (None, 1), (sp.Ds4, 1), (sp.C4, 1), (sp.As4, 1 / 4), (sp.C4, 3 / 4), # bar 4 (sp.C4, 1), (sp.Ds4, 1), (sp.C4, 1), (sp.As4, 1), ] for note in notes: sp.use_synth(sp.PLUCK) sp.play(note[0], amp=2) Metronome().beat_sleep(note[1])
def three_quarter_notes_descending_arp(): notes = sp.scale(root_note=sp.C5, scale_mode=sp.MINOR_PENTATONIC, num_octaves=1) for i in range(3): sp.use_synth(sp.SINE) sp.play(notes[-(i + 1)], release=0.1, amp=0.5) Metronome().beat_sleep(wait_len=0.25)
def __init__(self, bpm=120, ticks_per_beat=4): self.metronome = Metronome(bpm, ticks_per_beat) self.trigger_events = dict() self.kick = Track("kick") self.snare = Track("snare") self.perc = Track("perc") self.sample = Track("sample") self.bass = Track("bass") self.lead = Track("lead") self.arp = Track("arp") self.chord = Track("chord") self.perform = Track("perform") # Perform is a 'hot' track self.perform.enable() self.all_tracks = [ self.kick, self.snare, self.perc, self.sample, self.bass, self.lead, self.arp, self.chord, self.perform ]
class Sequencer: def __init__(self, bpm=120, ticks_per_beat=4): self.metronome = Metronome(bpm, ticks_per_beat) self.trigger_events = dict() self.kick = Track("kick") self.snare = Track("snare") self.perc = Track("perc") self.sample = Track("sample") self.bass = Track("bass") self.lead = Track("lead") self.arp = Track("arp") self.chord = Track("chord") self.perform = Track("perform") # Perform is a 'hot' track self.perform.enable() self.all_tracks = [ self.kick, self.snare, self.perc, self.sample, self.bass, self.lead, self.arp, self.chord, self.perform ] def start(self): while self.metronome.is_active: self.metronome.tick() print(self.metronome.tick_tuple) if self.metronome.tick_tuple in self.trigger_events: func = self.trigger_events[self.metronome.tick_tuple] if callable(func): func() self.metronome.cue() self.metronome.tick_sleep() def enable_tracks(self, tracks_to_enable, exclusive=False): for t in self.all_tracks: if (isinstance(tracks_to_enable, list) and t in tracks_to_enable) or (t == tracks_to_enable): t.enable() elif exclusive: t.disable() def disable_tracks(self, tracks_to_disable, exclusive=False): for t in self.all_tracks: if (isinstance(tracks_to_disable, list) and t in tracks_to_disable) or (t == tracks_to_disable): t.disable() elif exclusive: t.enable() def stop(self): for t in self.all_tracks: t.disable() def register_event(self, func, bar, beat=1, tick=1): self.trigger_events[(bar, beat, tick)] = func def set_length(self, bars, beats=0, ticks=0): ticks_in_bars = (bars * self.metronome.beats_per_bar * self.metronome.ticks_per_beat) ticks_in_beats = (beats * self.metronome.ticks_per_beat) total_ticks = ticks_in_bars + ticks_in_beats + ticks + 1 self.metronome.stop_at(total_ticks)
def quiet_kick(): sp.sample(sp.BD_HAUS, amp=1.5) Metronome().beat_sleep(1)
def four_to_the_floor(): sp.sample(sp.BD_HAUS, amp=2.5) Metronome().beat_sleep(1)
def vinyl_hiss(): sp.sample(sp.VINYL_HISS, rate=7, amp=3) Metronome().beat_sleep(wait_len=2)
def one_beat_hi_hat(): sp.sample(sp.DRUM_CYMBAL_CLOSED, amp=2.5) Metronome().beat_sleep(wait_len=1)
def quarter_note_closed_cymbals(): sp.sample(sp.DRUM_CYMBAL_CLOSED, amp=2.5) Metronome().beat_sleep(wait_len=1 / 4)
def two_beat_snare(): if Metronome().beat_number % 2 == 0: sleep(0.005) sp.sample(sp.SN_DUB, amp=2) Metronome().beat_sleep(wait_len=1)