Third party cookies may be stored when visiting this site. Please see the cookie information.

PenguinTutor YouTube Channel

JLL Piano - Raspberry Pi Music Clip player

This project is called the JLL piano. This is a school project that my daughter created for her music homework. She needed to create a project that related to Jerry Lee Lewis and she created a mini piano that plays a short clip for a different song depending upon the key that is pressed.

Raspberry Pi Piano Hat

It uses a Raspberry Pi with a Pimoroni Piano Hat.

You first need to setup the Piano Hat using the Pimoroni Piano Hat install instructions. Then create the following in a text editor.
The program will work in Python 2 or Python 3.

You can of course change the music clips to be any music you prefer.

import pianohat
import time
from pygame import mixer

# Change key numbering (black keys = -1)
keys = [0,-1,1,-1,2,3,-1,4,-1,5,-1,6,7]

sound_files = [
"/home/pi/MusicClips/jll-wholelotofshaking.wav",
"/home/pi/MusicClips/jll-greatballsoffire.wav",
"/home/pi/MusicClips/jll-milkshake.wav",
"/home/pi/MusicClips/jll-mynameisjll.wav",
"/home/pi/MusicClips/jll-itllbeme.wav",
"/home/pi/MusicClips/jll-highschoolrocking.wav",
"/home/pi/MusicClips/jll-waitinforatrain.wav",
"/home/pi/MusicClips/jll-whenimshaking.wav"
]

def inc_volume(ch,evt):
if evt:
change_volume(1)

def dec_volume(ch,evt):
if evt:
change_volume(-1)

# Change volume by amount specified 0 to 10 (+1, -1 etc.)
def change_volume (change):
#print ("Change volume "+str(change))
if change == 0 : return
# volume is 0 to 1 so divide by 10
delta = change / 10
new_volume = sounds[0].get_volume() + delta
if new_volume > 1:
new_volume = 1
if new_volume < 0:
new_volume = 0
for this_sound in sounds:
this_sound.set_volume(new_volume)

def handle_note(channel, pressed):
if pressed:
channel = keys[channel]
if (channel < 0):
return
mixer.stop()
sounds[channel].play(loops=0)

mixer.init(22050, -16, 2, 512)
mixer.set_num_channels(13)

sounds = [mixer.Sound(sound_file) for sound_file in sound_files]

pianohat.on_note(handle_note)
pianohat.on_octave_up(inc_volume)
pianohat.on_octave_down(dec_volume)

while True:
time.sleep(0.001)