PSE

PSE (Engraving oriented Pitch Spelling) is a tool for the joint evaluation of note names from their pitches, as well as local and global tones (developed by Augustin Bouquillard and Florent Jacquemard).

Written in C++17, it can be used as a Python module or integrated as a C++ library.

PSE receives some input in a MIDI-like format, including information about note heights (expressed in semitones from a reference lowest note) and boundaries of measures, and estimates appropriate note names, one global key signature, and one local scale for each bar.

These related pieces of information are jointly assessed in two optimization steps. In a first “modal” step, one likely scale is guessed for each bar, by minimizing the number of accidentals that shall be printed in the engraved score, in a best path search. Then, in a second “tonal” step, these local scales are used for estimating the key signature that would give the best note spelling.

PSE has been successfully evaluated on several datasets: monophonic, classical piano showing performances in par with state-of-the-art PS tools, see this paper présented at TENOR 2024.

The Pitch Spelling algorithm of PSE has been moreover adapted for processing written jazz music, such as jazz lead sheets, complex jazz soli transcriptions, bass lines, as described in this CMMR 2025 paper.

PSE was originally designed for an application to music transcription, in particular the construction of digital collections of digital music scores from audio recordings, in the context of teaching and cultural heritage preservation. Moreover, we have defined for its purpose new distances between jazz scales which might be of some interest in musicological studies.