Adafruit_Learning_System_Gu.../Blues_Playground/code.py
2022-02-23 13:10:19 -05:00

92 lines
2.8 KiB
Python

# SPDX-FileCopyrightText: 2018 Anne Barela for Adafruit Industries
#
# SPDX-License-Identifier: MIT
# Blues Playground Instrument
# 2018-06-19 v03
import time
from adafruit_circuitplayground.express import cpx
# lists
drums = [ # startup and drum sound files
"chime.wav",
"kick.wav",
"snare.wav",
"hat.wav",
"cymbal.wav",
"tamb.wav",
"cowbell.wav",
"vibra_slap.wav"
]
chords = ["cp_A.wav", "cp_D.wav", "cp_E.wav"]
chord_changes = [ # chord_file, beats to play, beats played
[0, 4, 0],
[1, 4, 0],
[0, 2, 0], [1, 2, 0],
[0, 4, 0],
[1, 4, 0],
[1, 4, 0],
[0, 2, 0], [1, 2, 0],
[0, 4, 0],
[2, 4, 0],
[1, 4, 0],
[0, 2, 0], [1, 2, 0],
[0, 2, 0], [2, 2, 0]
]
cpx.pixels.fill((0, 0, 0)) # clear all pixels
cpx.play_file(drums[0]) # play startup
# select instrument mode with slide switch
if cpx.switch:
instrument = "Chords" # remember mode for later
for i in range(9, -1, -1): # fill chord range background with blue
cpx.pixels[i] = (0, 0, 1)
time.sleep(0.05)
else:
instrument = "Drums" # remember mode for later
for i in range(9, 2, -1): # fill voice range background with white
cpx.pixels[i] = (1, 1, 1)
time.sleep(0.05)
voice = 1 # first drum voice
cpx.pixels[10 - voice] = (0, 5, 0) # green for first voice
cpx.play_file(drums[voice]) # play first drum voice
# choose drum voice with button A, lock-in selection with button B
while not cpx.button_b:
if cpx.button_a: # loop through voices
cpx.pixels[10 - voice] = (1, 1, 1) # replace background color
voice = voice + 1
if voice > 7:
voice = 1
cpx.pixels[10 - voice] = (0, 5, 0) # green for voice selection
cpx.play_file(drums[voice]) # play current voice
time.sleep(0.3)
for i in range(3, 10):
if i != (10 - voice):
cpx.pixels[i] = (0, 0, 0)
time.sleep(.1)
time.sleep(0.3)
# let's play the blues!
c_idx = 0 # start with the first chord change
while True:
cpx.detect_taps = 1
if cpx.tapped: # wait for single tap
if instrument == "Drums":
cpx.play_file(drums[voice]) # play the selected drum sound
if instrument == "Chords": # play chords in sequence
cpx.pixels[9 - (c_idx % 16)] = (3, 3, 0) # yellow foreground
cpx.play_file(chords[chord_changes[c_idx][0]])
chord_changes[c_idx][2] = chord_changes[c_idx][2] + 1
cpx.pixels[9 - (c_idx % 16)] = (0, 0, 1) # replace background
if chord_changes[c_idx][2] >= chord_changes[c_idx][1]:
chord_changes[c_idx][2] = 0
c_idx = c_idx + 1
if c_idx > 15:
c_idx = 0