## Pico MP3 Sampler Kit Example Code
## Iffy Books | iffybooks.net| wtfpl 2025
## The following code is in CircuitPython!

import board
import audiomp3
import audiopwmio
import digitalio
import time
import random

led = digitalio.DigitalInOut(board.GP25)
led.direction = digitalio.Direction.OUTPUT

for i in range(3):
    led.value = True
    time.sleep(0.05)
    led.value = False

audio = audiopwmio.PWMAudioOut(board.GP28)

## The pins we'll use for our keys
keypress_pins = [board.GP3, board.GP12, board.GP16, board.GP17,
                 board.GP18, board.GP19, board.GP20, board.GP21,
                 board.GP22, board.GP26]

## Our array of key objects
key_pin_array = []

## Initialize pin objects
for pin in keypress_pins:
    key_pin = digitalio.DigitalInOut(pin)
    key_pin.direction = digitalio.Direction.INPUT
    key_pin.pull = digitalio.Pull.UP
    key_pin_array.append(key_pin)

    
all_mp3s =  ["KIT2.mp3","KIT.mp3","KIT_CLAP.mp3","KIT_BEEP.mp3",
                "HC00.mp3","CY5050.mp3","CB.mp3","LT10.mp3",
                "BD1025.mp3","MA.mp3","Hand_Clap_Sample.mp3"]

mp3_list = []

## Select random samples
for i in range(len(all_mp3s)):
    random_mp3 = random.choice(all_mp3s)
    all_mp3s.remove(random_mp3)
    mp3_list.append(random_mp3)

for i in range(len(mp3_list)):
    print(str(i+1) + " " + mp3_list[i])

## Infinite loop
while True:
    ## Loop through pin objects
    for key_pin in key_pin_array:
        ## Check whether pin is grounded
        if not key_pin.value:
            ## Play audio
            led.value = True
            i = key_pin_array.index(key_pin)
            decoder = audiomp3.MP3Decoder(open(mp3_list[i], "rb"))
            audio.play(decoder)
            print("Playing " + mp3_list[i])
            while not key_pin.value:
                pass
            led.value = False