def controller_riff(tempo=1): psonic.sample(psonic.DRUM_BASS_SOFT) psonic.sleep(tempo)
def riff_7(tempo=1): for i in range(4): psonic.sample(psonic.DRUM_CYMBAL_PEDAL) psonic.sleep(tempo * 0.25)
def riff_3(tempo=1): for i in range(3): psonic.sample(psonic.DRUM_SNARE_SOFT) psonic.sleep(tempo * .25) psonic.sample(psonic.DRUM_SNARE_SOFT)
def riff_5(tempo=2): psonic.sample(psonic.AMBI_LUNAR_LAND) #psonic.sample(psonic.AMBI_DRONE) psonic.sleep(3.99 * tempo) # make the last sleep a little shorter
import psonic import random e = psonic.chord(psonic.E3, psonic.MINOR) print(e) # Challenge: Write a while loop that randomly plays a note from the # e minor cord, for either 0.25, or 0.5 length of time # after it plays 30 notes it should stop while True: psonic.use_synth(psonic.PROPHET) psonic.play(random.choice(e), release=0.6) psonic.sleep(random.choice([0.25, 0.5]))
def riff_2(tempo=1): psonic.sample(psonic.DRUM_CYMBAL_OPEN) psonic.sleep(tempo * 0.99)
def play_notes(notes, s=0.15): for n in notes: d = 0.3 + random.random() ps.play(70 + n, release=d) t = ps.random.choice([0.125, 0.25, 0, 0.2]) ps.sleep(t)
import random import psonic # Challenge: write a loop that plays 128 beats, using the # psonic.DRUM_BASS_HARD sample, that are each at a different # pitch (from 1 to 10). Note that pitch is controlled by the "rate" keyword argument. psonic.sample(psonic.DRUM_BASS_HARD, rate=1) psonic.sleep(0.125) psonic.sample(psonic.DRUM_BASS_HARD, rate=5) psonic.sleep(0.125) psonic.sample(psonic.DRUM_BASS_HARD, rate=8) psonic.sleep(0.125)
def fourth_cycle(speed): print('fourth cycle...') for i in range(8): psonic.sample(psonic.DRUM_TOM_HI_HARD, rate=(i*0.5+1)) # rate raises the pitch psonic.sleep(0.125 * speed)
# turns on the Blinkt LEDs with relevant colour def show_led(led_num, led_colour, delay): r, g, b = led_colour blinkt.clear() blinkt.set_brightness(0.1) blinkt.set_pixel(led_num, r, g, b) blinkt.show() time.sleep(d) # order of synth notes being played in the sequence notes = [psonic.G4, psonic.A4, psonic.F4, psonic.F3, psonic.C4] # limited by the 8 pixels so mapping synth notes to index # FXCDEFGA # 01234567 order = [6, 7, 5, 0, 2] # overall loop for d in delays: # iterate through notes in synth sequence for i, note in enumerate(notes): psonic.use_synth(psonic.SAW) psonic.play(note) psonic.sleep(d) show_led(led_num=order[i], led_colour=colours[i], delay=d)
def last_beat_default(speed): print('last beat default...') psonic.sample(psonic.DRUM_SNARE_HARD) psonic.sleep(0.25 * speed)
import psonic speed = 1.5 counter = 0 while counter < 8: # fourth cycle if counter == 3: for i in range(8): psonic.sample(psonic.DRUM_TOM_HI_HARD, rate=(i * 0.5 + 1)) # rate raises the pitch psonic.sleep(0.125 * speed) counter += 1 continue # default: psonic.sample(psonic.DRUM_BASS_HARD, rate=1) psonic.sleep(.25 * speed) psonic.sample(psonic.DRUM_SNARE_HARD) psonic.sleep(.125 * speed) psonic.sample(psonic.DRUM_BASS_HARD, rate=1) psonic.sleep(.25 * speed) psonic.sample(psonic.DRUM_BASS_HARD, rate=1) psonic.sleep(.125 * speed) if counter == 7: # last beat: psonic.sample(psonic.DRUM_CYMBAL_OPEN) elif counter % 2 == 1: # alternate second cycle ending psonic.sample(psonic.DRUM_TOM_LO_HARD) psonic.sleep(0.125 * speed)
def tick_sleep(self): beats_per_sec = float(self.bpm / 60) tick_len = 1 / (self.ticks_per_beat * beats_per_sec) sleep(tick_len)
def play_song(notes, speed): psonic.use_synth(psonic.PIANO) for note in notes: psonic.play(note) psonic.sleep(speed)
def riff_2(tempo: float = 60): speed = 60 / tempo for i in range(3): psonic.sample(psonic.DRUM_HEAVY_KICK, rate=0.8) psonic.sleep(speed * 0.5) psonic.sample(psonic.DRUM_HEAVY_KICK, rate=0.8)
SUPER_MARIO_NOTES = [ 76, 76, 76, 72, 76, 79, 67, 72, 67, 64, 69, 71, 70, 69, 67, 76, 79, 81, 77, 79, 76, 72, 74, 71, 79, 78, 77, 75, 76, 68, 69, 72, 69, 72, 74, 79, 78, 77, 75, 76, 84, 79, 78, 77, 75, 76, 68, 69, 72, 69, 72, 74, 75, 74, 72, 72, 74, 76, 72, 69, 67, 72, 74, 76, 72, 74, 76, 72, 69, 67, 76, 72, 76, 79, 67, 76, 72, 67, 68, 69, 77, 69, 71, 81, 79, 77, 76, 72, 69, 67, 76, 72, 67, 68, 69, 77, 69, 71, 77, 76, 74, 72 ] psonic.use_synth(psonic.PIANO) psonic.play(HAPPY_BIRTHDAY[0]) psonic.sleep(0.25) psonic.play(HAPPY_BIRTHDAY[1]) psonic.sleep(0.25) psonic.play(HAPPY_BIRTHDAY[2]) psonic.sleep(0.25) psonic.play(HAPPY_BIRTHDAY[3]) psonic.sleep(0.25) psonic.play(HAPPY_BIRTHDAY[4]) psonic.sleep(0.25) psonic.play(HAPPY_BIRTHDAY[5]) psonic.sleep(0.25) psonic.play(HAPPY_BIRTHDAY[6]) psonic.sleep(0.25) psonic.play(HAPPY_BIRTHDAY[7]) psonic.sleep(0.25) psonic.play(HAPPY_BIRTHDAY[8])
def play_base_beat(tempo: float = 60, sample=psonic.DRUM_BASS_SOFT): speed = 60 / tempo for i in range(2): if sample: psonic.sample(sample) psonic.sleep(speed)
import psonic c_arpeggio = psonic.scale(psonic.C2, psonic.MAJOR, num_octaves=4) print(c_arpeggio) psonic.use_synth(psonic.PIANO) # play ascending arpeggio: counter = 0 for note in c_arpeggio: if counter % 8 in [0, 2, 4]: psonic.play(note) psonic.sleep(0.2) counter += 1 # play top note: psonic.play(c_arpeggio[-1]) psonic.sleep(0.2)
# To get this program to work, you must do three things: # 1. Install the Python psonic module using PIP: # pip install python-sonic # 2. Install the Sonic Pi music program, downloadable at: # https://sonic-pi.net/ # 3. Make sure that Sonic Pi (the music program) is running import psonic # Note: psonic allows us to pass commands into Sonic Pi programmatically psonic.use_synth(psonic.PIANO) psonic.play(76) psonic.sleep(0.25) psonic.play(76) psonic.sleep(0.5) psonic.play(76) psonic.sleep(0.5) psonic.play(72) psonic.sleep(0.25) psonic.play(76) psonic.sleep(0.5) psonic.play(79) psonic.sleep(1) psonic.play(67) psonic.sleep(1)