Chilled Geek's Blog

Always curious, always learning

Open Source Music Score Generator

Posted at — Nov 10, 2019

Web Service Screenshot

Background

I needed to generate some music scores. I have tried to use sibelius/similar software a while ago, but was not sure if I wanted to pay for the latest software. Being ignorant and not realising Sibelius had a free tier offer with limited functionalities, I came across LilyPond, and loved the idea of it. Here are key points about it (and excuses to convince myself to use this!):

However, I could not install it on my macbook when I wanted to use it (package incompatibility with the fresh macOS update at that time).

I expected LilyPond to eventually catch up with the OS updates, but I thought, why not create a web service that provides this function that I need, and is independent of platform?

All I needed was a very simple web application, which basically means something that can be run on a web browser:

Application

All the code that I’ve described in this post can be found in my open source repositories:

The tools used to construct this application are: docker, python, flask, LilyPond

The readme files of the lilypond-web repositories describes how to set up the web application locally (or on kubernetes). In short:

This code based has been tested on mac/linux, but not on windows. That said, as docker is used to deliver this application, it should be platform dependent and should just work as long as docker is installed!

Summary and next steps

It seems like an overkill to have LilyPond set up as a web application, but it was a good chance for me to put my coding to good use (as I needed to produce music scores!), and also to incorporate some software engineering and devops practices into the development of this project (refer to my article on devops)

While this code base allows me to write scores easily on any platform, I aim to host this function as a true web-service (with a real URL rather than just deploying on my local machine)

I will be exploring the use of serverless computing, as I suspect the service will not receive a lot of calls, and it will be a waste to just have an EC2 like server on AWS being idle most of the time