Nando's blog
About Nando Nando's blog Posts about video, movies etc. Posts about computing Posts about music Posts about literature Philosophical posts Posts about programming

I am developing a music score editor in Python

In January 2014 I started a formidable project: I am writing sheet music editing software. I feel I am very qualified to do so because I am a musician, a composer who knows a lot about music notation, a good software developer, I always put myself in the user’s shoes and I have been using music software for 24 years, having accumulated a little list of wishes that have never been granted by Finale, Encore, Overture, Sibelius, Notion etc.

In fact, the project grew out of my dissatisfaction with all these existing programs. As a composer, I feel using their software is frequently uncomfortable. Even Sibelius, the most user-friendly of them all. Maybe the result of my efforts will be a little more comfortable to use.

Each of these programs has their own set of problems...

  • Finale is powerful but unfriendly, it couldn’t be used for composition.
  • Encore had the best GUI during the 90s but today it is seriously outdated; its (re)positioning bugs have never been fixed and the user interface is still based on toolbars.
  • Overture, which was once the successor of Encore (same author), hasn’t seen a release in years.
  • Sibelius is powerful and user-friendly but in July 2012 Avid fired the original development team, so it might be dying too.
  • Notion is the new kid on the block, it has the best playback features but also the worst notation abilities, you can’t change the keyboard shortcuts and anything you do requires a mouse click.
  • The only open source solution worth mentioning, MuseScore, has quite a few bugs, very basic playback features and bad spacing problems (collisions happen between staves and the user is required to insert a “spacer” item, this is such a bad idea)...

All these programs were written in C++. I am creating mine in the Python language, such that the result will be hackable by its users. They will be more able to scratch their itches.

But the problem is that the scope of the project is so daunting. I have a huge backlog of features I need to implement before my solution can compete. I estimate the entire project will take 2 man-years before it can be useful to anyone. It is July already and I have been able to work on this project for only 2 man-months, so there are 22 to go. When I think about this, I feel I am a little crazy for even having started it. If I give up, I will have wasted X months of my life and nobody will ever have had any use for any of it.

After 2 man-months of work, what do I have? My program reads scores created in other programs in the MusicXML interchange format and puts the score in memory. (Representing music in the computer memory poses intimidating problems by itself.) It also shows a subset of the music symbols on the screen. You can zoom in and out, you can cycle through a few color themes and you can change the title of the piece. Undo and redo have been implemented and there’s a neat framework that will be used for every user command. Many keyboard shortcuts have been planned and placed in a configuration file so the user can change any of them if she wishes to. A music cursor already exists that travels through all notes in the piece. But you still cannot add, change or delete a single note. And there is so much still not shown on the screen... There are no beams, no slurs, no articulations, no dynamic markings etc.

Alpha version of my music editor

Screenshot of an alpha version of my music editor showing a test of clusters

This is because music notation is very complex. Simply displaying it on screen is very hard. If you are a musician, can you articulate the rules to display clusters of notes? Questions of spacing have to be faced... In my software, from day zero, the collisions (between music signs) that plagued this kind of software for years and years, making users drag symbols all the time... these placement problems are considered bugs with the greatest priority. Nobody wants to be fixing these manually, the program must get this right without any human help!

If this project is so hard even today, I can imagine what the Finale developers accomplished back in 1988 ― such software did not yet exist. Respect goes out to them, deep respect. Today I have open music fonts that I can use, the Python language and the Qt framework which do so much of the work for me, especially concerning graphics. Even creating PDF files probably won’t be much different than showing the stuff on the screen, thanks to Qt.

Obviously I should not be doing this alone. This post is a sort of call for help, as there are some kinds of help I could use:

  • Help making the project financially viable. I haven’t found an investor. Here in Brazil, crowdfunding websites such as catarse.me exist but are less successful than in, say, the U. S. Kickstarter itself is not available here. Also, I am a very technical person, I don’t like my business abilities.
  • Help programming. The software is being written in the high-level Python 3.4 language, which is proving to be a very good choice because it is so expressive and easy to read. Performance is fine so far even without any optimization. For the GUI I am using Qt through Pyside. Playback features are deferred to the end of the backlog, but it wouldn’t hurt to have someone get started on them. I have ideas (to do things differently from the competition) in many subjects, including playback.
  • When the time comes, help testing the application will be very appreciated.

I have dreamed of writing this software for decades. In my dreams it would always be open source. But right now I don’t see how open source could ever repay such an effort. I need to be adequately compensated for this work. This will probably be cheap software, but not (immediately) open source ― even though I like free software so much.

Can you help? Any messages about the project are very welcome!