Jump to Content
Developers & Practitioners

Gregorian Pi - Singing of a Constant

November 15, 2022
Katie McLaughlin

Senior Developer Relations Engineer

Sara Ford

Senior Developer Relations Engineer

Brought to you by Developer Advocates and lovers of π

Earlier this year, Emma Haruka Iwao calculated π (pi) to 100 trillion digits, up from her previous record of 3.14 trillion in 2019. With the calculation complete, the Pi API has been updated so you can fetch the digits starting from anywhere in the sequence. This API, and the digits themselves, have been used to create many visual and audio experiments, all listed on pi.delivery.

But then, we saw this comment on an article from the media coverage

By law when reciting Pi to one hundred trillion places, it must be done in the style of a Gregorian chant.

We can do that. We have an ML model we trained earlier. 

Introducing our singers: the Blob Opera

In 2020, David Li, Artist in Residence at Google Arts & Culture launched "Blob Opera", a machine learning model trained on opera singers, where you can interactively create songs and have the blobs harmonize to your input. You get the option of four 'singers', each with a 10-note scale, and five 'vowels'. 

You can programmatically create compositions using python-blobopera, a community-written unofficial toolkit to convert MusicXML files into Blob Opera scores. This toolkit also accepts lyric input and guesses phonetic approximations to make use of the available vowels... 

... which means we can, and have, programmed an operatic arrangement of a Gregorian chant of the digits of pi.

Video Thumbnail

Gregorian Pi - the singing of a constant

Sing a song of tetrachord

Originating in the 9th century through the Roman Catholic Church, Gregorian chants are monophonic (single melody) unaccompanied sacred songs in Latin. 

With this format as a guide, we can use the input of the digits of pi, mapped to a simple musical scale (ignoring for the purposes of simplicity the difference between Gregorian and modern musical notation), using the syllables from the latin translation of each digit (readily available via Google Translate). 

From there, it's a process of writing a Python script to fetch the digits of pi from the pi.delivery API, then build a score using the Python library music21. After building a stream of notes and mapping each digit to the note and Latin lyrics, we can start developing our score. We can export using music21 to MIDI, meaning we can play in the command-line using pygame to check how our orchestration sounds as we go. 

By exporting to MusicXML directly from music21, we can also confirm our output in MuseScore, a free music notation software tool. 

https://storage.googleapis.com/gweb-cloudblog-publish/images/Gregorian_Pi.max-2200x2200.png
Gregorian Pi

Following that, it's just a case of getting python-blobopera to take the MusicXML file, process it using its own formatting and phonetic rules, then upload it to Blob Opera. 

The result is a mathematical melodic masterpiece. Or masterπece, if you will. 

And for bonus points, instead of keeping to more modern notation, we can score our composition in GABC notation to produce actual neume plainchant, which we can then visualize in Illuminare Score Editor:

https://storage.googleapis.com/gweb-cloudblog-publish/images/Neume_Plainchant_Pi.max-800x800.png
Gregorian Pi, Plainchant

Learn more about the technologies used in this post:

Posted in