Harsh Mehta
Posted on April 1, 2020
Hello 👋🏼
I was always interested in music but somehow I just couldn't get myself to explore those costly tools with complex UI. Until a few weeks ago, I found something really interesting. I found out about a tool that compiles code into Music! I tested it out and was instantly hooked. It's really fun and even if you're not that much into making music, you can kill some great time with Sonic Pi. So, here's a blog on how to get started!
What's Sonic Pi?
Sonic Pi is a code-based music creation and performance tool.
This basically means that you can create, mix music by code. Sonic Pi is built on Ruby and is Open Source.
You can download Sonic Pi from their website. You can download it for Windows, macOS and Raspberry Pi as well.
Basic Music Theory
Before we start, I'll be covering some basic Music theory which is very easy to understand so don't worry.
Notes
The piano diagram below shows the various piano notes that piano keys usually correspond to. The ones with #
are the sharp notes and the ones with the symbol that looks like a b
are the flat notes. Keys, wherever multiple notes are written, can be referenced as those notes. Meaning that C# and Db
are the same key.
You can test what these notes usually sound on piano on this virtual piano. Make sure you enable the "Letter Notes" so that you know which note you are playing by pressing the key.
Numbers, Notes and Octaves.
Every note along with its octave represents a number, depending on the number of keys on a keyboard. An Octave is an interval between musical pitch and another with double its frequency. So, numbers or notes belonging to one octave will have the same frequency and those with different octave numbers will have different frequencies. Here is a cheat sheet I've taken from MeHackit's Sonic Pi tutorial.
Coding on Sonic Pi
Once you open Sonic Pi you'll probably be able to understand most of the interface but Sonic Pi's documentation has a UI guide that I'm attaching below for your reference.
Playing notes
We'll start by playing a note and this is how you play a note. In your editor, just type play :c
and hit Run
.
Congratulations! You've created and played your first music :p!
You can also change the octaves in the notes like so
play :c2
which will play the C note at the 2nd octave. You can experiment with different notes and octaves yourself. You can also refer to the cheat sheet provided above.
You can also play a note by its number. If you look for the note C at 4th octave you'll find the number 60. So, playing :c4
is the same as playing the 60th note number. To play a note number on Sonic Pi, just type play
and the corresponding note:
play 60
Notice how we did not include the colon as we did in the play :c
command. When we play a number, we don't have to use any colon.
Changing the Synth
One thing you'll notice, that these notes sound very different than a normal piano. That's because Sonic Pi uses a default synthesizer and we can change the synth with the use_synth
command. A bunch of synth options will appear in a list like so:
I'm using the piano
synth and after that, all my notes will sound like a piano
use_synth :piano
play :c4
Awesome right? You can try playing with different synth options available to you by Sonic Pi.
Sleep
We just played a single note up until now, but what if we want to play more than one note? I can just play another note below my first note, simple right?
play :c4
play :c2
No. If you tried it yourself you will know what's wrong. The problem is that Sonic Pi executes lines of code quickly. So technically, before my first note even finishes playing, my second note will start which is almost instant. So what's the workaround? For that, we have the sleep
command.
play :c4
sleep 1
play :c2
Once the first note is played, the sleep command will tell Sonic Pi to stop for a second and then play the next note. The time is in seconds so if you type sleep 0.25
, it will sleep for a Quarter of a second.
Parameters
You can tweak notes by changing their different parameters. You can add parameters to your notes separated by a comma.
You'll see a bunch of parameter options that we can use. We'll go through a few of them.
Pan
With the pan
parameter, you can change the direction of your sound. For example, you can play your sound on the right or left or in the middle or anywhere in-between left and right. The value ranges from -1 to 1
. -1 being extreme left and 1 being extreme right.
play :c3, pan: -1 #plays the note on left
sleep 1
play :c3, pan: 1 #plays the note on right
sleep 1
play :c3, pan: 0 #plays the note in the middle(default)
sleep 1
play :c3, pan: -0.25 #plays the note a little bit to the left
Amp
With the amp
parameter, you can change the amp of your notes. Which basically means you can change the volume.
play :c4, amp: 2
If you run the above snippet, you'll hear the volume has increased. The default amp value is 1 and it starts from 0. If you put amp: 0
, the volume will be 0 and you won't be able to hear anything.
Samples
We'll explore something really interesting called samples. Samples are basically pre-recorded sounds that you can use in your music. Sonic Pi has around 130 of such samples and also gives you the option to use external samples that aren't available in Sonic Pi. You can play different samples using the sample
keyword and you'll get a list of samples you can select from.
There are a lot of different cool samples that you can explore. For example, the following sample will give you a kick
or a beat
sound.
sample :bd_haus
Just like the play
command, samples also have parameters that you can use to tweak how your samples sound. You can play with different samples and different parameters.
Loops
That was nice, in fact, it was so nice that we'd like to play it over and over again. So rather than playing the sample on every line, which will take me forever to do so, we can use the loop command given to us by Sonic Pi. The syntax goes something like this:
loop do
#code that you want to loop
end
Note that every loop must have at least one sleep command. Otherwise, Sonic Pi will try to play everything at once, which will completely cause it to break and will throw you an error about the loop not sleeping or syncing.
loop do
sample :bd_haus
sleep 1
end
As you might have guessed, the above code snippet will play the bd_haus
sample every second over and over again.
Done and Dusted?
That's about it for now! Play around with notes, samples, loops, and try changing different parameters and get creative! Remember, it's all fun and games. There is no such thing as a right and a wrong approach in art! It all depends on your creativity.
Part 2
In Part 2, I have covered the basics of live_loop
, adding effects, and using randomness in your music! Do check out if you like this part :)
Contact Me
You can contact me if you have any doubts and you can also let me know on social media and do give a feedback! :D
Stay Home and Stay Safe :) <3
Posted on April 1, 2020
Join Our Newsletter. No Spam, Only the good stuff.
Sign up to receive the latest update from our blog.