LilyPond: Music Notation for Everyone

This page summarizes the projects mentioned and recommended in the original post on news.ycombinator.com

Our great sponsors
  • SurveyJS - Open-Source JSON Form Builder to Create Dynamic Forms Right in Your App
  • WorkOS - The modern identity platform for B2B SaaS
  • InfluxDB - Power Real-Time Data Analytics at Scale
  • notation

    C++ music notation library (by SemitoneGene)

  • There are numerous symbols to represent pitch on a staff, numerous other symbols that can be attached to the pitch symbols that represent changes in duration, dynamics, various techniques and more. These symbols can be stacked above and below the pitch symbols, to the sides of the symbols and more. There are other symbols that can span multiple pitch symbols, groups of symbols and more. There are more symbols that control the tempo of the playback of the score, the number of times sections of the score should be repeated and other symbols that will move the current playback location of the score to some other place. The placement of all of these symbols have "rules" but these rules are really suggestions and composers will always want to adjust and bend these rules. If a system implements strict rules, that system will come under criticism as being inflexible. There seems to always an exception to every rule of music notation.

    I have been working on music notation software for almost forty years and have seen programmers come and go with their attempts to "solve" the problem of music notation. It is a very difficult problem. Once upon a time SCORE [1] was considered the best of the best on music engraving software. I worked with Leland Smith to update the program to more platforms. Sadly, the SCORE source code is not available and the rights of the source code are unclear after Leland's passing. Many music publishing companies continued to maintain systems using SCORE for quite a while.

    The notation engine of my iOS music notation program Komp [2] is available here: https://github.com/SemitoneGene/notation. This code is most certainly not the best or most complete, but it is easy to read and comprehend if you want to see the complexity involved. MuseScore has also been mentioned in other posts.

    If I were to do a commercial engraving of a music score, I would use Dorico. It is being developed by who I would consider the most insightful and understanding group of developers who have a real desire to make the best music engraving program.

    LilyPond produces very good output but offers its own series of challenges to use. MuseScore is a nice program, but it has a long way to go to meet the demands of the high professional composition and engraving market.

    [1] https://en.wikipedia.org/wiki/SCORE_(software)

  • vexflow

    TypeScript library for rendering music notation & guitar tablature. (by vexflow)

  • On a related note, VexFlow is a project for rendering music notation in the browser.

    https://github.com/vexflow/vexflow/

    OpenSheetMusicDisplay is a higher-level library that uses VexFlow to render entire MusicXML documents.

    https://github.com/opensheetmusicdisplay/opensheetmusicdispl...

  • SurveyJS

    Open-Source JSON Form Builder to Create Dynamic Forms Right in Your App. With SurveyJS form UI libraries, you can build and style forms in a fully-integrated drag & drop form builder, render them in your JS app, and store form submission data in any backend, inc. PHP, ASP.NET Core, and Node.js.

    SurveyJS logo
  • opensheetmusicdisplay

    OpenSheetMusicDisplay renders sheet music in MusicXML format in your web browser based on VexFlow. OSMD is brought to you by PhonicScore.com.

  • On a related note, VexFlow is a project for rendering music notation in the browser.

    https://github.com/vexflow/vexflow/

    OpenSheetMusicDisplay is a higher-level library that uses VexFlow to render entire MusicXML documents.

    https://github.com/opensheetmusicdisplay/opensheetmusicdispl...

  • On a related note, VexFlow is a project for rendering music notation in the browser.

    https://github.com/vexflow/vexflow/

    OpenSheetMusicDisplay is a higher-level library that uses VexFlow to render entire MusicXML documents.

    https://github.com/opensheetmusicdisplay/opensheetmusicdispl...

  • music21

    music21 is a Toolkit for Computational Musicology

  • abjad

    Abjad is a Python API for building LilyPond files. Use Abjad to make PDFs of music notation.

  • Velato

    Velato language - write code with music

  • In 2009, I made Velato, an esolang where code is written in pitch values (https://github.com/rottytooth/Velato) encoded as MIDI files. So sort of the opposite of writing algorithmic music (where the human programmer writes music to satisfy conditions of the program). Before switching to LilyPond, I'd used GUIDO with a GUIDO-to-MIDI generator, but it was always awkward. Part of the challenge is that notes can be sounded simultaneously to make the score work better musically, but still need to appear in the correct sequence in the MIDI file for the program to succeed; something that LilyPond handles correctly. There's a transparency to how LilyPond functions that is not always there with programs that try to be "helpful" and clean-up or rearrange information.

  • WorkOS

    The modern identity platform for B2B SaaS. The APIs are flexible and easy-to-use, supporting authentication, user identity, and complex enterprise features like SSO and SCIM provisioning.

    WorkOS logo
  • VSLilyPond

    VSCode Extension for LilyPond

  • I've been using this one:

    https://github.com/lhl2617/VSLilyPond

    Its a bit old, but works very well. I contributed a few fixes years ago to make the midi more reliable, depending on the type of keyboard you have

NOTE: The number of mentions on this list indicates mentions on common posts plus user suggested alternatives. Hence, a higher number means a more popular project.

Suggest a related project

Related posts