Sheetmusic is a spreadsheet software for integrated data musicification and conventional music composition.

Making music from data tables

The basic idea is to think of music as data tables. So let's start by talking about data tables.

Here's a data table.

In a tidy data table, rows correspond to things. (You might also call them "observations" or "records".) For example, each row in this table is a country.

Columns correspond to attributes about each thing. You might also call them "variables", "fields", "properties", or "dimensions".

Spreadsheets as musical scores

We can use data tables to represent musical scores.

spreadsheet versus ordinary sheet music

In this figure we see music represented in two forms: as a data table and as conventional sheet music.

spreadsheet versus ordinary sheet music slide, with row/beat highlighted

Each row in the table corresponds to a beat in the music. That is, the two regions with red boxes around them correspond to the same data. Different notes come from different columns. G2 is G2, G3 is G3, B5 is B5, and the lyrics aren't in the sheet music.

spreadsheet versus ordinary sheet music slide, with borders for bars

Music is often divided into measures. In sheet music, this is typically represented with bars. That's also how I do it in my spreadsheet.

And that sheet music you saw was actually generated inside the spreadsheet.

Spreadsheets as instruments

As I said before, I like tables. I just showed you how we can think of music as a representation of the data in a spreadsheet.

synthesizer functions

But spreadsheets are also code, so let's also think about musical functions as spreadsheet functions.

For example, sheetmusic provides a third_interval function for making a third interval in a particular key. Here are some other functions.

  • ionian_scale(<note>)
  • chord_progression(<the progression>, <base note>)
  • dominant7_chord(<note>)
  • dominant7_arpeggio(<note>)

For example, if I type "=ionian_scale('C4')", I'll get an Ionian scale starting at middle C.


Sheetmusic is implemented as a bunch of custom functions for the Gnumeric spreadsheet. I don't exactly recommend doing this; Gnumeric is quite buggy and that the plugin system leaves much to be desired.