Piano Pi - Play a Duet With Your Pi!

by ZRob314 in Circuits > Raspberry Pi

5863 Views, 29 Favorites, 0 Comments

Piano Pi - Play a Duet With Your Pi!

Zagros Piano Pi 006

In this tutorial you will learn a simple way to program your Pi using Sonic Pi to create a piano accompaniment.

Remember the piano scene in the move Big? You will be programming the bass part of the song they play "Heart and Soul".

You will need:

Raspberry Pi 3

Monitor, keyboard and mouse.

Speakers

Piano

Open Sonic Pi on Jessie Raspbian

sonicpi.png

Pi comes pre-installed with the NOOBS card.

Navigate to Menu >> Programming >> Sonic Pi

Getting Familiar With Sonic Pi

sonic_heartandsoul.png

If this is your first time using Sonic Pi, click the "Help" button and walk through the first couple lessons to get familiar with the platform.

I went ahead and changed the editor to a dark screen by clicking on the "Prefs" button. You may also adjust the volume there.

At the bottom of the editor you will see "Buffer0" - "Buffer9". Here you can switch between code windows to create unique sounds and music for each Buffer. Find an empty Buffer to begin this project.

Midi Numbers

58482e9b9bad4bba44000638.jpeg

Sonic Pi uses the Midi number system where each key on the piano has a number.

Middle C is 60. To begin the song, C is played twice. If you don't want notes to be played at the same time you must separate the notes with a rest or sleep. This is the duration of time in seconds before the next note is played. *Note a zero must precede the decimal if sleep is less than a second or you will get an error.

  play 60
  sleep 0.4
  play 60
  sleep 0.3

The next 3 notes will be played as a chord twice with a sleep in between each chord:

  play 72
  play 76
  play 79
  sleep 0.4
  play 72
  play 76
  play 79
  sleep 0.3

Go ahead and press the "Run ►" with your speakers on to hear your song so far!

Second Verse, Same As the First!

heartandsoul_code.png

The accompaniment on this piece repeats itself again and again. With Sonic Pi you can easily wrap the code you want repeated in a loop with the key words do and end:

loop do
  play 60
   ...(lots of code)
  sleep 0.4
end


Be careful though, using the word loop creates an infinite loop and the song will repeat until you press the "Stop ■" button. To limit the number of times the loop runs, simply type the number followed by .times:


5.times do
    play 60
   
    ...(more code)   
    sleep 0.4 
end