for pin in buttonpins:
    button = digitalio.DigitalInOut(pin)
    button.direction = digitalio.Direction.INPUT
    button.pull = digitalio.Pull.UP
    buttons.append(button)
for pin in ledpins:
    led = digitalio.DigitalInOut(pin)
    led.direction = digitalio.Direction.OUTPUT
    led.value = False
    leds.append(led)

audio = AudioOut(board.SCK)

path = "sounds.2040/"
num_voices = len(beats)

mixer = audiomixer.Mixer(
     voice_count=num_voices,
     sample_rate=44100,
     channel_count=1,
     bits_per_sample=16,
     samples_signed=True
)

audio.play(mixer)
for i in range(len(beats)):
    wave_file = open(path + beats[i], "rb")
    wave = WaveFile(wave_file)
    mixer.voice[i].play(wave, loop=True)
    mixer.voice[i].level = 0.0
    time.sleep(1.0)

while True:
    for button in buttons:
        if not button.value:  # pressed?
            i = buttons.index(button)
            mixer.voice[i].level = 1.0
            wave_file = open(path + beats[i], "rb")
            wave = WaveFile(wave_file)
            mixer.voice[i].play(wave, loop=True)
            time.sleep(3)
            leds[i].value = True
            if animations[i] is not None:
                animations[i].animate(show = True)
        if button.value:
            i = buttons.index(button)
            mixer.voice[i].level = 0.0
            leds[i].value = False
            if animations[i] is not None:
                animations[i].fill(BLACK)