The sounds of Pi
What is it?
The sound of Pi is another Pure Data experiment. Similar to my last one
(meteor) it is focused around sonifying data.
The sound of pi is based off of the first 400 digits of pi. There are 8 sawtooth
oscillators and each one is assigned 50 notes from the 400 digits. The patch is
based off of pitch classes and musical set theory (we’ll get to that later).
The patch
As you can see, it’s pretty small and there aren’t many abstractions hidden
underneath either.
The 8 oscillators mentioned previously are the nth-pi-osc
s that you see in the
patch. You can see from the creation of nth-pi-osc
that each one has its own
portion of pi (heh) to look after. One starts reading at 0, another at 50,
another at 100 and so on…
The 50 numbers contained within each oscillator are 50 numbers of pi and are
treated as integer pitch classes all relative to the root of C.
The concept of a pitch class is simple. If you can count to 12 and know the
alphabet up to G, then congratulations, you can understand pitch class theory.
Let’s go through it anyway…
Pitch classes
We’ll dissect the first few notes of this patch to get a better idea of what a
pitch class is. Let’s take the first oscillator ([nth-pi-osc 0]
in our case).
It will be dealing with the first 50 digits of pi. Here are the first 10 it
encounters:
`
{3, 1, 4, 1, 5, 9, 2, 6, 5, 3}
`
We treat each number as a semitone distance from a chosen root note. We’ve
chosen the root of C so in this case it will yield the following:
`
{Eb, Db, E, Db, F, A, D, Bb, A, Eb}
`
For the most part, that’s it, you now understand pitch classes and musical
set theory. There’s a whole lot more to pitch classes that you can explore,
but for the purposes of understanding this patch, that about covers it.
Abstractions
nth-pi-osc
This abstraction is responsible for getting the current value of pi for its
oscillator and sending over the frequency. Nothing complex here but note the
following:
1) + 60
. We add 60 to every MIDI note as we want it to be based off of C (that
is to say that 0 in our pitch class is C).
pd-ramped-osc
This is what produces the majority of the sound, the rest of the patch is just
reading data and using math to make sure we’re using the correct digits of pi
for each oscillator.
Still, this sub-patch is very simple. Where the magic happens is all contained
within the line
object. It takes 60000 milliseconds to reach it’s target
frequency of whatever $1
is. Finally, it passes that on to our sawtooth wave
(phasor~
).
Data
The patch reads from a text file which contains 1000 entries of pi (I only chose
to use the first 400). Each entry is on its own line so have the following:
3
1
4
1
5
9
2
6
5
3
5
8
9
...
There’s nothing really magical here though I do like the rendered array of pi
that Pure Data produced. Neato.