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 demo_play_combo(): # demonstration of the optional parameters available using # the play function. To read about these, take a look at the # spreadsheet of documentation that I made for you: # https://docs.google.com/spreadsheets/d/1AlzpwvzsPou_gr532h8XKFWWlJY8l7QAfWFU2XXVgvI/edit#gid=860514818 psonic.use_synth(psonic.SUBPULSE) play(48, amp=0.2, sustain=2, attack=1, decay=1)
def play_c_scale_builtin(): # so you don't have to build your scales manually scale_C2 = psonic.scale(psonic.C2, psonic.MAJOR) scale_C3 = psonic.scale(psonic.C3, psonic.MAJOR) scale_C4 = psonic.scale(psonic.C4, psonic.MAJOR) print('C2 Scale:', scale_C2) print('C3 Scale:', scale_C3) print('C4 Scale:', scale_C4) # listening demo: psonic.use_synth(psonic.PIANO) play(scale_C3[0]) sleep(0.5) play(scale_C3[1]) sleep(0.5) play(scale_C3[2]) sleep(0.5) play(scale_C3[3]) sleep(0.5) play(scale_C3[4]) sleep(0.5) play(scale_C3[5]) sleep(0.5) play(scale_C3[6]) sleep(0.5) play(scale_C3[7])
def sonic_pi(freq): import psonic psonic.use_synth(psonic.PULSE) while True: with psonic.Fx(psonic.REVERB): print(freq.value) psonic.play(freq.value, release=0.2) sleep(0.08)
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 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 demo_play_fadeout(): # controls the time it takes to fade-out time psonic.use_synth(psonic.SUBPULSE) play(48) # default sleep(1) play(50, release=0.1) # fade out sleep(1) play(52, release=0.2) # longer fade in sleep(1) play(53, release=0.6) # even longer fade in sleep(1)
def demo_play_fadein(): # controls the fade-in time psonic.use_synth(psonic.SUBPULSE) play(48) # default sleep(1) play(50, attack=0.5) # fade in sleep(1) play(52, attack=1) # longer fade in sleep(1) play(53, attack=2) # even longer fade in sleep(1)
def riff_3(tempo: float = 60): speed = 60 / tempo psonic.use_synth(psonic.PROPHET) sc = psonic.scale(psonic.E2, psonic.MINOR) s = random.choice([0.125 * speed, 0.25 * speed, 0.5 * speed]) for i in range(8): r = random.choice([0.125, 0.25, 1, 2]) n = random.choice(sc) co = random.randint(30, 100) psonic.play(n, release=r, cutoff=co) psonic.sleep(s)
def demo_play_sustain(): # controls how long the note lasts psonic.use_synth(psonic.SUBPULSE) # select a synthesizer: play(48) # default sleep(1) play(50, sustain=1) # a little longer sleep(1) play(52, sustain=2) # a little longer sleep(1) play(53, sustain=4.5) # even longer sleep(1)
def play_happy_birthday(): psonic.use_synth(psonic.PIANO) play(HAPPY_BIRTHDAY[0]) sleep(0.25) play(HAPPY_BIRTHDAY[1]) sleep(0.25) play(HAPPY_BIRTHDAY[2]) sleep(0.25) play(HAPPY_BIRTHDAY[3]) sleep(0.25) play(HAPPY_BIRTHDAY[4]) sleep(0.25) play(HAPPY_BIRTHDAY[5]) sleep(0.25) play(HAPPY_BIRTHDAY[6]) sleep(0.25) play(HAPPY_BIRTHDAY[7]) sleep(0.25) play(HAPPY_BIRTHDAY[8]) sleep(0.25) play(HAPPY_BIRTHDAY[9]) sleep(0.25) play(HAPPY_BIRTHDAY[10]) sleep(0.25) play(HAPPY_BIRTHDAY[11]) sleep(0.25) play(HAPPY_BIRTHDAY[12]) sleep(0.25) play(HAPPY_BIRTHDAY[13]) sleep(0.25) play(HAPPY_BIRTHDAY[14]) sleep(0.25) play(HAPPY_BIRTHDAY[15]) sleep(0.25) play(HAPPY_BIRTHDAY[16]) sleep(0.25) play(HAPPY_BIRTHDAY[17]) sleep(0.25) play(HAPPY_BIRTHDAY[18]) sleep(0.25) play(HAPPY_BIRTHDAY[19]) sleep(0.25) play(HAPPY_BIRTHDAY[20]) sleep(0.25) play(HAPPY_BIRTHDAY[21]) sleep(0.25) play(HAPPY_BIRTHDAY[22]) sleep(0.25) play(HAPPY_BIRTHDAY[23]) sleep(0.25) play(HAPPY_BIRTHDAY[24]) sleep(0.25)
def play_super_mario(): # play the first 24 notes of Super Mario Brothers theme music # audio demo: https://vimeo.com/85685770 psonic.use_synth(psonic.PIANO) play(SUPER_MARIO_NOTES_FIRST_24[0]) sleep(0.1) play(SUPER_MARIO_NOTES_FIRST_24[1]) sleep(0.1) play(SUPER_MARIO_NOTES_FIRST_24[2]) sleep(0.1) play(SUPER_MARIO_NOTES_FIRST_24[3]) sleep(0.1) play(SUPER_MARIO_NOTES_FIRST_24[4]) sleep(0.1) play(SUPER_MARIO_NOTES_FIRST_24[5]) sleep(0.1) play(SUPER_MARIO_NOTES_FIRST_24[6]) sleep(0.1) play(SUPER_MARIO_NOTES_FIRST_24[7]) sleep(0.1) play(SUPER_MARIO_NOTES_FIRST_24[8]) sleep(0.1) play(SUPER_MARIO_NOTES_FIRST_24[9]) sleep(0.1) play(SUPER_MARIO_NOTES_FIRST_24[10]) sleep(0.1) play(SUPER_MARIO_NOTES_FIRST_24[11]) sleep(0.1) play(SUPER_MARIO_NOTES_FIRST_24[12]) sleep(0.1) play(SUPER_MARIO_NOTES_FIRST_24[13]) sleep(0.1) play(SUPER_MARIO_NOTES_FIRST_24[14]) sleep(0.1) play(SUPER_MARIO_NOTES_FIRST_24[15]) sleep(0.1) play(SUPER_MARIO_NOTES_FIRST_24[16]) sleep(0.1) play(SUPER_MARIO_NOTES_FIRST_24[17]) sleep(0.1) play(SUPER_MARIO_NOTES_FIRST_24[18]) sleep(0.1) play(SUPER_MARIO_NOTES_FIRST_24[19]) sleep(0.1) play(SUPER_MARIO_NOTES_FIRST_24[20]) sleep(0.1) play(SUPER_MARIO_NOTES_FIRST_24[21]) sleep(0.1) play(SUPER_MARIO_NOTES_FIRST_24[22]) sleep(0.1) play(SUPER_MARIO_NOTES_FIRST_24[23]) sleep(0.1)
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 demo_play_volume_adjust(): # controls how loud the note lasts psonic.use_synth(psonic.SUBPULSE) play(48) # default sleep(1) play(50, sustain_level=0.2) # soft sleep(1) play(52, sustain_level=0.4) # a little louder sleep(1) play(53, sustain_level=0.6) # even louder sleep(1) play(55, sustain_level=1.6) # even louder sleep(1)
def sonic_pi(freq): psonic.use_synth(psonic.PULSE) while True: with psonic.Fx(psonic.REVERB): if instrument.value == 0: psonic.use_synth(psonic.PULSE) if instrument.value == 1: psonic.use_synth(psonic.SAW) if instrument.value == 2: psonic.use_synth(psonic.FM) psonic.play(freq.value, release=0.2) sleep(0.08)
def play_c_scale(): # MIDI Notes available here: # https://docs.google.com/spreadsheets/d/1AlzpwvzsPou_gr532h8XKFWWlJY8l7QAfWFU2XXVgvI/edit#gid=0 psonic.use_synth(psonic.PIANO) play(48) # these are MIDI note numbers sleep(0.5) play(50) sleep(0.5) play(52) sleep(0.5) play(53) sleep(0.5) play(55) sleep(0.5) play(57) sleep(0.5) play(59) sleep(0.5) play(60) sleep(0.5) play(59) sleep(0.5) play(57) sleep(0.5) play(55) sleep(0.5) play(53) sleep(0.5) play(52) sleep(0.5) play(50) sleep(0.5) play(48) # play arpeggio (w/o sleep functions, notes play simultaneously): sleep(1) play(48) play(52) play(55) play(60) sleep(1)
def make_song(): # do something interesting here with sound: 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.sample(psonic.DRUM_CYMBAL_SOFT) psonic.sleep(1) psonic.play(67) psonic.sample(psonic.DRUM_BASS_HARD) psonic.sleep(1) # ...
def switch_synth(selected_text): print(selected_text) if selected_text == available_synths[0]: psonic.use_synth(psonic.PIANO) elif selected_text == available_synths[1]: psonic.use_synth(psonic.PROPHET) elif selected_text == available_synths[2]: psonic.use_synth(psonic.SAW)
def switch_synth(selected_text): print(selected_text) # set synth according to request: if selected_text == available_synths[0]: psonic.use_synth(psonic.PIANO) elif selected_text == available_synths[1]: psonic.use_synth(psonic.PROPHET) elif selected_text == available_synths[2]: psonic.use_synth(psonic.SAW) psonic.play(55)
import psonic import threader psonic.use_synth(psonic.BEEP) def low_part(tempo): psonic.play([55, 59]) psonic.sleep(1) psonic.play_pattern_timed([57], 0.5) psonic.play_pattern_timed([59], 1.5) psonic.play_pattern_timed([60], 1.5) psonic.play_pattern_timed([59], 1.5) psonic.play_pattern_timed([57], 1.5) #b5 psonic.play_pattern_timed([55], 1.5) #b6 psonic.play_pattern_timed([62, 59, 55, 62], 0.5) #b7 psonic.play_pattern_timed([50, 60, 59, 57], 0.25) def high_part(tempo): # TODO: the tempo should be controlled by the tempo variable psonic.play_pattern_timed([74], 0.5) psonic.play_pattern_timed([67, 69, 71, 72], 0.25) psonic.play_pattern_timed([74, 67, 67], 0.5) psonic.play_pattern_timed([76], 0.5) psonic.play_pattern_timed([72, 74, 76, 78], 0.25) psonic.play_pattern_timed([79, 67, 67], 0.5) psonic.play_pattern_timed([72], 0.5) psonic.play_pattern_timed([74, 72, 71, 69], 0.25) psonic.play_pattern_timed([71], 0.5) psonic.play_pattern_timed([72, 71, 69, 67], 0.25)
# 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)
import psonic c_arpeggio = psonic.scale(psonic.C2, psonic.MAJOR, num_octaves=4) print(c_arpeggio) psonic.use_synth(psonic.PIANO) previous_note = 1000000 start = len(c_arpeggio) - 1 end = -1 # -1 b/c range function does not include the endpoint for i in range(start, end, -1): print(i) # for debugging note = c_arpeggio[i] if note == previous_note: continue psonic.play(note) psonic.sleep(0.2) previous_note = note
def make_song(): # do something interesting here with sound: psonic.use_synth(psonic.PIANO) sample(psonic.DRUM_BASS_HARD) play(60)
def play_song(notes, speed): psonic.use_synth(psonic.PIANO) for note in notes: psonic.play(note) psonic.sleep(speed)
import psonic import random e = psonic.chord(psonic.E3, psonic.MINOR) print(e) # Challenge: Write a 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 psonic.use_synth(psonic.PROPHET) psonic.play(e[0], release=0.6) psonic.sleep(0.5)