113 lines
3.1 KiB
Python
113 lines
3.1 KiB
Python
# SPDX-FileCopyrightText: 2017 John Edgar Park for Adafruit Industries
|
|
#
|
|
# SPDX-License-Identifier: MIT
|
|
|
|
# FruitBox Sequencer
|
|
# for Adafruit Circuit Playground express
|
|
# with CircuitPython
|
|
|
|
import time
|
|
|
|
from adafruit_circuitplayground.express import cpx
|
|
|
|
# Change this number to adjust touch sensitivity threshold, 0 is default
|
|
cpx.adjust_touch_threshold(600)
|
|
|
|
bpm = 60 # quarter note beats per minute, change this to suit your tempo
|
|
|
|
beat = 15 / bpm # 16th note expressed as seconds
|
|
|
|
WHITE = (30, 30, 30)
|
|
RED = (90, 0, 0)
|
|
YELLOW = (45, 45, 0)
|
|
GREEN = (0, 90, 0)
|
|
AQUA = (0, 45, 45)
|
|
BLUE = (0, 0, 90)
|
|
PURPLE = (45, 0, 45)
|
|
BLACK = (0, 0, 0)
|
|
|
|
cpx.pixels.brightness = 0.1 # set brightness value
|
|
|
|
# The seven files assigned to the touchpads
|
|
audio_files = ["fB_bd_tek.wav", "fB_elec_hi_snare.wav", "fB_elec_cymbal.wav",
|
|
"fB_elec_blip2.wav", "fB_bd_zome.wav", "fB_bass_hit_c.wav",
|
|
"fB_drum_cowbell.wav"]
|
|
|
|
step_advance = 0 # to count steps
|
|
step = 0
|
|
|
|
# sixteen steps in a sequence
|
|
step_note = [1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1]
|
|
|
|
# step pixels
|
|
step_pixel = [9, 8, 7, 6, 5, 4, 3, 2, 9, 8, 7, 6, 5, 4, 3, 2]
|
|
|
|
# step colors
|
|
step_col = [WHITE, RED, YELLOW, GREEN, AQUA, BLUE, PURPLE, BLACK]
|
|
|
|
|
|
def prog_mode(index):
|
|
cpx.play_file(audio_files[index])
|
|
step_note[step] = index
|
|
cpx.pixels[step_pixel[step]] = step_col[step_note[step]]
|
|
print("playing file " + audio_files[index])
|
|
|
|
|
|
while True:
|
|
# playback mode
|
|
if cpx.switch: # switch is slid to the left, play mode
|
|
|
|
cpx.red_led = False
|
|
|
|
if cpx.button_a:
|
|
cpx.pixels.fill(GREEN)
|
|
time.sleep(.2)
|
|
cpx.pixels.fill(BLACK)
|
|
|
|
if cpx.button_b:
|
|
for i in range(16):
|
|
step = i
|
|
# light a pixel
|
|
cpx.pixels[step_pixel[i]] = step_col[step_note[i]]
|
|
cpx.pixels[step_pixel[i - 1]] = BLACK
|
|
|
|
# play a file
|
|
cpx.play_file(audio_files[step_note[i]])
|
|
|
|
# sleep a beat
|
|
time.sleep(beat)
|
|
cpx.pixels.fill(BLACK)
|
|
|
|
# beat programming mode
|
|
else: # switch is slid to the right, record mode
|
|
cpx.red_led = True
|
|
if cpx.button_a: # clear pixels, reset step to first step
|
|
cpx.pixels.fill(RED)
|
|
time.sleep(.2)
|
|
cpx.pixels.fill(BLACK)
|
|
cpx.pixels[9] = WHITE
|
|
step = 0
|
|
step_advance = 0
|
|
|
|
# press B button to advance neo pixel steps
|
|
if cpx.button_b: # button has been pressed
|
|
step_advance += 1
|
|
step = step_advance % 16
|
|
cpx.play_file(audio_files[step_note[step]])
|
|
cpx.pixels[step_pixel[step]] = step_col[step_note[step]]
|
|
cpx.pixels[step_pixel[step - 1]] = BLACK
|
|
|
|
if cpx.touch_A1:
|
|
prog_mode(0)
|
|
if cpx.touch_A2:
|
|
prog_mode(1)
|
|
if cpx.touch_A3:
|
|
prog_mode(2)
|
|
if cpx.touch_A4:
|
|
prog_mode(3)
|
|
if cpx.touch_A5:
|
|
prog_mode(4)
|
|
if cpx.touch_A6:
|
|
prog_mode(5)
|
|
if cpx.touch_A7:
|
|
prog_mode(6)
|